Веселая прога "типа" демка. Явный пример того как не надо делать процедуру регистрации. Ограничение - управление только 3-мя компами. Маловато...
Инструменты: Filemon, windasm.
Запускаем filemon и видим что прога ищет какой-то key.dll
Радует то, что написана на делфи без всяких протекторов, которые продлили бы исследование минут эдак 20. Загружаем Gameadmin.exe в Windasm и смотрим в String References "key.dll" делаем двойной клик и видим вот такое чудо:
Хе-хе :) Помоему тут и ежу понятно. Автор решил не подвергать риску юзера и задал значения адресов, если такой key.dll не будет найдено :)
Итак вот что прописано для демо режима:
"GetRegistrationName":
:0049F0E0 push ebp
:0049F0E1 mov ebp, esp
:0049F0E3 push ecx
:0049F0E4 mov eax, 0049F0F4 - Это адрес строки "Демо Версия"
:0049F0E9 mov dword ptr [ebp-04], eax
:0049F0EC mov eax, dword ptr [ebp-04]
:0049F0EF pop ecx
:0049F0F0 pop ebp
:0049F0F1 ret
"GetRegistrationString":
:0049F100
:0049F100 push ebp
:0049F101 mov ebp, esp
:0049F103 push ecx
:0049F104 mov eax, 0049F114 - Это адрес еще одной строки "Демо Версия"
:0049F109 mov dword ptr [ebp-04], eax
:0049F10C mov eax, dword ptr [ebp-04]
:0049F10F pop ecx
:0049F110 pop ebp
:0049F111 retn
"GetComputerCount":
:0049F120 push ebp
:0049F121 mov ebp, esp
:0049F123 push ecx
:0049F124 mov [ebp-04], 00000003 - Число компов :)
:0049F12B mov eax, dword ptr [ebp-04]
:0049F12E pop ecx
:0049F12F pop ebp
:0049F130 retn
"CheckKeyVersion":
:0049F134 push ebp
:0049F135 mov ebp, esp
:0049F137 pop ebp
:0049F138 ret 0004
Ну дальше остается только исправить как кому нравится этот код. Или написать свою супер DLL :) Она должна экспортировать хотя бы функцию GetComputerCount чтобы задать число компов. А так все остальное не важно :)
Программа-демо!
Как вы уже заметили, программа ищет библиотеку key.dll и загружает ее с помощью LoadLibraryA. Затем она вызывает различные функции из этой DLL для получения некоторых информационных данных о регистрации.
Интересная часть - автор закодировал адреса этих функций в программе. Это означает, что если библиотека key.dll не найдена или не экспортирует эти функции, программа будет работать с закодированными значениями.
Вы уже разобрали некоторые части кода и обнаружили, что это просто pushing строк на стек и возвращение их. Appears like a simple demo, but I'll summarize what you've found:
CheckKeyVersion seems to be a no-op и просто возвращает сразу
Теперь вам решать, как модифицировать этот код. Вы могли бы исправить закодированные адреса или написать свою DLL, экспортирующую эти функции. Возможности бесконечны!
Если вы хотите написать свою DLL, вам нужно создать новую библиотеку с этими функциями. Например, GetComputerCount мог бы возвращать динамическое значение на основе конфигурационного файла или регистрационного ключа. Затем вам нужно будет скомпилировать эту DLL и загрузить ее в программу.
Помните, что это должно быть развлекательной задачей!
Исследование демки GameAdmin 2.2.2002: программа ищет файл key.dll, но вместо него записывает адреса строк 'GetRegistrationName', 'GetRegistrationString', 'GetComputerCount' и 'CheckKeyVersion', а также имитирует функции этих процедур.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.