Главная » Хабрахабр » Реверс-инжиниринг. История. Моя

Реверс-инжиниринг. История. Моя

Всем привет,

Эта статья о том, как я докатился до такой жизни пришёл в реверс-инжиниринг, что читал, чем интересовался, где применял, и т.д. На этот раз статья будет не технической (хотя в ней и будут попадаться какие-то технические термины/моменты), а скорее автобиографической, если так можно выразиться. Поехали... И, я почему-то уверен, что моя история будет иметь множество отличий от твоей.

Начало

Думаю, как и многим парням (а может и девушкам), мне всегда было интересно знать, как же всё устроено, почему работает, почему не работает, и т.д.
Сначала я начал разбирать все машинки на батарейках, которые у меня были (даже те, что были у брата). А начиналось всё ещё в далёком детстве. Потом нашёл какой-то старый радиоприёмник-магнитофон у отца в кладовке, и разобрал его тоже. Конечно, не всегда удавалось собрать, но, интерес был превыше. Но там я вообще ничего не мог понять: микросхема, "капля" и экран. Ещё были тамагочи. Хотя да, экран я разбирал на слои.
Конечно же, за всё несобранное я получал по шапке.

Sega Mega Drive

Уверен, момент покупки приставки для многих детей 90-х не забыт до сих пор (ромхакеры и ретрогеймеры — привет!), а именно для меня он стал ещё и ключевым в будущем. Отец купил мне её на день рождения: обычная пиратка, ибо лицензионных тогда не было, плюс картридж "Contra: Hard Corps". Но обо всём по-порядку.

В школе всегда была интересна информатика и физика (ещё химия). Время шло, я рос. И, для меня было шоком, когда я пошёл на районную олимпиаду по информатике, и, у всех, кроме меня, были синие окошки Turbo Pascal, а у меня — белое — Интал. Ассемблеру там, конечно, не учили, но программировать в алгоритмической среде "ИнтАл" (белорусская разработка для школ) — очень даже. Но, тогда я занял почётное третье место.

11-й класс

автора: тот самый компьютер, только куда позднее) (прим.

С первых дней я начал играть в игры. Осенью 2005-го года мне купили компьютер. А спустя полгода играть надоело. Учёба в школе просела, но держалась на нормальном для гимназии уровне. Тогда и свершился переломный момент!

Негеймер

Куча сайтов с кряками, кейгенами, патчами. Именно тогда, в 2006 году, как мне кажется, начался варезный бум. Каждый старался перепаковать инсталлятор так (привет сборкам Винды), чтобы скачавшему ничего лишнего делать не нужно было: установилось и работает, правда иногда добавляя что-то от себя.

Правда сам "таблеток" не делал, а лишь находил их, рисовал NFO-шку, перепаковывал инсталлер (чаще всего это были Inno Setup), а дальше вы знаете. И я был таким.

Переводчик

Накачал разных редакторов ресурсов, типа Resource Hacker, начал открывать все exe и dll-файлы программ что находил в Program Files, и смотрел, какие строковые ресурсы можно перевести. Так вот, тогда мне почему-то не нравилось, что далеко не все программы переведены на русский язык, и захотелось это исправить. RUS файл, и выкладывал (так и не узнал, как эти rus-файлы работали). Переводил, паковал в установщик .lng или . Но так продолжалось до тех пор, пока мне не повстречались упакованные и защищённые файлы.

cracklab.ru

Именно там я узнал, что исполняемые файлы бывают упакованными (а порой и защищёнными), а так же как с этим бороться. Ныне exelab.ru. И, так как авторы часто упоминали в своих статьях такие штуки как "ассемблер", "дизассемблирование", "рассылка Калашникова", пришлось углубляться в матчасть.

Попробовал — очень понравилось! Скачал для экспериментов себе парочку "крэкмисов" (программы, специально написанные для того, чтобы их реверсили, обучаясь при этом взлому и защите). Всё получилось с первого раза, чему я был несказанно рад.

В итоге, простые защиты снимались на раз-два с помощью патчинга (от слова patch — заплатка), а вот с теми, что посложнее (я решил попробовать эротические шашки и поддавки) как-то уже стало тяжело, и я остановился, решив вернуться к переводам.

Ромхакинг

RU". Иногда играя в Сегу, мне попадались картриджи на русском языке, на титульных экранах игр которых были такие надписи как "Группа перевода SHEDEVR", "Перевод NEW-GAME. И мне захотелось овладеть этими знаниями. Разработчики ли это, или же какие-то сторонние организации я не знал, но у них явно был доступ к каким-то манускриптам, древним текстам шумеров, в которых рассказывалось, как переводить игры на русский язык.

Так я открыл для себя форум "Шедевра".

Правда, статьи были только для NES (Nintendo Entertainment System, или по-народному: Денди, Сюбор). У них были статьи, были программы — всё необходимое для того, чтобы сделать твою любимую игру ещё и "твоей любимой игрой на русском языке". И я погрузился в новые и увлекательные для себя темы: Ромхакинг и эмуляция ретро-консолей на ПК. Но всё равно круто!

Если вкратце, то ромхакинг — это любое изменение образа или файла игры, с какой либо целью: перевод, исправление кода, графики.

Правда, никакого тебе ассемблера, только хардкор! Это был очень занимательный процесс: сидишь, перерисовываешь квадратики игрового шрифта пиксель за пикселем, переводишь и вставляешь с помощью программы для перевода PokePerevod текст, и смотришь что получилось. Но это уже было планкой, через которую очень немногие могли перепрыгнуть (судя по количество активных на форуме Шедевра).

Я учитель

Ещё немного поднаторев в ассемблере, я понял, что "секретных" знаний во мне теперь чересчур много, и мне есть что рассказать из своего опыта, есть чем поделиться, и что ещё не было описано в имеющихся статьях. Сделав какие-то переводы "в стол", а какие-то и в народ, я вернулся к исполняемым файлам Windows. Хотелось передавать знания таким же новичкам, каким я был сам (видимо, сказывается то, что мама — учитель).

Тогда не будет казаться, что программа взята специально старой версии, давно изученная, поломанная, а получится наоборот такой себе свежий и актуальный урок, со скриншотами и практически без абсолютных адресов, чтобы хоть как-то сохранить актуальность статьи на момент чтения кем-либо в будущем. Взяв первую попавшуюся программу, которая требовала лицензию (а практически все статьи, обучающие крякингу, так и начинались), я решил исследовать её, параллельно рассказывая что я делаю.

Получив положительные отзывы, я писал ещё и ещё, понимая, что спрос есть.

Инструменты

Никаких тебе SoftICE, HIEW и DEBUG. При написании каждой статьи я старался использовать только самые свежие и удобные программы на тот момент: Olly Debugger с плагинами, PEiD, PE Explorer, и кучу других. COM, коими привыкли пользоваться большинство авторов, хотя пользоваться ими в современном мире было сплошной болью.

Она мне казалась сложной, непонятной, в ней очень трудно было заниматься отладкой, а простейшие вещи типа FS[0x30] и LastError, как в Olly Debugger, узнать было очень сложно. Тем не менее, на то время я никогда не пользовался IDA Pro.

А в универах учат реверсу?

Почему? Если в двух словах, то в Беларуси с этим туго, и, насколько я знаю, в России и Украине тоже. Собственно, и преподавателей не так много. Да потому что специалисты этой профессии обычно нужны в одной с половиной организации, и, обычно, полтора человека.

Только студент, глядя на написанный ассемблерный листинг, вряд ли даже может осознать, что эти все регистры, операнды, опкоды хоть как-то связаны с информационной защитой, эксплоитами, кряками, кейгенами, патчами, малварью, антивирусами, прошивками и т.д. Да, ассемблеру, конечно, учат, даже в некоторых колледжах.

В России, конечно, ситуация получше, но, специалистов также немного. Например, в Беларуси я знаю только два-три места, куда требуются реверс-инженеры.

Первая работа

В одну из этих фирм я и решил пойти работать вирусным аналитиком, понимая, что, собственно, больше и некуда.
Реверсишь малварь, клепаешь сигнатуры, изучаешь принципы работы вредоносного ПО, пишешь расшифровщики для ransomware (если получается), попутно улучшаешь ядро.

В принципе, работа неплохая, но, лишь спустя время я осознал, что всяко ближе не наблюдать за тем, как малварь использует какие-то уязвимости, а самому их находить, быть первым в этом, помогая защищать информационный мир отправленными разработчикам отчётами.

Другой ассемблер

Это произошло в тот момент, когда я добрался до перевода своей любимой игры — "Thunder Force III", в которую брат играл лучше меня. Однажды я узнал, что кроме ассемблерного кода Intel (16-, 32-, 64-битного) бывает и другой, по-началу кажущийся совершенно непохожим на тот, что ты знаешь.

я не смог найти шрифт ни одним тайловым редактором (именно в таких программах чаще всего и перерисовывают игровые буковки, что выводятся на экран). Ресурсы в ней оказались сжатыми каким-то неизвестным упаковщиком, т.к.

Я связался с этим человеком, поинтересовавшись, как же он изучал принцип работы алгоритма сжатия, на что он скинул мне мою первую IDB-шку (это файл базы данных IDA Pro), в которой были разобраны многие моменты кода игры, что меня очень впечатлило! Поэтому я стал гуглить, наткнувшись в итоге на работу одного француза, который как раз разобрал алгоритм сжатия игры.

Так я погрузился в дебри IDA Pro и ассемблера Motorola 68000, из которых не выбрался (и не хочу) до сих пор.

S. P. Thunder Force III я так и не перевёл, но написал редактор уровней к ней.

Sony Playstation

У неё также был другой ассемблер — MIPS, с другими регистрами, опкодами, адресами. Да, следующей была "первая плойка". И на этой приставке всё так же были игры с пожатыми ресурсами, которые нуждались в локализации.

Обратное мышление и первый кейген

Имея на руках лишь ассемблерный листинг кода, который распаковывает что-либо, написать к нему упаковщик. Знаете, что тогда стало для меня настоящим испытанием? Здесь потребовалось выработать обратное мышление, которое практически не требовалось во время патчинга "крэкмисов", и излечивания программ от жадности.

Я пытался идти от обратного, понимая, что должно быть на выходе, на входе, и какие байты сжатых данных за что отвечают, чтобы сделать такие же.

уже научился мыслить от обратного. Написав ещё множество утилит для кучи игр по распаковке и упаковке данных, я осознал, что готов написать свой первый кейген, т.к.

О чём также поведал в статье. Не помню, что это была за программа, но кейген удался, и из имени пользователя я смог получать всегда правильный серийный номер.

Статья о кейгене

Тяжелее написания кейгена. А вот писать статью о кейгене было тяжело. в статье передать принцип обратного мышления довольно таки сложно. Т.к. Как и всё, что приходит с опытом.

Крякерские команды

И тебя это устраивает. Поначалу, если ты, как и я, пришёл в реверс самоучкой, ты реверсишь один, для себя (либо в народ, это как пойдёт). Там и силы свои можно будет сравнить с другими людьми, и заодно набраться от них опыта. Но, потом ты натыкаешься на какой-нибудь релиз крякерской команды (это те, что выкладывают взломанный софт с кряками и кейгенами), и решаешь присоединиться к ним.

Высылают задание в виде кейгенми. Собравшись с духом, пишешь письмо, с просьбой присоединиться. Решаешь его, после чего тебе дают доступ в чатик команды.

Кто-то художник, кто-то умеет доставать платный софт, у кого-то вычислительные мощности (возможность факторизовать любой публичный ключ RSA-512 за два дня, на 2013-й год, если это требовалось для снятия лицензионной защиты). На самом деле, не все из них реверсеры. Но софт для релиза всё равно выбираешь сам, чаще всего. В общем, преимущества налицо. Правда. И денег за релизы не получаешь.

В том, чтобы зарелизить раньше другой команды (FFF, CoRE и многие другие). Тогда в чём профит, спросите вы? Очень хорошо эта тема была раскрыта в веб-сериале "Scene (Сцена)".

Проблемы с законом?

В любой момент может произойти контрольная закупка: тебе напишет дядя, который хочет "взломать Adobe/1C Бухгалтерия сколька будит стоеть" (реальная история). Да, за распространение кряков и кейгенов всё таки есть вероятность загреметь (особенно если программа популярная и стоит много денег). И начинают идти на крайности... Но ребята хотят выживать, особенно если работы нет, а "навык"-то применять хочется, не важно пока куда.

… барыжат ломаным софтом, взламывают программы за деньги.

Хотя, с моей позиции, человека с таким опытом стоит брать с руками и ногами, ведь, во первых, вы даёте человеку исправиться, и, во вторых, направляете его знания в правильное русло. И, в тот момент, когда появляется желание жить честно, крякер идёт устраиваться на работу, там откапывают его прошлое, и — "Извините, но Ваше прошлое сыграло не в Вашу пользу!". Среди моих знакомых действительно есть примеры успешного трудоустройства в антивирусную область (украинский антивирус Zillya!).

Честно заработанный лицензионный ключ

Даже у крякера. Да, и такое бывает. И я так пробовал делать. Были где-то статейки о том, как выпросить у разработчика ключ. Не помогало.

Шахиджанян взрывал мозг своим "Соло на клавиатуре", поэтому я начал искать альтернативы. В те годы я как раз учился "слепой" печати, и искал адекватные программы для этого. Она была платной, но очень хорошей. Наткнулся на Typing Reflex.

За что получил в ответ лицензионный ключ на своё имя! Тогда я перевёл программу на белорусский язык, и отправил автору языковой файл. Мой первый лицензионный ключ.

Что дальше?

Наигравшись в пирата, постепенно приходишь к тому, что работа у тебя есть, зарплата стабильная, дело любимое делаешь, а значит пора завязывать с нехорошими вещами.

Из вариантов куда податься: антивирусные компании, промышленная безопасность (реверс прошивок, промышленных протоколов, поиск уязвимостей), спец-отделы каких-то крупных фирм, типа Sony, где требуется исследовать защищённость собственных продуктов, ну или стать сильным и независимым реверс-инженером и зарабатывать на багбаунти, выступать на конференциях и т.д.

Хотя, тема очень даже интересная. Ещё бывают реверс-инженеры хардварщики (те, что железо реверсят), но о них я знаю мало. Я же больше по программной части.

Нирвана

Так и достигаешь нирваны... Насмотревшись на различного рода платформы, ассемблерный код (Intel, ARM, PowerPC, M68K, 6502, MIPS, 65c816, Blackfin, IA64 и какие-то ещё, не помню), приходишь к выводу, что принцип у всех ассемблеров практически одинаковый (ну, кроме разве что Итаниума), и начинаешь смотреть на эти бесконечные листинги по-другому: в первую очередь находишь команды прыжков, move-команды, возврат из функции, с какой стороны source, с какой dest, и дальше уже по обстоятельствам.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Ускоряем неускоряемое или знакомимся с SIMD

Есть класс задач, которые нельзя ускорить за счёт оптимизации алгоритмов, а ускорить надо. В этой практически тупиковой ситуации к нам на помощь приходят разработчики процессоров, которые сделали команды, позволяющие выполнять операции на большим количеством данных за одну операцию. В случае ...

Kонсенсус в Exonum: как он работает

ExonumTM — это наш открытый фреймворк для создания приватных блокчейнов. Сегодня мы расскажем, как работает его алгоритм консенсуса. Изображение: Bitfury Зачем нужны алгоритмы консенсуса Прежде чем перейти к рассказу о том, как устроен алгоритм консенсуса ExonumTM, поговорим о том, зачем ...