Разговаривают два системных администратора:
-Прикинь, вчера мой знакомый сервак уронил!
-Он что - хакер?
-Нет. Он кретин!
Очередная чисто "клубная" прога :) Т.е. для управления клубом компутерным. Как обычно ничего особенно, но тут заюзан принцип "клиент-сервер" для процесса регистрации и это интересно поглядеть...
Инструменты: Softice, Ida Pro 4.x, Hex редактор.
Как я определил что тут принцип клиент-сервер? Да просто прога сетевая и ClubAdmin.exe при запуске конектится к ClubServer. И еще после того как имя и регистрационный введен он только раз копируется и больше с ним ничего не происходит, что тоже вызвало у меня подозрение. Сделав ради интереса bpx send я убедился, что код таки пересылается на ClubServer и обрабатывается там. Если посмотреть что передается в буфере send то можно видеть что-то типа:
xx..Testinfo..nnnnnn..uuuu
xx - какие-то 2 байта
nnnn - введенный серийник
uuuu - введенное имя
Значит "TestInfo"... посмотрим где встречается эта строка в ClubServer.exe Грузим в IDA. И видим вот такое(я тут немного от себя подписал):
_text:0040B7BC push ebp
_text:0040B7BD mov ebp, esp
_text:0040B7BF add esp, 0FFFFFF60h
_text:0040B7C5 push ebx
_text:0040B7C6 push esi
_text:0040B7C7 mov esi, offset aNone ; "none"
_text:0040B7CC lea eax, [ebp+var_18]
_text:0040B7CF push eax ; int
_text:0040B7D0 mov edx, [ebp+lpString]
_text:0040B7D3 push edx ; lpString
_text:0040B7D4 call CheckLength - тут проверяет длину серийного номера. Длина кода = 20 символов.
_text:0040B7D9 add esp, 8
_text:0040B7DC test al, al
_text:0040B7DE jnz short loc_0_40B7EA - если ок то прыгнет
_text:0040B7E0 mov eax, 4 - это число компов в демо режиме.
_text:0040B7E5 jmp loc_0_40BA19
Дальше оно шифрует серийник и идет по кускам кода, которые определяют тип лицензии. Там идет типа:
_text:0040B877 call sub_0_412F74 - проверка зашифрованного серийника
_text:0040B87C add esp, 0Ch
_text:0040B87F test eax, eax
_text:0040B881 jz short loc_0_40B88D - если тут не прыгнет то дальше сразу демо режим.
_text:0040B883 mov eax, 4 - количество компов...
_text:0040B888 jmp loc_0_40BA19
..............
_text:0040B8CF call sub_0_412F74
_text:0040B8D4 add esp, 0Ch
_text:0040B8D7 test eax, eax
_text:0040B8D9 jnz short loc_0_40B8E5
_text:0040B8DB mov eax, 0Ah - количество компов...
_text:0040B8E0 jmp loc_0_40BA19
и т.д. мне понравился вот этот вариант:
_text:0040B97E call sub_0_412F74
_text:0040B983 add esp, 0Ch
_text:0040B986 test eax, eax
_text:0040B988 jnz short loc_0_40B994
_text:0040B98A mov eax, 64h - 100 компов :)
_text:0040B98F jmp loc_0_40BA19
Итак что нужно чтобы управлять 100 компами? Нужно сделать чтоб jnz по адресу 40B988 не выполнялся, а также jz по адресу 40B881 выполнялся всегда. После таких модификаций можно заходить ClubAdmin.exe и регить себя на любое имя, главное чтоб номер имел длину 20 символов.
Клиент-сервер в ClubAdmin 2.3: анализ регистрации клиента на сервере с использованием принципа 'клиент-сервер' и обнаружением шифрования серийного номера.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.