Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы Hex Comparison
Скриншот программы Hex Comparison

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

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

Сообщение о неправильной регистрации
Сообщение о неправильной регистрации

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

Программа успешно "зарегистрирована"
Программа успешно "зарегистрирована"

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

Поделиться ссылкой ВКонтакте
Просмотров: 5794 | Комментариев: 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
Zhelezyaka (08.08.2017 в 09:15):
Спасибо, с третьего раза получилось :)
видимо бинарник уже другой,
программка отличная, давно её использую.
user (14.07.2017 в 01:20):
Сравнение в WinHex'е есть, "Tools"->"File Tools"->"Compare.."
Но сравнить его даже с темой топика это нереально.
Там, фактически, тупо функционал досовской "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):
ЦитатаТак, вроде, Winhex умеет то же самое.

) Это шутка такая? - Понимаю. Смешно.
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 есть
user (09.07.2017 в 05:42):
Вот лоадер, нормально запускающий HexComparison версии 2,3 и 4.
В архиве два лоадера - один обычный, другой позволяет выбрать файл 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.
Последняя ещё и с паскалевскими сорсами.
ivan34 (02.07.2017 в 10:27):
Странная прога. Ну fix-ups для exe это веяние времени, но зачем ей export-секция?
ManHunter (02.07.2017 в 01:48):
Anonymous (02.07.2017 в 01:43):
В коллекцию я бы выбрал Compare Disasm, там ещё и сравнение дизассемблированного кода
https://exelab.ru/download.php...t&n=MTEzNQ==

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0053 сек.) / Память: 4.5 Mb
Наверх