Битва потрошителей. Выбираем лучший редактор для вскрытия исполняемых файлов Windows

Содержание статьи

Главная и сложнейшая задача хакера во время взлома программы — найти защитный механизм и обойти его. Для его нахождения я обычно использую отладчик WinDbg, а для «исправления» приложения — редактор Hiew (он, в частности, фигурирует в нашем цикле статей «Фундаментальные основы хакерства»). Но есть ли альтернативы для последнего? Задавшись этим вопросом, я изучил разные утилиты и хочу поделиться с тобой находками.

Так как мы, в основном, исследуем исполняемые файлы и динамические библиотеки для Windows, я брал только те РЕ-редакторы, которые работают в этой ОС. Если какой-то из инструментов поддерживает другие операционные системы и их исполняемые файлы (например, ELF), то это только плюс, но в данном случае для нас особого значения не имеет.

Мы будем выбирать утилиты на основе разумных и понятных факторов: функциональность, цена, удобство использования и частота обновления. Совсем старые решения, позволяющие редактировать бинарники для MS-DOS или Windows 9x нам рассматривать ни к чему. Если какой-то из редакторов распространяется платно, то мы воспользуемся ознакомительной версией и отдельно отметим, какие функции в ней доступны. Но самый главный критерий будет состоять во взломе настоящего крэкми.

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

Как ты помнишь, с помощью отладчика мы нашли в памяти адрес инструкции (см. четвертую статью «Фундаментальных основ»), которая определяет ход выполнения программы при вводе пароля. А благодаря сведениям из третьей статьи этот виртуальный адрес у нас получилось преобразовать в физический, находящийся на носителе. Таким образом, перейдя в исполняемом файле по адресу 0x402801 и заменив там инструкцию test на xor, мы получим программу, принимающую любые пароли. Меньше слов, больше дела!

PE-Explorer

Разработчик: Heaventools Software
Сайт: http://www.heaventools.ru/pe-explorer.htm
Дата выхода последней версии: Октябрь, 2009
Стоимость: $129 – персональная лицензия

Под первым номером идет довольно распространенный редактор PE-Explorer. В отличие от своего собрата Resource Tuner, он способен редактировать не только ресурсы приложения, но и код. Несмотря на свой почтенный возраст, исправно работает даже в Windows 10. К сожалению, PE-Explorer умеет работать только с 32-битными файлами и при попытке открыть 64-битный бинарник сообщает об ошибке.

Утилита обладает богатой функциональностью: отображает все элементы заголовка РЕ, определяет, к каким DLL происходит обращение, предсказывает поведение программ и логику взаимодействия с другими модулями и даже открывает запакованные UPX, UPack или NSPack файлы. Кроме того, она позволяет просматривать и редактировать секции PE-файла, исследовать содержимое таблиц импорта и экспорта и проверять наличие и целостность цифровой подписи. В качестве «вишенки на торте» тут присутствует полноценный дизассемблер.

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

Запустим редактор и сразу же откроем наше подопытное приложение. PE-Explorer первым делом выводит информацию о заголовке PE-файла. Для получения сведений об остальных разделах достаточно пощелкать кнопки на панели инструментов. Жмем пиктограмму Disassembler и открываем окно для выбора поддерживаемых инструкций: SSE, SSE2 и прочее. Указываем необходимые и начинаем процесс нажатием кнопки Start Now.

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

Так как мы с помощью отладчика нашли адрес инструкции, которая отвечает за ход выполнения программы, то попробуем проверить этот адрес в PE-Explorer: нажимаем Ctrl-F (или «Search → Find») и вводим адрес для поиска: 402801.

Что ж, я немного разочарован результатом дизассемблирования. Даже отладчик в этом месте показывает мне инструкцию test, а здесь я вижу лишь начало ее шестнадцатеричного кода: 0х85. При этом я не могу редактировать код! Зачем мне все эти возможности, если утилита не позволяет делать самую базовую вещь?

Я даже не могу списать этот недочет на ограничения демо-версии, так как о ее отличиях от платной ничего толком не сказано. Допускаю, что с теми целями, для которых этот продукт предназначен (статическое изучение приложения и вектора его выполнения), он справляется хорошо. Однако нашим требованиям программа не соответствует, поэтому смело вычеркиваю PE-Explorer из списка кандидатов.

FlexHex

Думаю, нужно дать разработчику ещё один шанс, поэтому рассмотрим другую утилиту HeavenTools Software — hex-редактор FlexHex. Это инструмент для редактирования любых файлов, процессов или устройств в двоичном формате, ASCII и UNICODE. По словам авторов, редактор умеет работать с файлами просто гигантского размера – 8 эксабайт. Кроме того, он поддерживает множество типов данных: байты, слова, двойные слова, восьмибитовые слова, различные десятичные значения со знаком и без, 32- и 64-битовые целые.

Сложные типы данных тут могут быть определены самим пользователем — это структуры, объединения, массивы, перечисления, строки и их сочетания. Обещают прямое редактирование любых значений, в том числе: шестнадцатеричных, строковых, изменение областей памяти и типизированных данных. Поддерживаются битовые операции (NOT, AND, OR и XOR над блоками данных) и, конечно же, арифметические операции: сложение, вычитание, умножение, деление и взятие остатка.

Однако главная особенность FlexHex – это возможность сравнения файлов целиком или отдельными блоками. При этом использование карт сравнения позволяет сделать процесс более интуитивным и наглядным.

Все это хорошо, но как утилита справится со взломом – нашей элементарной задачкой? Отсутствие дизассемблера сразу намекает нам, что придется работать в hex-кодах. Запустим FlexHex и откроем с его помощью наш крякмис.

Первым делом попробуем найти смещение 402801. Кликаем «Navigate → Go To» и в списке слева выбираем пункт Address, а в поле «Enter address» вводим значение для поиска. Убеждаемся, что включен режим Hex и нажимаем кнопку «Go To». Однако результат поиска выносит нас далеко за границы приложения. Обрати внимание, что последние читаемые символы находятся по смещению 0x3659F0. Если напрячь память, то вспоминается, что в заголовке РЕ базовый адрес (или адрес загрузки модуля) прописан как 0x400000. А здесь он даже не учитывается!

Ладно, как говорил дедушка Ленин, мы «пойдем другим путем». Строго говоря, FlexHex не понимает формат РЕ и потому его нельзя признать полноценным PE-редактором. Поэтому нам ничего не остается, как править байтики. Из того же отладчика, где мы нашли проверяющую пароли инструкцию, возьмем уникальную последовательность байт: 85 C0 74 3C 68. Она покрывает ассемблерные команды:

test eax, eax
jz 0x402841
push 0x5A71C4

Я выбрал такую длинную последовательность, чтобы не было ложных срабатываний. За ключевым байтом 0x74 тут скрывается ассемблерная инструкция JZ. Чтобы сделать из нее JNZ, достаточно переписать как 0x75. В итоге мы получим программу, кушающую любые пароли, кроме эталонного.

С помощью «Search → Find» открываем окно и указываем в качестве типа для поиска «Hex Bytes» и направление. В поле ввода указываем нашу последовательность байт: 85 C0 74 3C 68. Есть совпадение! Теперь ставим курсор на 74, нажимаем Delete и вписываем на этом месте 75. Сохраняем результат и закрываем редактор. Проверь «пропатченное» приложение, оно теперь должно работать значительно лучше. ?

В целом, я бы не сказал, что этот редактор отличается значительным удобством и соответствует нюансам работы благородного крекера. Поэтому отдавать за него $60 кровных лично я бы не стал.

Продолжение доступно только подписчикам

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Читать новость в источнике Xakep

0