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

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

Всем привет,

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

Начало

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

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 Интересное!

Как изучение критической уязвимости DHCP в Windows 10 привело к обнаружению еще двух ошибок безопасности

Изображение: Unsplash А в некоторых случаях таких новых уязвимостей оказывается больше одной. Как было описано в предыдущей статье про CVE-2019-0726, иногда поиск деталей об уже известной уязвимости приводит к обнаружению новой уязвимости. Как всегда происходит при поиске уязвимостей, даже если ...

Быстрорастворимое проектирование

Люди учатся архитектуре по старым книжкам, которые писались для Java. Книжки хорошие, но дают решение задач того времени инструментами того времени. Время поменялось, C# уже больше похож на лайтовую Scala, чем Java, а новых хороших книжек мало. Увидим обзор типовых ...