Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исследуем демку GameAdmin 2.2.2002

Delphi , Программа и Интерфейс , Исследование программ

Исследуем демку GameAdmin 2.2.2002

Автор: Hex

Веселая прога "типа" демка. Явный пример того как не надо делать процедуру регистрации. Ограничение - управление только 3-мя компами. Маловато...

Инструменты: Filemon, windasm.

Запускаем filemon и видим что прога ищет какой-то key.dll

Радует то, что написана на делфи без всяких протекторов, которые продлили бы исследование минут эдак 20. Загружаем Gameadmin.exe в Windasm и смотрим в String References "key.dll" делаем двойной клик и видим вот такое чудо:


:0049F16A 8BC0 mov eax, eax
:0049F16C 832D28BE4C0001 sub dword ptr [004CBE28], 00000001
:0049F173 0F839F000000 jnb 0049F218
:0049F179 C70518BE4C00E0F04900 mov dword ptr [004CBE18], 0049F0E0
:0049F183 C7051CBE4C0000F14900 mov dword ptr [004CBE1C], 0049F100
:0049F18D C70520BE4C0020F14900 mov dword ptr [004CBE20], 0049F120
:0049F197 C70524BE4C0034F14900 mov dword ptr [004CBE24], 0049F134

* Possible StringData Ref from Code Obj ->"key.dll"

:0049F1A1 681CF24900 push 0049F21C

* Reference To: kernel32.LoadLibraryA, Ord:0000h

:0049F1A6 E8ED7BF6FF Call 00406D98
:0049F1AB A32CBE4C00 mov dword ptr [004CBE2C], eax
:0049F1B0 833D2CBE4C0000 cmp dword ptr [004CBE2C], 00000000
:0049F1B7 7454 je 0049F20D

* Possible StringData Ref from Code Obj ->"GetRegistrationName"

:0049F1B9 6824F24900 push 0049F224
:0049F1BE A12CBE4C00 mov eax, dword ptr [004CBE2C]
:0049F1C3 50 push eax

* Reference To: kernel32.GetProcAddress, Ord:0000h
|
:0049F1C4 E8FF7AF6FF Call 00406CC8
:0049F1C9 A318BE4C00 mov dword ptr [004CBE18], eax

* Possible StringData Ref from Code Obj ->"GetRegistrationString"
|
:0049F1CE 6838F24900 push 0049F238
:0049F1D3 A12CBE4C00 mov eax, dword ptr [004CBE2C]
:0049F1D8 50 push eax

* Reference To: kernel32.GetProcAddress, Ord:0000h
|
:0049F1D9 E8EA7AF6FF Call 00406CC8
:0049F1DE A31CBE4C00 mov dword ptr [004CBE1C], eax

* Possible StringData Ref from Code Obj ->"GetComputerCount"
|
:0049F1E3 6850F24900 push 0049F250
:0049F1E8 A12CBE4C00 mov eax, dword ptr [004CBE2C]
:0049F1ED 50 push eax

* Reference To: kernel32.GetProcAddress, Ord:0000h
|
:0049F1EE E8D57AF6FF Call 00406CC8
:0049F1F3 A320BE4C00 mov dword ptr [004CBE20], eax

* Possible StringData Ref from Code Obj ->"CheckKeyVersion"
|
:0049F1F8 6864F24900 push 0049F264
:0049F1FD A12CBE4C00 mov eax, dword ptr [004CBE2C]
:0049F202 50 push eax

* Reference To: kernel32.GetProcAddress, Ord:0000h
|
:0049F203 E8C07AF6FF Call 00406CC8
:0049F208 A324BE4C00 mov dword ptr [004CBE24], eax

Как мы видим, происходит загрузка библиотеки "key.dll", далее адреса ее процедур записываются в память по адресам:


[004CBE18] <- "GetRegistrationName"
[004CBE1С] <- "GetRegistrationString"
[004CBE20] <- "GetComputerCount"
[004CBE24] <- "CheckKeyVersion"

А теперь смотрим на код прям перед LoadLibraryA:


:0049F179 mov dword ptr [004CBE18], 0049F0E0 <- "GetRegistrationName"
:0049F183 mov dword ptr [004CBE1C], 0049F100 <- "GetRegistrationString"
:0049F18D mov dword ptr [004CBE20], 0049F120 <- "GetComputerCount"
:0049F197 mov dword ptr [004CBE24], 0049F134 <- "CheckKeyVersion"

Хе-хе :) Помоему тут и ежу понятно. Автор решил не подвергать риску юзера и задал значения адресов, если такой 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:

  • GetRegistrationName возвращает строку "Демо Версия" (Demo Version)
  • GetRegistrationString также возвращает "Демо Версия"
  • GetComputerCount возвращает 3 (закодированное значение)
  • 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Исследование программ ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:31:00/0.0035898685455322/0