На днях мне попался наш старый видеоурок, демонстрирующий, как можно быстро снять простейшую защиту с программы, используя единственную утилиту – W32Dasm. Удивительно, как все изменилось с тех пор. Если вернуться в 2000 год, то W32Dasm и Turbo Debugger считаются чуть ли не лучшими программами для реверсинга. За десять лет появились новые тренды и технологии, которые в то время даже не снились.
Конец SoftICE. Уже много лет назад, по сути, существовал один единственный дебаггер, который использовался для реверсинга – SoftICE. Поистине замечательный отладчик, написанный компанией NuMega, позволял дебажить как приложения в пользовательском окружении, так и те, что работали внутри ядра. Увы, любимый «айс» так и не смог удержать лидерство, сдав свои позиции OllyDbg (www.ollydbg.de) и WinDbg (www.microsoft.com). Да, остались те, кто довольно успешно использует SoftICE и сейчас, но… Используя устаревший софт, далеко не уйти. Маленький пример: в начале 2000-х мало кто задумывался об UNICODE – сейчас же он используется повсеместно. Разработчику того же OllyDbg пришлось приложить немало усилий, чтобы, наконец, сделать корректное распознавание UNICODE строк в 2.0 версии отладчика, которая никак не выйдет из статуса бета-версии.
Визуальные графы потоков для ассемблерного кода. Долгое время для понимания управляющих команд приходилось разбираться в линейном потоке if-else условий и циклов. Красивая раскраска кода, подсветка циклов – все это придавало удобство, но незначительное. Что действительно добавило в процесс реверсинга наглядности и простоты, так это возможность просмотра ассемблерного листинга в виде графа, построенного в соответствии с разветвлением и циклами программы. Новая фишка впервые была представлена в IDA Pro 4.17 (а это июнь 2001 года), а, начиная с версии 5.0, обрел свой современный вид.
Использование Python'а для автоматизации. Опять же, если вернуться в 2000 год, большинство утилит отличались узкой специализацией и были практически не расширяемы. Все изменилось с ростом популярности скриптового языка Python и появлением SWIG – технологии, позволяющей программистам легко встраивать в свои разработки интерпретатор Python и предоставлять основанный на Python'е API. Тут же появился проект IDAPython (d-dome.net/idapython) – плагин для IDA Pro, который позволял обращаться к IDA API прямо из Python. Позже появились PyDbg (pedram.redhive.com/PyDbg) и pefile (code.google.com/p/pefile). Сейчас Python является стандартом де-факто в этой области, и многие утилиты, начиная от IDA Pro и заканчивая Immunity Debugger или BinNavi, поддерживают скриптинг на Python.
Бинарное сравнение. Много лет назад в чью-то умную голову пришла гениально простая идея: если сравнить непатченную версию файла с той, в которой исправили какую-то ошибку, то можно легко выявить уязвимый код и быстро найти уязвимость. Вскоре появились как бесплатные, так и серьезные коммерческие реализации этой идеи. Одной же из наиболее продвинутых утилит в этой области по-прежнему считается BinDiff (www.immunitysec.com/products-bindiff.shtml). Впрочем, все подобные решения работают по одному и тому же принципу: после того, как два входных файла дизассемблированы, для каждой функции в файле A находится ее соответствие в файле B, а все локальные изменения внутри функции отображаются для пользователя.
Появление настоящего декомпилятора. Любой декомпилятор образца начала 2000-х годов – скорее игрушка, чем полезный инструмент. Однако в 2007 году команда IDA Pro зарелизила декомпилятор Hex-Rays (www.hex-rays.com), который, наконец-то, мог похвастаться достойными алгоритмами декомпиляции. Из самых ожидаемых фишек в новой версии программы – многообещающая поддержка процессоров ARM, которая позволит декомпилировать приложения для мобильных устройств.
Коллективная работа реверсеров. Еще несколько лет назад было сложно представить работу специалистов по реверс-инжинирингу, эффективно работающих совместно над одним и тем же проектом. Для этого банально не было работающей технологии, позволяющей обмениваться большим количеством отладочной информации между программами. Сейчас команды реверсеров могут взять на вооружение такие утилиты как CollabREate (www.idabook.com/collabreate) для IDA Pro или BinCrowd (bincrowd.zynamics.com).
Не удивлюсь, если скоро софт для реверсинга будет продаваться как SaaS, то есть не в виде отдельно устанавливаемой программы, а в виде сервиса, которым ты сможешь пользоваться по инету. Что будет еще лет через десять? Сложно даже загадывать. 2020 – даже цифра сама по себе страшная, не говоря уже о мыслях и о технологиях, которые нас ждут :).