
Исследование защиты программы Hex Comparison

Скриншот программы Hex Comparison
Программа Hex Comparison предназначена для визуального сравнения двух бинарных файлов, например, когда надо выяснить, какие изменения были внесены патчем. Отличия можно посмотреть как в самой программе, так и сохранить в файл. Во встроенном hex-редакторе также можно отредактировать любой из двух открытых файлов. Весьма удобный инструмент, который можно использовать в реверсинге, если бы не его шароварность. Вообще странно, когда за подобный инструмент требуют денежку.
Забираем с офсайта дистрибутив, устанавливаем. Основной файл ничем не упакован, чтобы не терять времени отправляем его на анализ в дизассемблер. После запуска сразу открывается окно с предложением зарегистрироваться. На ввод левых данных программа реагирует следующим образом:

Сообщение о неправильной регистрации
Отлично. Ищем строчку сообщения в дизассемблере. Обычный для этих целей HiEW я сегодня использовать не буду.
Code (Assembler) : Убрать нумерацию
- .text:0040E17A mov ecx, [eax]
- .text:0040E17C call dword ptr [ecx-4]
- .text:0040E17F mov [ebp+var_74], 0B0h
- .text:0040E185 loc_40E185:
- .text:0040E185 mov [ebp+var_74], 0C8h
- .text:0040E18B mov edx, offset aRegisterSucces
- ; "Register successfully!\nThank you."
- .text:0040E190 lea eax, [ebp+var_5C]
- .text:0040E193 call sub_4CD8FC
- .text:0040E198 inc [ebp+var_68]
- .text:0040E19B mov eax, [eax]
- .text:0040E19D call @Dialogs@ShowMessage$qqrx...
- .text:0040E1A2 dec [ebp+var_68]
- .text:0040E1A5 lea eax, [ebp+var_5C]
- .text:0040E1A8 mov edx, 2
- .text:0040E1AD call sub_4CDA5C
- .text:0040E1B2 mov eax, [ebp+var_88]
- .text:0040E1B8 call @Forms@TCustomForm@Close$qqrv
- .text:0040E1BD jmp short loc_40E1F9
- .text:0040E1BF ; ---------------------------------------------------
- .text:0040E1BF loc_40E1BF:
- .text:0040E1BF mov [ebp+var_74], 0D4h
- .text:0040E1C5 mov edx, offset aYourRegistra_0
- ; "Your registration code is invalid.\nIf y"...
- .text:0040E1CA lea eax, [ebp+var_60]
- .text:0040E1CD call sub_4CD8FC
- .text:0040E1D2 inc [ebp+var_68]
Code (Assembler) : Убрать нумерацию
- .text:0040DF3D lea edx, [ebp+var_38]
- .text:0040DF40 push dword ptr [edx]
- ; Вызвать функцию проверки
- .text:0040DF42 call sub_40BE50
- .text:0040DF47 pop ecx
- .text:0040DF48 mov ecx, dword_4DB510
- ; Сохранить ее результат
- .text:0040DF4E mov [ecx+4D4h], al
- .text:0040DF54 dec [ebp+var_68]
- .text:0040DF57 lea eax, [ebp+var_38]
- .text:0040DF5A mov edx, 2
- .text:0040DF5F call sub_4CDA5C
- .text:0040DF64 mov ecx, dword_4DB510
- ; Восстановить результат
- .text:0040DF6A mov al, [ecx+4D4h]
- ; Если проверка вернула AL=0, то серийный номер неправильный
- .text:0040DF70 test al, al
- .text:0040DF72 jz loc_40E1BF

Программа успешно "зарегистрирована"
Теперь ввод серийника не требуется. Цель достигнута. Можно даже попробовать ввести какое-нибудь имя, программа примет его без вопросов, но сохранится оно только на время работы. Впрочем, на сам факт "зарегистрированности" это никак не влияет. Мысленно благодарим автора программы и добавляем новый инструмент в свою коллекцию.
Просмотров: 5565 | Комментариев: 22
Метки: исследование защиты

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(07.01.2023 в 22:49):
"Продолжайте вести наблюдение, мы с вами свяжемся"

Илья
(07.01.2023 в 22:23):
Я даже не стал писать MOV AL,1 по адресу 0040BE50. Просто в этот адрес вместо 55 вписал С3 (RET) и результат тот же. Забавно потом этой же взломанной программой проверил саму себя и нашел отличия в пропатченном файле и оригинале.

Bunny_Lab
(22.12.2018 в 05:49):
Это:
0040C102 | BA 02000000 | MOV EDX,2
0040C107 | E8 50190C00 | CALL or_hexcmp.4CDA5C
0040C10C | 58 | POP EAX
0040C10D | 8B55 DC | MOV EDX,DWORD PTR [EBP-24]
0040C110 | 64:8915 00000000 | MOV DWORD PTR FS:[0],EDX
0040C117 | 5F | POP EDI
0040C118 | 5E | POP ESI
0040C119 | 8BE5 | MOV ESP,EBP
0040C11B | 5D | POP EBP
0040C11C | C3 | RET
0040C11D | 90 | NOP
0040C11E | 90 | NOP
0040C11F | 90 | NOP
Меняем так:
0040C102 | BA 02000000 | MOV EDX,2
0040C107 | E8 50190C00 | CALL hexcmp.4CDA5C
0040C10C | 58 | POP EAX
0040C10D | 8B55 DC | MOV EDX,DWORD PTR [EBP-24]
0040C110 | 64:8915 00000000 | MOV DWORD PTR FS:[0],EDX
0040C117 | B0 01 | MOV AL,1
0040C119 | 5F | POP EDI
0040C11A | 5E | POP ESI
0040C11B | 89EC | MOV ESP,EBP
0040C11D | 5D | POP EBP
0040C11E | C3 | RET
0040C11F | 90 | NOP
Все. Будет работать и не нужно никакие проверки ключа править.
Ссылка на пропатченый файл с выпиленным ненужным меню Buy и Regiter: http://rgho.st/84j8CMdsJ
0040C102 | BA 02000000 | MOV EDX,2
0040C107 | E8 50190C00 | CALL or_hexcmp.4CDA5C
0040C10C | 58 | POP EAX
0040C10D | 8B55 DC | MOV EDX,DWORD PTR [EBP-24]
0040C110 | 64:8915 00000000 | MOV DWORD PTR FS:[0],EDX
0040C117 | 5F | POP EDI
0040C118 | 5E | POP ESI
0040C119 | 8BE5 | MOV ESP,EBP
0040C11B | 5D | POP EBP
0040C11C | C3 | RET
0040C11D | 90 | NOP
0040C11E | 90 | NOP
0040C11F | 90 | NOP
Меняем так:
0040C102 | BA 02000000 | MOV EDX,2
0040C107 | E8 50190C00 | CALL hexcmp.4CDA5C
0040C10C | 58 | POP EAX
0040C10D | 8B55 DC | MOV EDX,DWORD PTR [EBP-24]
0040C110 | 64:8915 00000000 | MOV DWORD PTR FS:[0],EDX
0040C117 | B0 01 | MOV AL,1
0040C119 | 5F | POP EDI
0040C11A | 5E | POP ESI
0040C11B | 89EC | MOV ESP,EBP
0040C11D | 5D | POP EBP
0040C11E | C3 | RET
0040C11F | 90 | NOP
Все. Будет работать и не нужно никакие проверки ключа править.
Ссылка на пропатченый файл с выпиленным ненужным меню Buy и Regiter: http://rgho.st/84j8CMdsJ

Zhelezyaka
(08.08.2017 в 09:15):
Спасибо, с третьего раза получилось :)
видимо бинарник уже другой,
программка отличная, давно её использую.
видимо бинарник уже другой,
программка отличная, давно её использую.

user
(14.07.2017 в 01:20):
Сравнение в WinHex'е есть, "Tools"->"File Tools"->"Compare.."
Но сравнить его даже с темой топика это нереально.
Там, фактически, тупо функционал досовской "FC" c генерацией уродливого .CRK в нестандартном формате.
Кстати, это только подтверждает странноватость того чувака, что WinHex'ом занимается - уж в такой-то программе визуальное сравнение двух файлов, путно реализованное, было бы уместно как нигде более.
И будучи нормально реализованным, оно, такое сравнение файлов в WinHex'e, сделало бы ненужными все другие визуальные компараторы.
Но этого нет.
Но сравнить его даже с темой топика это нереально.
Там, фактически, тупо функционал досовской "FC" c генерацией уродливого .CRK в нестандартном формате.
Кстати, это только подтверждает странноватость того чувака, что WinHex'ом занимается - уж в такой-то программе визуальное сравнение двух файлов, путно реализованное, было бы уместно как нигде более.
И будучи нормально реализованным, оно, такое сравнение файлов в WinHex'e, сделало бы ненужными все другие визуальные компараторы.
Но этого нет.

ManHunter
(13.07.2017 в 09:22):
Да-да, и трава зеленее, и деревья выше, и сцена подпольнее, и энтузиасты бескорыстнее.
Ничего, как-нибудь переживу.
Ничего, как-нибудь переживу.

Анон
(13.07.2017 в 03:06):
Раньше было лучше, почти всегда разбирался алгоритм генерации серийника, а сейчас уже всё сводится к "ставим бряк и копируем ключ со стека" ну или как сейчас обычный патч. Дизлайк, отписка и что там ещё в таких случаях делают....

ManHunter
(12.07.2017 в 23:06):
user, наверное, имелось в виду редактирование. Про сравнение файлов в Winhex я тоже что-то не слышал.

user
(12.07.2017 в 22:50):
) Это шутка такая? - Понимаю. Смешно.

ManHunter
(11.07.2017 в 16:39):
fc /b original.exe patched.exe >diff.txt

Compiller
(11.07.2017 в 15:53):
Так, вроде, Winhex умеет то же самое.
Вот его бы защиту расковырять...
В Winhex - Tools - File Tools - Compare
Ещё ExamDiff есть
Вот его бы защиту расковырять...
В Winhex - Tools - File Tools - Compare
Ещё ExamDiff есть

user
(09.07.2017 в 05:42):
Вот лоадер, нормально запускающий HexComparison версии 2,3 и 4.
В архиве два лоадера - один обычный, другой позволяет выбрать файл HEXCPMP.EXE для запуска.
rgho.st/6xtsltRjw
Это в качестве иллюстрации к разговору в теме "Программы для создания патчей и лоадеров".
.. а вот русифицированные версии 2 и 3 этой HexComparison, до кучи:
rgho.st/6RhVvs8nn
В архиве два лоадера - один обычный, другой позволяет выбрать файл HEXCPMP.EXE для запуска.
rgho.st/6xtsltRjw
Это в качестве иллюстрации к разговору в теме "Программы для создания патчей и лоадеров".
.. а вот русифицированные версии 2 и 3 этой HexComparison, до кучи:
rgho.st/6RhVvs8nn

ManHunter
(03.07.2017 в 14:08):
Это не так. По истечению триального срока она даже не запустится, в статье как раз скриншот просроченной программы. Все остальные скриншоты сделаны после патча.

xussr
(03.07.2017 в 13:19):
после перевода часиков на 30 дней вперед прога умирает...не смотря на то что зарегина..

Noobie
(03.07.2017 в 08:27):
Для тех, кто обычно просит в здешних топиках патчи в готовом, экзешном виде - не хотите учиться даже элементарным вещам, юзайте кейген от SND для версии сабжа 3, номера подходят. Автору, как обычно, респект за статью, все доходчиво и понятно.

Vladimir
(02.07.2017 в 18:40):
Часто для гита надо только часть изменений, потому тоталовский компарер не очень удобен. Но - да, им пользуюсь тоже, кнопка в обязательном порядке вынесена.

ManHunter
(02.07.2017 в 18:38):
Shift+F2 в Total Commander. "Файлы" -> "Сравнить по содержимому" в нем же. Вот и весь обзор.

Vladimir
(02.07.2017 в 18:37):
У вас обзора программ для сравнения файлов/каталогов не было ещё? А то вдруг я проглядел. Интересно было бы ваше мнение увидеть. Мне сейчас по роду деятельности Beyond Compare лучше всего подошел, хотя это к данному посту отношения и не имеет, понимаю.
И если уж пошла такая пьянка - вы не думали написать обзор дополнений для лисы? Вы вроде ею пользуетесь же.
И если уж пошла такая пьянка - вы не думали написать обзор дополнений для лисы? Вы вроде ею пользуетесь же.

user
(02.07.2017 в 11:30):
Есть такая вещь в коллекции. Версии 2,3,4 патчатся одинаково.
У этой программы серьёзный изъян - отсутствует возможность побайтового сдвига содержимого одного из файлов при сравнении.
Поэтому не пользуюсь ею.
Из б.м. современных аналогов под виндоусом иногда использую Fairdell hexcmp2.
А так - DOS-программа, классика - Randy Compare.
Неплохо выглядит ещё FileCompareBinary, тоже для DOS.
Последняя ещё и с паскалевскими сорсами.
У этой программы серьёзный изъян - отсутствует возможность побайтового сдвига содержимого одного из файлов при сравнении.
Поэтому не пользуюсь ею.
Из б.м. современных аналогов под виндоусом иногда использую Fairdell hexcmp2.
А так - DOS-программа, классика - Randy Compare.
Неплохо выглядит ещё FileCompareBinary, тоже для DOS.
Последняя ещё и с паскалевскими сорсами.

ivan34
(02.07.2017 в 10:27):
Странная прога. Ну fix-ups для exe это веяние времени, но зачем ей export-секция?

ManHunter
(02.07.2017 в 01:48):
Все уже есть: http://www.manhunter.ru/underg...oaderov.html

Anonymous
(02.07.2017 в 01:43):
В коллекцию я бы выбрал Compare Disasm, там ещё и сравнение дизассемблированного кода
https://exelab.ru/download.php...t&n=MTEzNQ==
https://exelab.ru/download.php...t&n=MTEzNQ==

Добавить комментарий
Заполните форму для добавления комментария
