PDA

Просмотр полной версии : Реверсинг протокола авторизации PKO/TOP/Пиратия


data3000
19.02.2009, 03:17
Вообщем первым шагом устанавливается tcp соединение с 85.192.47.44 Destination port: 1973
Отправляем пакет с пустым содержанием получаем ответ вида:

00 1F-80 00 00 00 03 AC 00 15
..?....¬..
5B 30 32 2D 31 38 20 32-31 3A 31 30 3A 34 38 3A
[02-18 21:10:48:
34 36 31 5D 00
461].

на этот ответ клиет отправляет

00 54-80 00 00 00 01 AF 00 07
.T?....¯..
6E 6F 62 69 6C 6C 00 00-09 64 61 74 61 33 30 30
nobill...data300
31 00 00 18 B1 DD 38 E6-43 6B 90 9B 27 EF CA 4C
1...±Ý8æCk�›'ïÊL
98 29 B4 09 47 57 F6 33-D5 16 0E 24 00 18 30 30
˜)´.GWö3Õ..$..00
2D 44 30 2D 44 37 2D 30-46 2D 36 41 2D 34 33 2D
-D0-D7-0F-6A-43-
30 30 2D 30 30 00 03 8F-00 88
00-00..�.ˆ

т.е идет nobill...ИМЯ......ХЭШ

хэш похоже идет 24 байтный, меняется при изменении логина, пароля, даты.

вок кусок процедуры из клиента:

.text:0041C7D9 ; sub_41BF40+6DAj ...
.text:0041C7D9 68 B8+ push offset aNetlogin ; "netlogin"
.text:0041C7DE 8D 45+ lea eax, [ebp+var_4C]
.text:0041C7E1 50 push eax
.text:0041C7E2 E8 39+ call sub_404A20
.text:0041C7E7 83 C4+ add esp, 8
.text:0041C7EA 84 C0 test al, al
.text:0041C7EC 74 2F jz short loc_41C81D
.text:0041C7EE B8 10+ mov eax, 10h
.text:0041C7F3 39 45+ cmp [ebp+var_6C], eax
.text:0041C7F6 8B 4D+ mov ecx, [ebp+var_80]
.text:0041C7F9 73 03 jnb short loc_41C7FE
.text:0041C7FB 8D 4D+ lea ecx, [ebp+var_80]
.text:0041C7FE
.text:0041C7FE loc_41C7FE: ; CODE XREF: sub_41BF40+8B9j
.text:0041C7FE 39 45+ cmp [ebp+var_18], eax
.text:0041C801 8B 45+ mov eax, dword ptr [ebp+var_2C]
.text:0041C804 73 03 jnb short loc_41C809
.text:0041C806 8D 45+ lea eax, [ebp+var_2C]
.text:0041C809
.text:0041C809 loc_41C809: ; CODE XREF: sub_41BF40+8C4j
.text:0041C809 68 B0+ push offset aNobill ; "nobill"
.text:0041C80E 51 push ecx
.text:0041C80F 50 push eax
.text:0041C810 E8 AB+ call sub_5077C0
.text:0041C815 83 C4+ add esp, 0Ch
.text:0041C818 E9 CE+ jmp loc_41F3EB


.text:005077C0 sub_5077C0 proc near ; CODE XREF: sub_41BF40+8D0p
.text:005077C0 ; sub_4C4D50+5Ep ...
.text:005077C0
.text:005077C0 arg_0 = dword ptr 4
.text:005077C0 arg_4 = dword ptr 8
.text:005077C0 arg_8 = dword ptr 0Ch
.text:005077C0
.text:005077C0 8B 44+ mov eax, [esp+arg_8]
.text:005077C4 8B 4C+ mov ecx, [esp+arg_4]
.text:005077C8 8B 54+ mov edx, [esp+arg_0]
.text:005077CC 50 push eax
.text:005077CD A1 08+ mov eax, dword_6C2508
.text:005077D2 51 push ecx
.text:005077D3 8B 88+ mov ecx, [eax+324h]
.text:005077D9 52 push edx
.text:005077DA E8 C1+ call sub_51A5A0
.text:005077DF C3 retn
.text:005077DF sub_5077C0 endp


.text:0051A5A0 sub_51A5A0 proc near ; CODE XREF: sub_5077C0+1Ap
.text:0051A5A0
.text:0051A5A0 hostshort = word ptr -4E0h
.text:0051A5A0 var_4DC = dword ptr -4DCh
.text:0051A5A0 var_4A4 = dword ptr -4A4h
.text:0051A5A0 var_4A0 = dword ptr -4A0h
.text:0051A5A0 var_490 = dword ptr -490h
.text:0051A5A0 var_48C = dword ptr -48Ch
.text:0051A5A0 var_488 = dword ptr -488h
.text:0051A5A0 var_410 = dword ptr -410h
.text:0051A5A0 var_10 = dword ptr -10h
.text:0051A5A0 var_C = dword ptr -0Ch
.text:0051A5A0 var_4 = dword ptr -4
.text:0051A5A0 arg_0 = dword ptr 4
.text:0051A5A0 arg_4 = dword ptr 8
.text:0051A5A0 arg_8 = dword ptr 0Ch
.text:0051A5A0
.text:0051A5A0 6A FF push 0FFFFFFFFh
.text:0051A5A2 68 CC+ push offset loc_5F6FCC
.text:0051A5A7 64 A1+ mov eax, large fs:0
.text:0051A5AD 50 push eax
.text:0051A5AE 64 89+ mov large fs:0, esp
.text:0051A5B5 81 EC+ sub esp, 4D4h
.text:0051A5BB A1 44+ mov eax, dword_65F044
.text:0051A5C0 8B 15+ mov edx, dword_6C2508
.text:0051A5C6 55 push ebp
.text:0051A5C7 56 push esi
.text:0051A5C8 57 push edi
.text:0051A5C9 8B BC+ mov edi, [esp+4ECh+arg_0]
.text:0051A5D0 8B E9 mov ebp, ecx
.text:0051A5D2 89 84+ mov [esp+4ECh+var_10], eax
.text:0051A5D9 8B CF mov ecx, edi
.text:0051A5DB 81 C2+ add edx, 3ACh
.text:0051A5E1
.text:0051A5E1 loc_51A5E1: ; CODE XREF: sub_51A5A0+49j
.text:0051A5E1 8A 01 mov al, [ecx]
.text:0051A5E3 41 inc ecx
.text:0051A5E4 88 02 mov [edx], al
.text:0051A5E6 42 inc edx
.text:0051A5E7 84 C0 test al, al
.text:0051A5E9 75 F6 jnz short loc_51A5E1
.text:0051A5EB 8B B4+ mov esi, [esp+4ECh+arg_4]
.text:0051A5F2 8B 15+ mov edx, dword_6C2508
.text:0051A5F8 8B CE mov ecx, esi
.text:0051A5FA 81 C2+ add edx, 410h
.text:0051A600
.text:0051A600 loc_51A600: ; CODE XREF: sub_51A5A0+68j
.text:0051A600 8A 01 mov al, [ecx]
.text:0051A602 41 inc ecx
.text:0051A603 88 02 mov [edx], al
.text:0051A605 42 inc edx
.text:0051A606 84 C0 test al, al
.text:0051A608 75 F6 jnz short loc_51A600
.text:0051A60A 56 push esi ; char *
.text:0051A60B 57 push edi ; int



имеется и клиентская часть и серверная часть (без исходников конечно),

вот всё пытаюсь самостоятельно сгенерировать этот ХЭШ но всё никак не могу найти где он генерируется в клиете, если кто может подскажите чем можите :confused: где дальше копать

zeppe1in
19.02.2009, 03:44
надо смотреть в отладчике.

neprovad
19.02.2009, 08:10
у peid есть плагин неплохой - Kanal, поможет узнать какие криптобиблиотеки использовались

data3000
19.02.2009, 10:35
у peid есть плагин неплохой - Kanal, поможет узнать какие криптобиблиотеки использовались
спасибо действительно помогает хоть теперь примерно знаю что используется дальше буду пробовать в отладчике копать

ADLER32 :: 00147F3A :: 00547F3A
The reference is above.
BASE64 table :: 00214608 :: 00614608
Referenced at 00575DD5
Referenced at 00575E01
Referenced at 00575E2E
Referenced at 00575E4C
Referenced at 00575E8A
Referenced at 00575ECA
Referenced at 00575EF4
CRC32 :: 00212A38 :: 00612A38
Referenced at 00540AD2
Referenced at 00540AE4
Referenced at 00540AF9
Referenced at 00540B0E
Referenced at 00540B23
Referenced at 00540B38
Referenced at 00540B4D
Referenced at 00540B62
Referenced at 00540B86
DES [pbox] [char] :: 002147D0 :: 006147D0
Referenced at 00576D12
DES [pbox] [char] :: 00214B28 :: 00614B28
Referenced at 00578384
DES [pbox] [char] :: 00214E70 :: 00614E70
Referenced at 0057889A
DES [sbox] :: 002569E0 :: 006569E0
Referenced at 004E4F42
Referenced at 004E4FD4
MD5 :: 0018552E :: 0058552E
The reference is above.
SHA1 [Compress] :: 001762D4 :: 005762D4
The reference is above.
SHA1 [Compress] :: 00177A4A :: 00577A4A
The reference is above.
ZLIB deflate [long] :: 00213310 :: 00613310
Referenced at 005492FD

data3000
19.02.2009, 12:00
в серверной части также используетвся

BASE64 table :: 000549B8 :: 004549B8
DES [pbox] [char] :: 00054B80 :: 00454B80
DES [pbox] [char] :: 00054ED8 :: 00454ED8
DES [pbox] [char] :: 00055220 :: 00455220
MD5 :: 0003896E :: 0043896E
SHA1 [Compress] :: 00031F44 :: 00431F44
SHA1 [Compress] :: 000336BA :: 004336BA

подскажите может кто встречал DES [pbox] [char] "DES key permutation (PBox) (1-based)" что это

Chaak
19.02.2009, 12:08
Дес - алгоритм хэширования, кроме бейс64(ты его сразу узнаешь по разного регистра буквам и иногда по знакам равно на конце) в проге нет.

Дес строго 12 символов в длину. 12 + 12 = 24

Скорей всего, как и в практически любом другом протоколе, используется бинарное пакование данных. Ищи его с помощью отладчика.
Бряк на WM_COMMAND в WndProc(это по нажатию кнопки если).

geezer.code
19.02.2009, 12:42
Дес - алгоритм хэширования, кроме бейс64(ты его сразу узнаешь по разного регистра буквам и иногда по знакам равно на конце) в проге нет.

DES - data encryption standart - как раз таки алгоритм шифрования. А хэширование - вырожденные случай шифрования, просто всесто 56-битного ключа берется по 7 бит из первых 8 байт шифруемого сообщения, так получаем хэширование вместо шифрования.

geezer.code
19.02.2009, 12:47
подскажите может кто встречал DES [pbox] [char] "DES key permutation (PBox) (1-based)" что это
pbox - матрица изменения ключа. 56битный ключ - проходит процедуру расширения до 64 бит. после этого кажется перед каждым циклом проходит пермутацию, на основе pbox, это матрица с зараниее известными значениям. pbox - обычно закладываются 1 раз в самом коде.

ProTeuS
19.02.2009, 13:35
1. geezer.code все верно сказал
2. data3000. советую 2 способа, первый брякнуться не на коде самой отсылки, а до него, поставив бряку, на пример на винсоковский connect при установке соединения и там смотришь кто куда и за4ем коннектится. а немного далее по коду будет функи генерации пакетов, крипто и все 4то тебе нужно; второй, если не выйдет с первым, в том коде который ты привел выше, брякаешься, жмешь альт+к в отльке, смотришь откуда пришли по стеку, там дизасмишь, перезапускаешь прогу уже с бряками выше в надфункциях и исследуешь пока не найдешь код перекодирования вменяемых данных в шифрованые

zeppe1in
19.02.2009, 15:04
а я бы брякнулся перед отправкой этого хеша поставил на него хардваре брекпойнт на акес и рестарт) он скорее всего копироваца будет много раз но так можно и найти место генерации.