Битва потрошителей. Выбираем лучший редактор для вскрытия исполняемых файлов 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
Сайт: http://www.heaventools.ru/flexhex-hex-editor.htm
Дата выхода последней версии: Июль, 2018
Стоимость: $59,95

Думаю, нужно дать разработчику ещё один шанс, поэтому рассмотрим другую утилиту 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.ru

Ответить

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