Клиент-сервер в ClubAdmin 2.3
|
Разговаривают два системных администратора:
-Прикинь, вчера мой знакомый сервак уронил!
-Он что - хакер?
-Нет. Он кретин!
|
Очередная чисто "клубная" прога :) Т.е. для управления клубом компутерным. Как обычно ничего особенно, но тут заюзан принцип "клиент-сервер" для процесса регистрации и это интересно поглядеть...
Инструменты: 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:00405423 push 8
_text:00405425 push offset aTestinfo ; "TestInfo"
_text:0040542A push edi
_text:0040542B call sub_0_412F74
_text:00405430 add esp, 0Ch
_text:00405433 test eax, eax
_text:00405435 jnz loc_0_405538
_text:0040543B push 80h
_text:00405440 add edi, 8
_text:00405443 push edi
_text:00405444 lea eax, [ebp+var_7594]
_text:0040544A push eax
_text:0040544B call GetDataFromPacket
_text:00405450 add esp, 0Ch
_text:00405453 mov esi, eax
_text:00405455 push 80h
_text:0040545A push esi
_text:0040545B lea eax, [ebp+var_74CC]
_text:00405461 push eax
_text:00405462 call GetDataFromPacket
_text:00405467 add esp, 0Ch
_text:0040546A lea edx, [ebp+var_74CC]
_text:00405470 push edx ; SN
_text:00405471 lea ecx, [ebp+var_7594]
_text:00405477 push ecx ; UserName
_text:00405478 push ebx
_text:00405479 call TestReg
|
То что я назвал TestReg:
_text:00404164 push esi
_text:00404165 push ebx
_text:00404166 call sub_0_40B7BC ; CheckSerial
_text:0040416B add esp, 8
_text:0040416E cmp eax, 4
_text:00404171 jg short loc_0_40417A
_text:00404173 xor eax, eax
_text:00404175 jmp loc_0_40423B
|
CheckSerial:
_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 символов.
|