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


    Всем привет,


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


    Начало


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


    Sega Mega Drive



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


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


    11-й класс



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


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


    Негеймер


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


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



    Переводчик



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


    cracklab.ru


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


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


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



    Ромхакинг


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



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


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



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


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


    Я учитель


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


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


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


    Инструменты



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


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


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


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



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


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


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


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


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


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


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



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


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


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



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


    Sony Playstation



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


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


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


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


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


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


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


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


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



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


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


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


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


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


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


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


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


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


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


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


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



    Что дальше?


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


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


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


    Нирвана


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

    Поделиться публикацией

    Комментарии 43

      0
      Спасибо за отличную статью — было приятно вспомнить времена HIEW и SOFTICE.

      Отдельное спасибо за то, что напомнили про сериал — надо пересмотреть, а то в памяти осталась только музыкальная тема.
        +1
        Спасибо, очень круто!
          0
          Зря вы про HIEW, отличная тулза! :-)
            0
            Я купил её, пытался пользоваться, но чот не сложилось.
              0
              Она — прекрасный редактор, в том числе структур PE-файлов. Как дизассемблер я ее не использую практически никогда. А вот бегло глянуть что же в файле — самое оно
                0
                Для PE-файлов есть CFF Explorer, а для дизазма — IDA. Для хекс-редактирования — Hex Workshop.
                  +1

                  А так же кроме IDA есть не менее функциональный Radare2.

                    +1

                    Никто не спорит, что Радар и Бинарный Ниндзя есть, но я пока не дорос до них, а они — до моих запросов (к подобного рода ПО).

                      0
                      Звучит, так, как будто вы растёте в разные стороны (навстречу)
                        0
                        есть Cutter — GUI к radare2
                          0
                          Интересно, что к каждой статье, связанной с реверсом, обязательно возникнет комент про Радар. Это забавляет)
                        0
                        Но почему игнорируют x64dbg? Только из-за того, что не портируют на Линукс?
                          0

                          Никто не игнорирует. Но тогда, когда я только вливался в реверс, его не было.

                  +1
                  Подпишусь. Я даже официально купил себе HIEW, поддержал так сказать отечественного производителя. IDA Pro конечно хорошо, но иногда это из пушки по воробьям. Правда HIEW умеет только ARM, x86 и x64, так что автору с Motorola 68000 он точно не поможет.
                  +2
                  От одного скриншота Оли стало тепло на душе ;)
                    0
                    Таки да, Оля была хороша для всякого, а Ида больше для не пуганного, но детального исследования, я ей в основном виндючные драйвера разбирал и оснастку, что бы потом…
                    +1
                    Спасибо за статью. Делал keygen для Black&White, читы для Silent Storm, Dota2 и прочее, связанное с играми (разумеется только в целях любопытства). Только у меня интерес к этому проснулся намного позднее — уже в университете — все детство только и делал, что играл (Вы «слезли» с игр за пол года — для меня это было самой настоящей зависимостью, особенно с появлением MMORPG).

                    Да, все это прокачивает понимание работы ОS, как данные хранятся в процессоре/ОЗУ, ассемблер и многое другое. Только вот в работе это никак не помогает — даже олимпиадное программирование полезнее (узнаете алгоритмы/структуры, может что спросят на собеседовании, раз в сто лет даже что-то можно применить в работе) — слишком узконаправленные знания.
                      +3
                      Только вот в работе это никак не помогает

                      Смотря какая работа. А вообще никто не мешает шарить в ассемблере и олимпиадном программировании одновременно.
                        +2
                        Помогает в какой-то степени. Алгоритмы можно понять и изучая код — структуры данных в сеговских играх те же, алгоритмы компрессии, связанные с разработкой игр алгоритмы — AI врагов, поиск пути, допустимые упрощения в этих алгоритмах. Понимая ассемблер, можно намного лучше разобраться в низкоуровневой оптимизации, в том, какой оверхед дают скриптовые и высокоуровневые языки, в том, во что именно компилируется ваш код.
                        Вы будете иметь представление о том, как защитить вашу программу от исследования и модификации. И самое полезное — улучшатся ваши навыки отладки и поиска ошибок в своих программах.
                        +2
                        Приятно увидеть, так сказать, земляка, да ещё и со схожими интересами. Хотя я относительно недавно заинтересовался реверсом, это была моя борьба с прокрастинацией на работе, тогда начал практиковаться на простеньких crackme, потом пробовал писать кейген к Adobe Audition 1.5 (неудачно), потом пробовал в программирование и отладку под Sega Mega Drive (чуть более удачно), и в конце концов занялся портом одной досовской игрушки.

                        Интересно насчёт первой работы вирусным аналитиком, уж не ВирусБлокАда ли?) Пожалуй из тех мест где в нашей стране ищут реверс-иженеров я знаю только её и CheckPoint.
                          +1

                          Я не хотел рекламы в статье или коментах. Но добавлю ещё про Белорусские Облачные Технологии — сплошное КГБ, госорганизация.

                            0
                            Таких знаю, но не знал у них есть такие позиции. Я как-то подавал заявку на реверс-инженера в gog (aka cd project), но это было слишком самонадеянно)
                              0
                              Ах, да, ещё какое-то время в Wargaming требовался реверс-инженер для написания систем противодействия ботам и читингу. Но брали лишь тех, у кого большой игровой опыт в современные игры. У меня такого не было.
                                0
                                Развиваюсь на реверсера уже пару лет чтобы устроиться к ним. А почему не взяли?
                                  0

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

                                    0

                                    Игрового опыта в современные игры не было, только в ретро. А тестовое задание в виде описания реализации системы античитинга я сделал.

                                      0
                                      Странно, вроде как-раз для ретро им и нужен был реверсер, чтобы работали на современных системах.
                                        0
                                        Не, мне рассказывали про защиту от ботов и модов.
                                          +1
                                          Тут возник небольшой конфуз. Реверсер для ретро нужен был в GOG, куда пробовал устроиться я, а DrMefistO рассказывает об опыте собеседования на реверсера в Wargaming, там про ботов и античиты.
                                  0
                                  отладку под Sega Mega Drive

                                  Не под мои ли видосы и статьи?)
                                    0

                                    Нет, это был блог big evil corporation. Там парень параллельно с блогом делал игру под сегу. Сейчас ради интереса проверил, летом он её доделал, вроде как даже на картриджах выходила.

                                  +1
                                  Хотелось бы побольше узнать про законодательство в этой области в РФ и США. Допустим мне бы когда-нибудь пришла в голову идея какую-нибудь перевоплотить старую игру — исследовать логику, не без помощи реверса, с целью воссоздания на каком-нибудь ЯП и бесплатного распространения. Или сделать мод для игры, к которой нет инструментария. Насколько это законно? Я видел такие проекты (OpenMW, OpenRA, Skyrim Together, etc), но они зарубежные и не знаю насколько это законно у нас. Да и если законно, то с чего начать?
                                    0

                                    Если по-простому, то переписывать и распространять код можно, ресурсы — нельзя, т.к. они, зачастую, лицензируется.

                                      +1
                                      Про кейгены и пр ст 273 ук рф(закон не разделяет программу и её оперативную память), Для общего развития — ст 272, 274, 138.1 ук рф.
                                      +2
                                      Если кому интересно, есть бесплатная книга Дениса Юричева «Reverse Engineering для начинающих»

                                      beginners.re
                                      github.com/DennisYurichev/RE-for-beginners
                                      yurichev.com
                                      +1
                                      Ух-ты знакомые шашки ;-) и не то, что-бы шашки, а поддавки, там всё интересней…
                                      … а в плане защиты, я уже не помню подробностей, но процесс изучался прямо в памяти во время работы
                                        0
                                        Если готовы рассказать о снятии защиты стрип-шашек и поддавков, было бы круто:)
                                        0

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

                                          +1
                                          Забавно. Путь во много похож на мой, только с разницей в 7-10 лет. Я как-то не очень понимаю, как при данных временных точках вы могли застать Сегу Мегу Драйв. У меня компьютер появился в 1997 и уже в то время это была довольно устаревшая приставка.
                                            0

                                            Да запросто. В Беларуси Сега была популярна где-то в нулевые, плюс-минус.

                                              +1
                                              Ну не у всех родители были одинаково обеспеченными. Я до 2000 года не видел ничего кроме «Dendy». Большое количество детей довольствовалось такой же приставкой и дальше. А потом, через несколько лет, у людей уже начали массово появляться компьютеры.
                                              +1
                                              Вспомнил как несколько лет назад приобрел экшн-камеру, в которой были некоторые софтовые недочеты, которые производитель не спешил поправлять. И вот, вспомнив свой не слишком большой опыт ассемблера 90-х годов и установив IDA, которую вообще до этого пару раз мельком видел, я ринулся в дебри прошивки этой камеры :)
                                              Сам был удивлен, но за месяц мне удалось не только разобраться во многих моментах прошивки, но и поправить несколько недочетов в прошивке :) Даже на 4PDA выкладывал патчи под нее.
                                              Но тяжко, конечно, заниматься этим, не имея приличного опыта реверс-инжиниринга :)

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое