Клиент-сервер в ClubAdmin 2.3

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Разговаривают два системных администратора:

-Прикинь, вчера мой знакомый сервак уронил!

-Он что — хакер?

-Нет. Он кретин!

Очередная чисто «клубная» прога 🙂 Т.е. для управления клубом компутерным. Как обычно ничего особенно, но тут заюзан принцип «клиент-сервер» для процесса регистрации и это интересно поглядеть…

Инструменты: 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 символов.

{/codecitation}

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