PDA

Просмотр полной версии : И опять Init (авторизация)


finomen
12.01.2010, 01:07
В поиск прошу не посылать, перечитал уже кучу веток.

итак, правильно ли расшифровываеться пакет (от шока)?

Connected
Packet size: 186
__________________________________________________ ____
0x00 | ba 00 d4 38 d7 c5 97 bf 98 d5 ad 92 fa b6 bb 09
0x10 | a5 f5 75 34 6a 7e be b1 1a 41 76 39 de d3 cd 11
0x20 | d7 7d 1f 2d 57 09 b9 ae 91 8c 02 e5 75 bb 93 1c
0x30 | 5a b5 71 9d e5 52 cd 24 77 4b df 0e 5a 1d 11 3b
0x40 | f0 b8 74 e7 49 e4 9e e1 56 b2 ea 12 ee f2 f8 ae
0x50 | 80 53 3c 4c cf 03 96 a2 65 87 2d 48 2e 4f a1 62
0x60 | 8c 09 35 8c 38 12 32 ea bf 09 4a 6f 7c 05 4f a3
0x70 | 49 d4 f2 b9 50 ab 85 f4 c5 cd 47 3d 74 a8 a2 8f
0x80 | 75 c4 5c ac 8d fe dc fd 87 3d 6a 93 0d 86 23 75
0x90 | c0 b6 ca 82 89 26 de ca d6 c2 4d 9d c9 73 ba 95
0xa0 | d5 c0 47 30 5a ea b9 48 7b 07 e4 99 a6 27 e3 8b
0xb0 | 29 3c 1a 78 5d eb 5f 3a 39 da 00 00

Decrypt BlowFish
__________________________________________________ ____
0x00 | ba 00 00 04 ff 02 28 2d 84 85 b4 db 13 c0 0e db
0x10 | a6 3b 44 c7 ff c7 53 e5 17 bd d0 62 7c 0b 98 d8
0x20 | d0 72 4a 2c 67 ec 1e 61 27 1c 5a dd 7c 5e 92 87
0x30 | d4 67 d2 1c 40 95 c0 33 31 a9 cd 3a 50 21 2d 9f
0x40 | f0 b3 6c 0d 74 c0 3e 44 f1 5b 5d e8 56 84 18 53
0x50 | 42 8b ab 8b ae c2 4e eb 6c 59 c0 4d 71 40 bc 58
0x60 | c4 7f 35 16 17 95 3e 15 3e e5 57 2a a2 46 06 a0
0x70 | db 19 63 8f 9a a5 4a 5d 07 93 bc ef 6b 79 79 3d
0x80 | de 94 d8 46 49 5a 86 34 bb 0b 37 b6 39 a2 9c 2d
0x90 | 08 0f 85 cd 05 f5 c8 f2 70 c2 f7 37 8a f6 fc 2d
0xa0 | 1c 92 9a 84 7a e2 fc b1 55 7b 5b cd bc bc ab 29
0xb0 | 3e 33 b2 d4 dd 2b 44 52 aa 91 26 0b

Decrypt XOR
__________________________________________________ ____
0x00 | dd 2b 44 52

__________________________________________________ ____
0x00 | ba 00 00 04 ff 02 28 2d 95 45 b2 8e 8d 07 b5 67
0x10 | 45 fa f6 1d 0e 8b 7c 07 33 ba 58 d5 ac c6 ad 34
0x20 | 8b 56 bf f2 86 f7 d4 43 fb 41 c8 5d d0 00 c0 7b
0x30 | 94 14 6d 12 af f3 83 d6 e1 77 d7 af 60 6d 89 65
0x40 | e4 73 75 49 3b 94 93 13 df 27 5a 59 94 fc 8e d9
0x50 | e8 c9 9a 10 02 e4 0e 28 63 99 5b 75 35 e6 50 b5
0x60 | d1 ec ec fc e9 c9 72 ff 60 dc ad 75 fb af 26 2b
0x70 | 41 7a 29 a2 61 29 21 38 de cb 6b d5 d9 12 51 03
0x80 | 97 3e 5d ad 22 5d 89 a6 6c 56 5c 53 31 a7 19 66
0x90 | f3 85 32 e3 75 b7 38 e3 06 e8 03 13 7e 67 86 56
0xa0 | 36 0c f1 d4 a9 a6 c9 72 e1 1f 33 25 46 ae e5 e2
0xb0 | e3 18 f6 86 00 00 00 00 aa 91 26 0b

Proto: -1304062675
__________________________________________________ ____
0x00 | 2d 95 45 b2



скромный код (вроде нигде не накосячил)

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>


#include <iostream>

#include <openssl/blowfish.h>

int print_packet(char *raw, int len) {
int i, c = 0;

for(i=0;i<54;i++) printf("_");

for(i=0;i<len;i++)
{
if((c % 0x10)==0)
printf("\n0x%.2x | ", c);
printf("%.2x ",raw[i] & 0xFF);
c++;

}
printf("\n\n");
}
void XORdecrypt( unsigned char *data, unsigned int len, unsigned char *Key )
{
int i,k;
i=len-8;
k=(*((int*)Key));
while(i>=6)
{
*((int*)&data[i])=(*((int*)&data[i]))^k;
k=k-(*((int*)&data[i]));
i=i-4;
}

}
using namespace std;
int main(void)
{
int sock=0;
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock==-1)
cerr<<"Create socket"<<endl;

struct hostent *he;
struct sockaddr_in server;
int sockfd;

/* resolve localhost to an IP (should be 127.0.0.1) */
if ((he = gethostbyname("95.211.81.129")) == NULL) {
cerr<<"error resolving hostname.."<<endl;
return 1;
}

/*
* copy the network address part of the structure to the
* sockaddr_in structure which is passed to connect()
*/
memcpy(&server.sin_addr, he->h_addr_list[0], he->h_length);
server.sin_family = AF_INET;
server.sin_port = htons(2106);

/* connect */
if (connect(sock, (struct sockaddr *)&server, sizeof(server))) {
cerr<<"error connecting.."<<endl;
return 1;
}
cout<<"Connected"<<endl;

short pack_size;
recv(sock,(char*)&pack_size,2,0);
cout<<"Packet size: "<<pack_size<<endl;
char *buf=new char[pack_size+2];
recv(sock,buf+2,pack_size,0);
memcpy(buf,&pack_size,2);
print_packet(buf,pack_size+2);

cout<<"Decrypt BlowFish"<<endl;
unsigned char bkey[16]={0x6B,0x60,0xCB,0x5B,0x82,0xCE,0x90,0xB1,0xCC,0x2 B,0x6C,0x55,0x6C,0x6C,0x6C,0x6C};
BF_KEY bfkey;
BF_set_key(&bfkey, 16, (unsigned char *)bkey);

for(int i = 0; i <(pack_size-2)/4; i++)
BF_decrypt((BF_LONG *)(&buf[2+i*4]), &bfkey);

print_packet(buf,pack_size+2);

cout<<"Decrypt XOR"<<endl;

int i=180;
print_packet((char*)&key,4);
print_packet((buf+i),4);
XORdecrypt((unsigned char*)(buf),pack_size+2,(unsigned char*)(buf+i));

print_packet(buf,pack_size+2);

int proto=0;
memcpy((char*)&proto,&buf[2+1+4],4);
cout<<"Proto: "<<proto<<endl;
print_packet((char*)&proto,4);
delete []buf;
close(sock);
return 0;
}

xkor
12.01.2010, 02:18
finomen, у тебя по BF неверно дешифруется, если я правильно понял код то ты по BF дешифруешь блоками по 4 байта, в то время как BF работает с блоками в 8 байт...

finomen
12.01.2010, 12:35
спасибо, просто наткнулся на статью где написано что блоками по 4.
но теперь странность...хвост пакета-нули...
да, 186 не кратно 8. блоуфишем не весь пакет зашифрован?

Connected
Packet size: 186
__________________________________________________ ____
0x00 | ba 00 90 a8 e1 37 61 5d 3b c5 f3 a3 0a c8 fe 89
0x10 | a7 3b 36 5d e3 fe bd d6 70 a3 8c f0 12 5d c3 5c
0x20 | 2a 2d 50 58 9f 8a bd 8a 4b bf ca db e8 b1 3f 3e
0x30 | 0c 8e 93 66 43 e5 56 33 5a 82 8c b3 b7 ac 33 2d
0x40 | 93 db 41 2e 59 ad ee f7 28 c6 8d 15 16 4a 60 e7
0x50 | 1e b3 61 a2 eb d9 1c fb 1f cf 21 4a fc 52 e8 f3
0x60 | 33 e2 23 d1 ba 12 95 fb c6 f2 e3 8d c6 be eb 6d
0x70 | a8 c7 36 9e 88 14 65 06 1c de bc a1 ad c4 4e c6
0x80 | 3d 7d b7 aa 65 25 70 94 6e 44 53 18 1e 4a 9b c0
0x90 | e2 e8 c2 06 ab 87 66 bf d7 9d b5 3b 13 64 2e ec
0xa0 | 32 21 45 25 6f 0f 63 89 4d 2f 62 2a f8 6e b3 f6
0xb0 | 10 95 4a d7 cd cd 3e 59 2e 87 00 00

Decrypt BlowFish
__________________________________________________ ____
0x00 | ba 00 00 ff 29 05 33 de 66 4f 33 01 a7 b1 3f 40
0x10 | 13 0d 8f 99 c0 af 8c b3 a2 a8 ab 71 e4 f4 cf cd
0x20 | b7 6c 15 d4 fd 7a 1e 11 57 2c a8 39 6d c3 e8 ad
0x30 | 35 42 fc 44 12 8d 2f 5f 71 00 8d 68 ad 7b 16 8e
0x40 | 16 ab 0c 71 21 2c 90 1b d5 f2 48 e3 2e 3d 38 6a
0x50 | e0 8a de b0 e4 dd ff 26 ad cc 1c cb 98 e9 ac d2
0x60 | 3a ee 68 10 f2 f9 95 e5 3f dd cd 2e b4 38 90 3b
0x70 | 9b fd b9 11 64 89 de f8 1f 2a ff 08 bb ad 15 8b
0x80 | a7 77 d5 95 27 40 af 53 ae e1 c5 45 b6 9e 86 fb
0x90 | 5c c5 51 08 c0 19 2a e8 b7 cf c3 1f 59 9e 3c 80
0xa0 | fd d9 41 6d d4 0f 6f a3 1a 67 b0 58 c3 f1 80 58
0xb0 | c3 f1 80 58 c3 f1 00 00 00 00 00 00

Decrypt XOR
__________________________________________________ ____
0x00 | c3 f1 00 00

__________________________________________________ ____
0x00 | ba 00 00 ff 29 05 33 de c5 00 1d c1 4a bb 48 c7
0x10 | d3 53 0c c9 9e f8 e4 bd be fc e1 bb 77 d0 c2 81
0x20 | 12 b6 e4 c4 2e 51 b6 e8 42 13 00 62 be 7e 23 69
0x30 | 3b cf 19 ea c3 72 a5 f8 d2 39 83 e6 47 21 e5 20
0x40 | f7 b8 9c 6b 6a 9d a8 c4 c7 21 9f 8a 8e b7 76 05
0x50 | 3c 20 e8 a9 87 99 e4 1f 35 e5 80 79 42 74 0b 3d
0x60 | f4 b9 e2 f2 1b d5 a7 03 ab fa 5d f5 d1 cc 06 34
0x70 | ff 84 17 09 93 6c 38 f0 94 b7 0c 80 18 5a d9 01
0x80 | 42 48 8c a7 71 a1 eb 10 3c 84 40 b1 92 dd c8 03
0x90 | 9c c3 8b 2f ab ad e8 f7 ee bd 00 60 02 b7 fc 2c
0xa0 | 51 dc 50 f0 3e 55 3f 1b d9 96 30 f0 00 00 00 ff
0xb0 | 00 00 80 58 00 00 00 00 00 00 00 00

Proto: 486589918
__________________________________________________ ____
0x00 | de c5 00 1d

alexteam
12.01.2010, 12:41
первые 2 байта - размер пакета... не шифруется.. как бы...

finomen
12.01.2010, 12:51
186 это без 2 байт, если я правильно понял...это собственно то что прочитано из этих 2 байт

а вот последние 2 байта нули...всегда причем.

Sherman
12.01.2010, 13:02
Сервер в ПМ напиши )

alexteam
12.01.2010, 13:05
finomen, думаю.. не осилишь...
ибо "ba 00" = 186...
а длина пакета без первых двух байтов длинны = 184.. что прекрасно разбивается на блоки по 8 байт...

xkor
12.01.2010, 13:13
alexteam, думаешь он в курсе что эти два байта содержат размер всего пакета а не только той части что за ними?)

Добавлено через 1 минуту
finomen, короч уменьши размер пакета на два и будет тебе счастье)

finomen
12.01.2010, 13:24
спасибо. получилось. я не думал что нулями пакет дополнят после шифрования...

xkor
12.01.2010, 13:41
finomen, эм, а где пакет дополнен нулями после шифрования? оО

finomen
12.01.2010, 14:03
ну последние 2 байта пакета инит это 00 00. и их не достает ни ксор, ни блоуфиш.

alexteam
12.01.2010, 14:09
немая сцена....

xkor
12.01.2010, 17:05
finomen, да нет мля этих двух нулевых байт!, они тебе мерещатся!!!
размер пакета 186 байт, 2 байта это размер, остаётся 184 байта которые замечательно делятся на 8 = 23...

Grinch
12.01.2010, 22:47
бывает... и если по теме приму в дар квартиру на против КП само собой в Москве, в Кремле не предлагать устарело да занято!

finomen
14.01.2010, 16:55
источник нулей нашел. ошибка моей старой программы.

теперь другой вопрос: RequestGGAuth шифруется только блоуфишем? или ксором тоже?

Server->Client
---------------------
Packet size: 186
__________________________________________________ ____
0x00 | ba 00 4e 2a 54 ce 90 77 3f b1 6b 3e 1e a6 e0 1a
0x10 | 08 78 5e 79 57 f7 7e 37 18 bb 52 b6 cf d8 b2 f1
0x20 | 9f 0f ac bd 0f a0 73 3e 70 cc 9f 3e 7a 62 91 c1
0x30 | 34 1d 3c f8 64 22 4c cd 16 9f a0 72 57 38 c7 92
0x40 | 82 e5 26 cd 23 e5 67 14 a2 81 f8 c2 72 1b 73 ce
0x50 | ca 1c 96 7c 14 63 2f 7c d6 f7 fc 28 57 ee 14 3c
0x60 | 19 65 d3 8d dc ab ff cc 13 28 5d 12 15 25 31 17
0x70 | 84 e4 d3 d1 e7 06 44 f7 6a 1e f8 d4 06 95 9f b3
0x80 | 47 08 16 ba 20 ab 4d ee bb 48 72 d1 74 af c2 4d
0x90 | a3 fb 18 66 85 33 97 78 98 95 9e 1a 81 1c c4 b0
0xa0 | 3d c3 35 6c 35 c9 73 18 76 aa 4b a6 81 31 10 f2
0xb0 | 95 d8 a2 78 e3 3a b7 e3 6b 16

Decrypted (XOR+Blowfish)
__________________________________________________ ____
0x00 | ba 00 00 cc b9 0d 00 21 c6 00 00 a4 a5 e1 dd ee
0x10 | e4 e0 6c 15 a3 90 78 9f 4f 76 2b c2 17 f9 b4 8e
0x20 | 81 38 9d 11 f2 6a 24 4d 72 ab b8 3c a9 47 8a 8a
0x30 | f6 40 73 c9 97 b7 6e 06 e9 8d 9c 8f e6 80 72 d5
0x40 | 20 1c c1 69 7c 07 da bf bf ad 7c a2 31 d7 44 12
0x50 | 92 98 01 b3 a8 4c 7a 55 8b 8d cd 3c 67 c1 0e 81
0x60 | db e1 88 c8 6d d3 2a 79 28 c9 4d 53 b4 7c 37 83
0x70 | 12 53 a0 3f 10 8b 3c ee 76 41 3b f8 b5 58 6e 1f
0x80 | ca de ce 0b ea 7c 05 b5 1a da 4d 4e 95 dd 29 fc
0x90 | 9c 43 77 20 b6 4d 97 f7 e0 45 07 d6 cd a3 61 d4
0xa0 | f5 2f af 28 4f 30 c3 3b 68 b8 81 3e fc ff e0 1f
0xb0 | fe ff 7b 47 6b 70 00 00 00 00
(то что выделено это же ключ блоуфиш для дальнейших пакетов?)
Client->Server
-----------------
Packet size: 42
__________________________________________________ ____
0x00 | 2a 00 a6 de 01 62 35 04 75 e7 6e f3 a3 0b 47 87
0x10 | d0 00 6e f3 a3 0b 47 87 d0 00 a6 de 01 62 35 04
0x20 | 75 e7 6e f3 a3 0b 47 87 d0 00

Decrypt blowfish
__________________________________________________ ____
0x00 | 2a 00 2d 3e 49 c8 89 b0 c2 df a0 2e 11 38 74 10
0x10 | 50 1c a0 2e 11 38 74 10 50 1c 2d 3e 49 c8 89 b0
0x20 | c2 df a0 2e 11 38 74 10 50 1c

xkor
14.01.2010, 21:00
finomen, а попробуй BF ключ не "d6 cd a3 61 d4 f5 2f af 28 4f 30 c3 3b 68 b8 81" а "d6 cd a3 61 d4 f5 2f af 28 4f 30 c3 3b 68 b8 81 3e fc ff e0 1f fe ff 7b 47 6b 70"
и ты уверен что у тебя переинициализация ключа происходит нормально?

ЗЫ ксор точно только в первом пакете, по крайней мере на оффах так...

finomen
14.01.2010, 21:23
New bf key
__________________________________________________ ____
0x00 | d6 cd a3 61 d4 f5 2f af 28 4f 30 c3 3b 68 b8 81
0x10 | 3e fc ff e0 1f fe ff 7b 47 6b 70

Packet size: 42
__________________________________________________ ____
0x00 | 2a 00 a6 de 01 62 35 04 75 e7 6e f3 a3 0b 47 87
0x10 | d0 00 6e f3 a3 0b 47 87 d0 00 a6 de 01 62 35 04
0x20 | 75 e7 6e f3 a3 0b 47 87 d0 00

Decrypt blowfish
__________________________________________________ ____
0x00 | 2a 00 a4 f6 d5 e3 8f 6a 4b c4 92 96 2a 7c 9d 1c
0x10 | 16 4e 92 96 2a 7c 9d 1c 16 4e a4 f6 d5 e3 8f 6a
0x20 | 4b c4 92 96 2a 7c 9d 1c 16 4


что-то не то. да и 27 байт это какой-то странный ключ.

да, это пакеты шока. а если быть точным-конкретно этот послан корректором.

xkor
15.01.2010, 00:28
finomen, ну корректор посылает RequestGGAuth так:
fCryptSrv.InitKey(srvReadBuf.ch[$9b],StrLen(PChar(@srvReadBuf.ch[$9b])));
SendToServer(RequestGGAuth_c621(sessionID));

то есть ключик как раз будет 27 байт ибо 0 после 27го байта)
и всё таки, ты уверен что у тебя переинициализация ключа происходит нормально? то есть перед инициализацией ключа массивы заполняются начальными значениями?

Добавлено через 4 минуты
а у тебя BF от openssl, там по идее всё правильно должно быть, но лучше покажи как ты ключ новый задаёшь

finomen
15.01.2010, 01:19
задаю так
cout<<"New bf key"<<endl;
print_packet(buf+2+1+4+4+128+16,27);

BF_set_key(&nbfkey, 27, (unsigned char *)(buf+2+1+4+4+128+16));
дешифрую так
for(int i = 0; i <(pack_size)/8; i++)
BF_decrypt((BF_LONG *)(buf+2+i*8), &nbfkey);

xkor
15.01.2010, 17:02
finomen, размер ключа не фиксированно равен 27.., конец там где первый ноль (сам ноль не является частью ключа)

ЗЫ но конкретно для того пакета по идее должно всё работать...

finomen
15.01.2010, 19:27
я сдампил 2 пакета и пока разбираюсь с ними. попробую другоую пару, может поможет.

Добавлено через 25 минут
помогло. однако.

Добавлено через 6 минут

0x00 | 2a 00 07 1e e3 11 00 00 00 00 00 00 00 00 00 00
0x10 | 00 00 00 00 00 00 00 00 00 00 07 1e e3 11 00 00
0x20 | 00 00 00 00 00 00 00 00 00 00

так и должно быть? ид пакета, ид сессии, нули....опять ид пакета, ид сессии, нули....

xkor
15.01.2010, 19:34
finomen, не, второй раз ID сессии и нули быть не должны, однако должна быть чексумма но она немного поже должна быть:
WriteB(7); // Packet ID
WriteD(sessionID); // sessionID
WriteH(0); WriteB(0);
WriteD(0); WriteD(0); WriteD(0); WriteD(0);
WriteD(0); WriteD(0); WriteD(0); WriteD(0);
AddChecksum(data[3],24);
тоесть чексумма должна быть где то с 26го байта...

Добавлено через 3 минуты
тфу блин, она там и есть, всё правильно)

finomen
15.01.2010, 20:57
что ж такое....гденить есть описание протокола грации? http://fursoffers.narod.ru/Packets.htm#RequestAuthLogin как-то сильно не соотвествует. полученный RequestAuthLogin
Packet size: 178
Recvd 176
__________________________________________________ ____
0x00 | b2 00 12 19 f3 56 91 a0 09 bf 99 e2 18 7d 21 e4
0x10 | 40 4e ce 61 7a be b2 ab 97 7d 75 a7 46 7c 55 b4
0x20 | 7d 4a 50 5d 23 62 7f 40 6a 40 55 72 60 d5 8c 70
0x30 | 58 6d 55 2a 17 8b 10 1b f0 8f b3 ab 7c 9d 34 ed
0x40 | ea 90 4a 65 c8 bd 58 bd 42 d9 c5 64 f5 dd 5a f9
0x50 | 6b c2 cc 02 6a 90 15 d6 0a 05 86 db 40 1b 4d f3
0x60 | 59 ba 9e e1 32 8f 93 22 79 8f 90 66 ed e4 85 7a
0x70 | 86 35 90 0e cf 52 79 48 8d 99 e2 b9 98 5f fa df
0x80 | d4 d4 2e 16 f0 d4 76 b9 ef 40 44 82 88 6b 3c 21
0x90 | 65 e4 9d 9b 34 93 ec 56 fe c2 44 82 88 6b 3c 21
0xa0 | 65 e4 97 88 9d 2c ba 76 9d 76 44 82 88 6b 3c 21
0xb0 | 65 e4

Decrypt blowfish
__________________________________________________ ____
0x00 | b2 00 00 28 5d dc af 7b 6a 8c 1e d7 30 39 aa 30
0x10 | f2 d7 b6 5f f6 f4 71 ee 71 28 5d a7 f5 81 fa d7
0x20 | 42 e5 cd e3 88 73 3e 5f d5 7d 36 9e 2e 83 8f af
0x30 | 47 43 55 7b 90 e5 3f 53 28 c2 42 e3 dc 64 5a 31
0x40 | 64 43 e3 65 32 26 39 c1 59 f2 c0 d1 e8 90 30 b4
0x50 | d6 d8 a6 a9 0a d4 95 a2 66 3a d6 72 ae 22 38 1c
0x60 | 07 b9 33 c2 73 cc 3a 0d 97 4a fe 58 24 cf 2c 0b
0x70 | f6 06 83 da 4a 63 62 e5 bf 47 c2 fa 23 ac 9a 5a
0x80 | b7 10 ca 5b 42 12 00 00 00 00 00 00 00 00 00 00
0x90 | 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00
0xa0 | 00 00 1c f6 74 e4 00 00 00 00 00 00 00 00 00 00
0xb0 | 00 00
1c f6 74 e4 чексумма?
28 5d dc af 7b 6a 8c 1e d7 30 39 aa 30
0x10 | f2 d7 b6 5f f6 f4 71 ee 71 28 5d a7 f5 81 fa d7
0x20 | 42 e5 cd e3 88 73 3e 5f d5 7d 36 9e 2e 83 8f af
0x30 | 47 43 55 7b 90 e5 3f 53 28 c2 42 e3 dc 64 5a 31
0x40 | 64 43 e3 65 32 26 39 c1 59 f2 c0 d1 e8 90 30 b4
0x50 | d6 d8 a6 a9 0a d4 95 a2 66 3a d6 72 ae 22 38 1c
0x60 | 07 b9 33 c2 73 cc 3a 0d 97 4a fe 58 24 cf 2c 0b
0x70 | f6 06 83 da 4a 63 62 e5 bf 47 c2 fa 23 ac 9a 5a
0x80 | b7 10 ca 5b 42 12 рса строка?
у меня получается другая

64 e2 7d 00 aa d9 b6 1e f0 e1 58 f0 17
0x10 | 4a b3 f2 3f 57 d4 1d f4 7e a4 79 c4 92 2a 82 3b
0x20 | a6 bb bc f9 86 ad 26 3c b6 51 11 05 07 fa db 6f
0x30 | 53 a2 4a c1 09 f2 38 94 5c 49 a7 a5 30 0e b7 7b
0x40 | e3 24 10 3d b4 89 35 2c a8 91 de 4f b5 23 c2 7c
0x50 | 30 c2 7d 4f c0 d2 67 d9 e1 6e a4 5d 42 36 5e 7f
0x60 | 94 1a 56 1e 40 cd de eb 4c 56 7b 96 e0 ac b0 13
0x70 | 86 7d 24 99 ca b0 68 93 38 09 99 c7 d8 14 22 ec
0x80 | f6 f8 b5 fe

xkor
16.01.2010, 04:45
procedure RSAkeyDecode(var raw);
var
ab: array[0..127] of Byte absolute raw;
i: Word;
b: Byte;
begin
for i:=0 to $3f do ab[$40+i]:=ab[$40+i] xor ab[i];
for i:=0 to $03 do ab[$0d+i]:=ab[$0d+i] xor ab[$34+i];
for i:=0 to $3f do ab[i]:=ab[i] xor ab[$40+i];
for i:=0 to $03 do begin
b:=ab[i];
ab[i]:=ab[$4d+i];
ab[$4d+i]:=b;
end;
end;

function RSAEncrypt_GMP(a, p: string; var rsakey): string;
var
sD:string;
m,d,r: mpz_t;
count: Integer;
begin
RSAkeyDecode(rsakey);
if length(a)>14 then setlength(a,14);
while length(a)<14 do a:=a+#0;
if length(p)>16 then setlength(p,16);
while length(p)<16 do p:=p+#0;
sD:=#$24#0#0+a+p+#0#0#0#0;
mpz_init(m);
mpz_import(m,128,1,1,0,0,rsakey);
mpz_init(d);
mpz_import(d,Length(sD),1,1,0,0,sD[1]);
mpz_init(r);
mpz_powm_ui(r,d,65537,m);
count:=32;
SetLength(Result,128);
mpz_export(Result[1],count,1,4,1,0,r);
mpz_clear(r);
mpz_clear(d);
mpz_clear(m);
end;

function RequestAuthLogin_c621(Login, Pasword: String; var rsakey; sessionID: Integer): string;
var
Packet: TPacket;
lpRSA: string;
sock, i: Integer;
strSizes: array[0..3] of Byte;
begin
lpRSA:=RSAEncrypt_GMP(Login,Pasword,rsakey);

with Packet do begin
InitWrite;
WriteB(0); // Packet ID
Write(lpRSA[1],128); // Login, Password
WriteD(sessionID); // sessionID
WriteD(0); WriteD(0); WriteD(0); WriteD(0);
WriteB(8);
WriteD(0); WriteD(0); WriteD(0); WriteD(0);
WriteD(0); WriteD(0); WriteH(0);
AddChecksum(data[3],160);
Result:=data;
end;
end;

finomen
16.01.2010, 21:50
чет не приходит ответа на RequestAuthLogin
вот лог пакетов
__________________________________________________ ____
0x00 | ba 00 00 a1 e4 15 00 21 c6 00 00 0f e5 ed 6e 4c
0x10 | 8e 84 70 53 7d 74 07 e5 8a 24 b9 19 b3 98 8a 13
0x20 | 8f 9f f0 c8 9e c5 84 b5 0e 29 61 cc 31 cb 07 a2
0x30 | 8e 97 3c 3f 69 74 2e 68 a4 3a eb 7a 25 66 e7 d8
0x40 | 23 fd dd fe cb 46 d6 93 99 37 29 d7 bc 2a b2 2a
0x50 | 8e 1f 08 e7 9e a7 be f5 33 83 91 c9 78 f8 e7 68
0x60 | 64 14 86 97 d2 93 c0 24 57 d4 4e 92 84 fa 7b 93
0x70 | 71 2f 46 df cf 7d d1 7d ff 67 8b c5 0c 1f 52 4a
0x80 | c1 a0 77 8a 28 81 f8 0b c5 48 f2 4e 95 dd 29 fc
0x90 | 9c c3 77 20 b6 ad 97 f7 e0 bd 07 60 03 b7 fd ac
0xa0 | 51 dc 50 30 3d 55 3f fb d9 96 30 00 00 00 00 00
0xb0 | 00 00 00 00 00 00 00 00 00 00
__________________________________________________ ____
0x00 | 2a 00 07 a1 e4 15 00 00 00 00 00 00 00 00 00 00
0x10 | 00 00 00 00 00 00 00 00 00 00 07 a1 e4 15 00 00
0x20 | 00 00 00 00 00 00 00 00 00 00
__________________________________________________ ____
0x00 | 22 00 0b a1 e4 15 00 00 00 00 00 00 00 00 00 00
0x10 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0b a1
0x20 | e4 15
__________________________________________________ ____
0x00 | b2 00 00 a5 94 11 6e 09 f3 e8 30 cd ec eb 66 5d
0x10 | 21 57 17 89 ea f0 89 59 2e 08 c6 24 af b6 f1 9a
0x20 | c1 62 78 e2 dc 66 91 c7 8e 28 5c f6 d4 b8 52 d8
0x30 | 31 54 0c 0c eb e4 77 fc b8 71 e4 18 e2 d3 89 ee
0x40 | 47 42 c6 9e cc a9 eb d6 39 0e 30 13 bf 9c f1 8b
0x50 | f4 0a bb 6b 27 20 08 1a 21 80 0f 60 86 23 f2 6c
0x60 | 64 50 de d6 19 79 89 a5 53 2b 63 60 e4 62 b0 60
0x70 | f2 4f 92 bf ba 9b 49 55 d5 6d f2 c6 38 a1 50 7d
0x80 | 4b 91 70 a1 e4 15 00 00 00 00 00 00 00 00 00 00
0x90 | 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00
0xa0 | 00 00 4f 79 bf 81 00 00 00 00 00 00 00 00 00 00
0xb0 | 00 00

finomen
17.01.2010, 21:04
соснифал пакеты логина, расшифровал. ересь какая-то
__________________________________________________ ____
0x00 | ba 00 00 c9 89 19 00 21 c6 00 00 3d 5a 71 c5 21
0x10 | ad a3 37 2e bd 95 e1 11 83 a9 7e 2e 33 39 93 94
0x20 | 9e 15 36 2b b3 15 d1 69 c6 61 f3 72 23 51 61 e5
0x30 | 02 1a 67 b8 cf a8 92 73 c1 19 31 f1 fd 2c f9 4b
0x40 | 20 0c 3d 20 cf 61 fd 36 56 39 de 70 fd c8 d1 c8
0x50 | b4 53 3c 3f 71 d7 a8 37 28 6f 60 c6 2a 2c bc 57
0x60 | fa f9 6d b8 67 fd d3 e7 f9 59 52 23 6f e3 76 bf
0x70 | e4 0b 85 9f 4b 1d 0f 8e 18 ea d1 0c ce 0b b9 57
0x80 | e9 d6 c9 9b 26 22 13 ea 3e 31 bd 4e 95 dd 29 fc
0x90 | 9c c3 77 20 b6 ad 97 f7 e0 bd 07 08 35 bd ee 4c
0xa0 | dd be 4b 46 db 43 cc b2 37 b2 fa 00 00 00 00 00
0xb0 | 00 00 00 00 00 00 00 00 00 00
__________________________________________________ ____
0x00 | 22 00 0b c9 89 19 00 00 00 00 00 00 00 00 00 00
0x10 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0b c9
0x20 | 89 19
__________________________________________________ ____
0x00 | e2 00 04 0a 01 32 55 11 df 8d 61 1e 00 00 00 01
0x10 | 00 00 88 13 01 00 00 00 00 00 01 5f d3 51 89 61
0x20 | 1e 00 00 00 01 00 00 88 13 01 00 00 00 00 00 02
0x30 | 5f d3 51 87 61 1e 00 00 00 01 00 00 88 13 01 00
0x40 | 00 00 00 00 03 5f d3 51 86 61 1e 00 00 00 01 00
0x50 | 00 88 13 01 00 00 00 00 00 04 5f d3 51 85 61 1e
0x60 | 00 00 00 01 00 00 88 13 01 00 00 00 00 00 05 5f
0x70 | d3 51 83 61 1e 00 00 00 01 00 00 88 13 01 00 00
0x80 | 00 00 00 06 5f d3 51 84 61 1e 00 00 00 01 00 00
0x90 | 88 13 01 00 00 00 00 00 1e bc 28 84 8c 61 1e 00
0xa0 | 00 00 01 00 00 88 13 01 00 00 00 00 00 28 5f d3
0xb0 | 51 8b 61 1e 00 00 00 01 00 00 88 13 01 00 00 00
0xc0 | 00 00 14 5f d3 51 8c 61 1e 00 00 00 01 00 00 88
0xd0 | 13 01 00 00 00 00 00 00 00 00 00 00 00 00 d5 73
0xe0 | 17 2e
__________________________________________________ ____
0x00 | 12 00 07 41 18 00 00 62 48 08 00 01 00 00 07 22
0x10 | 50 08
__________________________________________________ ____
0x00 | 77 00 d7 b3 73 82 51 23 3b 8c 69 87 e8 95 91 2f
0x10 | 58 a5 3b 16 68 50 5d b7 f2 ba 3b 16 68 50 5d b7
0x20 | f2 ba 3b 16 68 50 5d b7 f2 ba 3b 16 68 50 5d b7
0x30 | f2 ba 3b 16 68 50 5d b7 f2 ba 3b 16 68 50 5d b7
0x40 | f2 ba 3b 16 68 50 5d b7 f2 ba 3b 16 68 50 5d b7
0x50 | f2 ba 3b 16 68 50 5d b7 f2 ba 98 7c 22 f1 39 35
0x60 | 3e 8a 2d a8 ff ff 00 33 23 6b 55 f2 b5 ce b9 70
0x70 | 3e a4 20 30 30 20 36

__________________________________________________ ____
0x00 | ba 00 00 15 aa 19 00 21 c6 00 00 2a 71 22 03 39
0x10 | fa 8b 27 c4 c6 20 b3 c5 04 90 76 12 2a d4 b4 1e
0x20 | 34 85 b9 5f 6c d4 1f 2d 01 39 63 cd c2 29 9d ff
0x30 | ee ed 0e 68 55 61 da 5d 61 2f 3a e8 f6 11 71 37
0x40 | 51 d8 38 39 98 bd c7 f7 d8 be 3b 5e 90 31 05 56
0x50 | 8c ba 22 58 79 38 95 a3 b2 99 d7 67 6f 9b 7a 9d
0x60 | ff af 38 13 f9 6c fa b9 33 e0 7f ce 6e 4f 6c a1
0x70 | 8f bf 1b f8 2d c7 9d 19 95 ff 7d ac 3a 20 03 80
0x80 | 60 47 eb aa 61 82 d5 1c 04 99 58 4e 95 dd 29 fc
0x90 | 9c c3 77 20 b6 ad 97 f7 e0 bd 07 2e 46 3a bd ea
0xa0 | ba e0 87 58 a1 2d 0f 36 cb ef 8a 00 00 00 00 00
0xb0 | 00 00 00 00 00 00 00 00 00 00
__________________________________________________ ____
0x00 | 22 00 0b 15 aa 19 00 00 00 00 00 00 00 00 00 00
0x10 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0b 15
0x20 | aa 19
__________________________________________________ ____
0x00 | e2 00 04 0a 01 32 55 11 df 8d 61 1e 00 00 00 01
0x10 | 00 00 88 13 01 00 00 00 00 00 01 5f d3 51 89 61
0x20 | 1e 00 00 00 01 00 00 88 13 01 00 00 00 00 00 02
0x30 | 5f d3 51 87 61 1e 00 00 00 01 00 00 88 13 01 00
0x40 | 00 00 00 00 03 5f d3 51 86 61 1e 00 00 00 01 00
0x50 | 00 88 13 01 00 00 00 00 00 04 5f d3 51 85 61 1e
0x60 | 00 00 00 01 00 00 88 13 01 00 00 00 00 00 05 5f
0x70 | d3 51 83 61 1e 00 00 00 01 00 00 88 13 01 00 00
0x80 | 00 00 00 06 5f d3 51 84 61 1e 00 00 00 01 00 00
0x90 | 88 13 01 00 00 00 00 00 1e bc 28 84 8c 61 1e 00
0xa0 | 00 00 01 00 00 88 13 01 00 00 00 00 00 28 5f d3
0xb0 | 51 8b 61 1e 00 00 00 01 00 00 88 13 01 00 00 00
0xc0 | 00 00 14 5f d3 51 8c 61 1e 00 00 00 01 00 00 88
0xd0 | 13 01 00 00 00 00 00 00 00 00 00 00 00 00 d5 73
0xe0 | 17 2e
__________________________________________________ ____
0x00 | 12 00 07 60 1b 00 00 62 48 08 00 01 00 00 07 03
0x10 | 53 08
__________________________________________________ ____
0x00 | 88 00 f1 d8 06 f6 14 d6 f5 f2 67 3e 35 ff 49 af
0x10 | 30 63 ff 2d 75 f4 1b b2 56 1e ff 2d 75 f4 1b b2
0x20 | 56 1e ff 2d 75 f4 1b b2 56 1e ff 2d 75 f4 1b b2
0x30 | 56 1e ff 2d 75 f4 1b b2 56 1e ff 2d 75 f4 1b b2
0x40 | 56 1e ff 2d 75 f4 1b b2 56 1e ff 2d 75 f4 1b b2
0x50 | 56 1e ff 2d 75 f4 1b b2 56 1e ac 99 53 83 42 3c
0x60 | d6 f7 49 36 90 5a dd 5c 2d cf 6e 6d 1b d5 34 03
0x70 | e2 3b 1a e0 6b a8 0a 6b a5 72 ce 61 43 cf 79 aa
0x80 | 64 72 34 45 20 32 34 20

собственно вопрос: id RequestAuthLogin 0x04 ? и то что в нем как-то слабо похоже на RSA строку. очень много нулей.

xkor
18.01.2010, 00:07
finomen, тыб хоть помечал какнить где у тебя входящие а где исходящие.., а то нихрена не понятно...

что тебе не нравиться в выделенном красном куске?, это пакет со списком серверов, и он вообще от сервера пришел, ты походу сам не знаешь что у тебя откуда пришло...

finomen
18.01.2010, 00:19
хм. получается снифер замылил кудато пакет авторизации вместе с ответом. буду думать.

с направлением проблема-снифак все в кучу сваливает. попробую другим.

xkor
18.01.2010, 01:02
finomen, стоп, а чем и что ты снифаешь?

finomen
19.01.2010, 00:55
Smart Sniff , сдампил Stream c адресом 95.211.81.129:2106

Добавлено через 12 часов 19 минут
ура. оно работет.

finomen
22.01.2010, 21:12
хм. А какой формат пакета RequestServerLogin на шоке?у меня нет SessionKey...

xkor
22.01.2010, 21:17
finomen, хз о чем ты...

finomen
22.01.2010, 22:14
авторизация на шоке странная какая-то
>>Init
<<RequestGGAuth
>>GGAuth
<<RequestAuthLogin
>>ServerList //WTF?
<<что вот тут отправить?

alexteam
22.01.2010, 22:58
selectserver ?

xkor
22.01.2010, 23:36
finomen, и чего тут странного, по моему нормальная авторизация...

alexteam
23.01.2010, 00:02
ну, если тебе шлют список серверов.. то он отобразиться в клиенте ? правильно ? ну. и следующим пакетом от клиента логично будет выбор сервера...
на шоке все через опу -)

finomen
23.01.2010, 01:25
пропущен ответ на RequestAuthLogin, в котором должен быть SessionKey1, который надо отправить в пакете RequestServerLogin. и RequestServerList я не посылал серверу.

1. Сразу после установки соединения сервер отправляет клиенту пакет Init
2. В ответ на него клиент отправляет пакет RequestGGAuth(в ревизии протокола 785a этот пакет не высылается)
3. Сервер отвечает на него пакетом GGAuth (в ревизии протокола 785a этот пакет не высылается)
4. Если сервер ответил, что авторизация прошла успешно, то клиент высылает пакет RequestAuthLogin, содержащий логин и пароль.
5. Проверка логина и пароля, в случае неудачи, сервер высылает пакет LoginFail содержащий причину неудачи, инатче высылается пакет LoginOk, содержащий
session key #1.
6. Далее клиент запрашивает список серверов пакетом RequestServerList
7. В ответ на этот пакет сервер высылает клиенту ServerList, в нем содержиться список серверов и их IP адреса с номерами портов.
8. После выбора game-сервера, и нажатия на ОК, клиент отсылает пакет RequestServerLogin
9. Сервер авторизации выполняет проверки на максимальное количество игроков, доступность сервера и т.п., если все проверки пройдены, то высылает пакет
PlayOk,содержащий session key #2, этот ключь генерируется из текущего времени системы в мс, номера сокета и еще всякой лабуды. После этого клиент
отключается от логин сервера и подключается к гейм серверу.

Добавлено через 1 час 8 минут
CS 34
__________________________________________________ ____
0x00 | 22 00 02 00 00 00 00 01 01 01 01 03 00 00 00 00
0x10 | 00 00 03 02 01 01 00 00 00 00 00 00 00 00 00 00
0x20 | 00 00
00 00 00 00 здесь должна быть первая чатсть ключа
01 01 01 01 здесь вторая....
03 это ид сервера
03 02 01 01 чексумма

ключ константа? это ж хрень какаято

alexteam
23.01.2010, 11:33
а разве на шоках не хрень с выбором сервера и логином вообще ?
там у них сначала идет выбор сервера а потом собственно логин

finomen
23.01.2010, 11:38
угу. вот я и хочу понять что это за хрень

alexteam
23.01.2010, 11:42
а что не понятного ? %)

finomen
23.01.2010, 11:58
хм..ну исходя из перехваченных пакетов
>>Init
<<RequestGGAuth
>>GGAuth
<<RequestAuthLogin
>>ServerList //WTF?
<<RequestServerLogin
формат последнего пакета непонятен

RequestServerLogin
Назначение: запрашивает подключение к гейм серверу
Формат:
02
XX XX XX XX // SessionKey1 первая часть
XX XX XX XX // SessionKey1 вторая часть
XX // номер сервера

где я возьму SessionKey?

Добавлено через 7 минут
хм...он и действительно константа.....

xkor
23.01.2010, 15:49
finomen, ну блин подумаешь переставили порядок пакетов, это даже валкера не смущает...

finomen
23.01.2010, 16:31
да нет, не переставили. они LoginOK пропустили
Формат:
03
XX XX XX XX // SessionKey1 первая часть
XX XX XX XX // SessionKey1 вторая часть
00 00 00 00
00 00 00 00
EA 03 00 00
00 00 00 00
00 00 00 00
02 00 00 00
XX XX XX XX ... // массив из 16 байт, назначение неизвестно

alexteam
23.01.2010, 16:46
/me застелилсо

xkor
23.01.2010, 16:51
finomen, а ты дальше поснифай, LoginOK приходит перед PlayOk)

finomen
23.01.2010, 16:56
хм. а почему мне не приходит?
ЗЫ я ужо не снифаю....я ужо прошел авторизацию. но LoginOk так и не поймал

xkor
23.01.2010, 19:46
finomen, хм, ну может уже и не приходит, раньше приходил), ны смысла в нем особого никогда не было)

finomen
23.01.2010, 21:15
теоретически в нем должен быть LoginKey, вместо которого на шоке нули

Yegor
23.01.2010, 21:19
На шоке сокращено количество пакетов при конекте к ЛС до минимума.

finomen
23.01.2010, 22:36
эт я понял...терь я мучаюсь с гейм сервером. а йменно с шифрацией.
так шифрую
void World::Encrypt(char *data,int sz)
{
data[0]=data[0]^xoro[0];
for(int i=1;i<sz;i++)
data[i]=data[i]^xoro[i%16]^data[i-1];
*((long long *)xoro)+=sz;

}
так получаю ключ из первого пакета от ГС (в ПХ он назван KeyPacket)
void World::PDCryptInit(char *data)
{
memcpy(xori,data+4,16);
memcpy(xoro,data+4,16);
// SPProtocolVersion();
crypt=1;
SPAuthLogin();
}
в результате первые 8 байт правильно закодированы, следующие 8 полное гонево, потом опять 8 правильно. что я делаю не так? да, смущает вторая часть XOR ключа, там почти все нули

Yegor
23.01.2010, 23:56
finomen, посмотри в исходниках пакетхака, там все это есть.

finomen
24.01.2010, 00:14
ну энкрипт я оттуда и переписал.

Добавлено через 11 минут
мда. придется по исходникам ПХ делать все...ибо http://fursoffers.narod.ru/Packets.htm#ServerList не имеет ничего общего с реальностью

xkor
24.01.2010, 01:57
finomen, из пакета берётся только первые 8 байт, остальные 8 константа...

finomen
24.01.2010, 14:55
хм. а существует описание пакетов грации? кроме как ини файл от пакетхака...

alexteam
24.01.2010, 15:02
http://my-trac.assembla.com/l2open-free/browser/trunk/Game/src/main/java/com/l2open/gameserver/network/serverpackets

finomen
24.01.2010, 17:38
фух, скурил. оставил тестового чара в гиране....и офигел от числа пакетов после отправки EnterWorld....

Yegor
24.01.2010, 17:50
finomen, а ты думал

finomen
24.01.2010, 17:54
дебажить это будет весело...

Yegor
24.01.2010, 18:05
finomen, тебе из этих пакетов нужна будет только третяя часть, а что ты вообще решил сделпть?

finomen
24.01.2010, 19:23
аутгейм бот

Добавлено через 1 час 7 минут
я все понимаю,но в пакете ItemList ПХ кажет фигню.
4194305 коротких мечей это перебор

NLObP
24.01.2010, 19:30
я все понимаю,но в пакете ItemList ПХ кажет фигню.
4194305 коротких мечей это перебор

Файл packets*.ini в настройках правильно выбран?

finomen
24.01.2010, 19:58
хм.. убил соединение, подключился еще раз-все нормально.

Добавлено через 6 минут
ан нет, не все....только первый итем. пробовал и Т1 и Т2

Добавлено через 7 минут
последний d(?) в повторяющемся блоке вно лишний. все стало норм.

Jetty
16.02.2010, 23:19
Бродил, наткнулся.
Мб кто-то будет искать, найдет:
/*=============== RequestAuthLogin (RSA) ===============*/
unsigned char l_reqauthlogin[]=
"\xb2\x00" // Size
"\x00" // RequestAuthLogin (RSA) packet
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x20"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00" // GGAuthResponse from GGAuth packet
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00" //CRC
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
pktsize = (unsigned char)(l_reqauthlogin[1]*256+l_reqauthlogin[0]);
print_packet(l_reqauthlogin, pktsize, WITH_SIZE);
memcpy((l_reqauthlogin+2+1+96+2), login, sizeof(login));
memcpy((l_reqauthlogin+2+1+112), pwd, sizeof(pwd));
RSA * rsa_key;
rsa_key = RSA_new();
BIGNUM * bn_mod;
BIGNUM * bn_exp;
bn_mod = BN_new();
bn_exp = BN_new();
bn_mod = BN_bin2bn(RSA_key, sizeof(RSA_key), NULL);
BN_dec2bn(&bn_exp, "65537");
rsa_key->n = bn_mod;
rsa_key->e = bn_exp;
result = RSA_public_encrypt (128, (l_reqauthlogin+3), (l_reqauthlogin+3), rsa_key, RSA_NO_PADDING);
if (!result) {
printf("Error: %i %u\n", result, ERR_get_error());
}

Код написан на С, пригоден для С++, расчитан на библиотечные функции openssl (в Linux он всегда есть 8] ). Переменная RSA_key не что иное как unsigned char * RSA_key[128]; :) РСА ключ(точнее модуль) из первого пакета(unscrambleный ).

Код оказался не совсем стабильным, ищу баги ТТ
Ниже правильный код

Добавлено через 2 часа 2 минуты
Кстати а RSA модуль из первого пакета надо переворачивать ?
И если да то на каком этапе ?)

xkor
17.02.2010, 00:34
Кстати а RSA модуль из первого пакета надо переворачивать ?
И если да то на каком этапе ?)не надо его никуда переворачивать, первый байт - старший байт

Jetty
17.02.2010, 01:10
не надо его никуда переворачивать, первый байт - старший байт

Вроде получилось, не крешится криптование... Осталось одно НО... у меня каждый раз получается разных 128 байт, несмотря на то что сервер мне отдает один и тот же публичный РСА ключ... Это нормально ?

Стабильный код :)
/*=============== RequestAuthLogin (RSA) ===============*/
unsigned char l_reqauthlogin[]=
"\xb2\x00" // Size
"\x00" // RequestAuthLogin (RSA) packet
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x20"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x00\x00\x00\x00" // GGAuthResponse from GGAuth packet
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00\x00"
"\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00" //CRC
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
pktsize = (unsigned char)(l_reqauthlogin[1]*256+l_reqauthlogin[0]);
memcpy((l_reqauthlogin+2+1+96+2), login, sizeof(login));
memcpy((l_reqauthlogin+2+1+112), pwd, sizeof(pwd));
RSA * rsa_key;
rsa_key = RSA_new();
BIGNUM * bn_mod;
bn_mod = BN_new();
bn_mod = BN_bin2bn(RSA_key, sizeof(RSA_key), NULL);
rsa_key->n = bn_mod;
rsa_key = RSA_generate_key(1024, 65537, NULL, NULL);
result = RSA_public_encrypt (128, (l_reqauthlogin+3), (l_reqauthlogin+3), rsa_key, RSA_NO_PADDING);
if (result <= 0) {
printf("Error: %i %s\n", result, ERR_error_string(ERR_get_error(), NULL));
}
RSA_free(rsa_key);

Jetty
17.02.2010, 04:46
Вообщем что-то не то у меня с РСА :(

Вот дебаг работы:
Recieved Init from LS: size 186
Init packet:
Size | ba 00
Type | 00
Sess ID | 6f e7 2b 7f
Proto | 00 00 c6 21
RSA Data | c0 67 98 42 ed b2 3e db bf 87 1e 05 a1 00 6f 14
RSA Data | a1 eb ca a6 9a aa a3 ae 3a 95 9b 96 cd 31 f9 f1
RSA Data | 3c f4 b6 75 e9 f1 86 c2 1a ac 5e 64 3c d6 2f bd
RSA Data | 93 61 ec ef a5 90 64 27 14 b5 3a e3 b8 aa 4f ed
RSA Data | 02 db 8f e1 26 00 a5 ae 95 e3 5c 54 2c a6 f4 66
RSA Data | f1 30 be 41 d6 d5 bb c7 ae 0d 1b 0f 13 b2 e4 df
RSA Data | 47 5f 77 34 82 6e 03 14 79 5d 3b 59 01 46 ba cf
RSA Data | 3f de 25 66 88 fb 4e 6f 00 a2 27 a4 e9 a8 90 f8
GG vals | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
BF key | 6b 60 cb 5b 82 ce 90 b1 cc 2b 6c 55 6c 6c 6c 6c
Unknown | 00 00 00 00 00 00 00 eb d0 ba bd eb d0 ba bd
Sent RequestGGAuth to LS: size 42
Recieved GGAuth(auth skipped) from LS: size 34
*GGAuthResponse is 6f e7 2b 7f
Filled RequestAuthLogin packet:
__________________________________________________ ____
0x00 | b2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x30 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x50 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x60 | 00 00 20 00 00 62 72 61 69 6e 00 00 00 00 00 00
0x70 | 00 00 00 31 32 33 34 35 36 00 00 00 00 00 00 00
0x80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x90 | 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00
0xa0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xb0 | 00 00
*RSA_size is 128
*Crypted 128 bytes
Ready (not blowfished yet) RequestAuthLogin packet:
__________________________________________________ ____
0x00 | b2 00 00 37 33 c2 f2 77 96 02 67 d4 12 6d 22 1a
0x10 | f1 be a6 67 2b 8d 3d d9 a1 e4 2c 10 1d cc fc 41
0x20 | c3 f4 42 9e 1d 29 e1 cb 7e 0c 64 7e 9f a7 0c 3f
0x30 | af 98 79 34 7f 20 75 53 23 75 81 4b 8a 6a 83 f8
0x40 | 2c 8e 47 06 62 3a 65 33 dc ec b8 3a 60 b1 e2 7f
0x50 | 5c 58 77 4a ba a0 6b d5 68 eb ba 82 7c b5 33 8a
0x60 | 07 67 b1 b3 c9 59 1b a8 67 12 fb cf 31 8f 78 19
0x70 | 5c f4 ff 6b b5 b4 31 85 99 d5 54 a0 cf 9d 47 1c
0x80 | 27 20 51 6f e7 2b 7f 00 00 00 00 00 00 00 00 00
0x90 | 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00
0xa0 | 00 00 0e be 70 88 00 00 00 00 00 00 00 00 00 00
0xb0 | 00 00
Recieved LoginFail from LS: size 18
__________________________________________________ ____
0x00 | 12 00 01 03 00 00 00 00 00 00 00 01 03 00 00 00
0x10 | 00 00
Hit ENTER to exit...


Ну и пример такого же сдампленного с клиента пакета (RequestAuthLogin в смысле):
0x00 | b2 00 00 74 f2 83 fa f6 19 be 45 6b b9 95 5b d4
0x10 | 11 9e 49 81 49 1b 57 16 ec bd 38 73 37 81 c1 6c
0x20 | 53 0d 48 61 d6 ad 22 3d 34 cc 17 62 e4 08 a2 37
0x30 | 6a 6c d2 21 11 72 3e 0c 9c 22 c9 01 a9 9c dd 68
0x40 | 40 b8 1e 13 7d 22 60 5b 40 f2 10 a4 42 07 00 e9
0x50 | a0 b3 3e 28 f6 23 cf ea 46 6a f5 87 5b 90 8e 3c
0x60 | 19 d3 fa 36 c4 d3 b3 09 6d 1a 29 30 57 51 60 a8
0x70 | f0 9e f1 e4 fb 60 7a 8d 31 bd 86 62 23 0c 7d 1a
0x80 | a9 91 a7 0b f2 b7 d8 00 00 00 00 00 00 00 00 00
0x90 | 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00
0xa0 | 00 00 cf 31 1b f2 00 00 00 00 00 00 00 00 00 00
0xb0 | 00 00

Проследив работу клиента, заметил что криптованая часть не изменяется.
Непойму куда копать в плане шифрования....(код шифрования по РСА выложил выше)

xkor
17.02.2010, 10:22
Непойму куда копатьв сторону форт нокса...

Jetty
19.02.2010, 10:27
Подскажите как шифруются пакеты ГеймСервера посля получения KeyInit...
А то где-то встречаю что ксор, гдето что ксор+блоуфиш....

xkor
19.02.2010, 21:45
ксор+блоуфишэто только на логин сервере и только в первом пакете от сервера...
на гейм сервере только ксор

Jetty
19.02.2010, 22:33
это только на логин сервере и только в первом пакете от сервера...
на гейм сервере только ксор
Тогда еще вопрос. Я отправляю протовершн - понятно дело нешифрованым, мне в ответ прилетает кейинит, он шифрован ?
Я так понимаю что на типичных фришках(гвардовские которые) щас используется 16-ти байтный XOR ключ. В начале ключ для исходящих пакетов такой же как и для входящих. Далее ключ для шифрования исходящих пакетов увеличивается на сумму пакета, причем сумма прибавляется в младшим 8 байтам только. Входящий ключ не изменяется это верно ?

xkor
19.02.2010, 22:50
Jetty, алгоритм изменения ключа одинаков и для входящих и для исходящих, если бы ключ приходил в зашифрованном пакете как бы его клиент извлекал?)

Jetty
22.02.2010, 04:34
Не подскажите ли как правильно ксорить пакеты ? :)
Тут вот у меня получилось так: берем Нный байт пакета, ксорим его с (Н & 15)ным байтом ключа, и потом ксорим с предидущим отксореным значением.
Т.е. получается что-то типа
result = data[i] xor key[i & 15] xor data[i-1];
но чето нексорит правильно :) В смысле сервер матюжицо в ответ )

xkor
22.02.2010, 05:10
Дешифровка:
for k:=size-1 downto 1 do pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1];
pck[0]:=pck[0] xor GKeyR[0];
Inc(PCardinal(@GKeyR[keyLen-7])^,size);

Шифровка:
pck[0]:=pck[0] xor GKeyS[0];
for i:=1 to size-1 do pck[i]:=pck[i] xor GKeyS[i and keyLen] xor pck[i-1];
Inc(PCardinal(@GKeyS[keyLen-7])^,size);

ЗЫ keyLen для интерлюда и дальше равен 15

Jetty
22.02.2010, 18:05
ну у меня приблизительно так и есть...
ключ "f6 81 df 60 ae 40 5f 0f c8279301a16c3197"
Вторую часть спырил из исходников пакетхака :)
имею исходный пакет

0x00 | 23 00 2b 62 00 72 00 61 00 69 00 6e 00 00 00 00
0x10 | 00 00 eb 7d 36 eb 84 c6 81 01 00 11 1d 40 84 01
0x20 | 00 00 00

Соответственно шифруется в

0x00 | 23 00 e3 a6 35 46 e7 ea db 25 58 d1 a9 68 18 2c
0x10 | a1 e2 c1 9b 3e d4 f1 5b eb 7d 00 f6 93 12 e6 d3
0x20 | 5e 1d d5
В ответ получаю какуюто странность в виде

0x00 | 03 00 bb


При этом пакетхак нормально видит пакет(это я к тому что механизм шифрования тот же).....

xkor
22.02.2010, 19:07
Jetty, ну значит серверу не шифрование а содержимое пакета не нравиться)

Jetty
23.02.2010, 05:53
Я правильно понимаю что из пакета KeyInit
14 00
2E
01
2A 09 AC 31 E1 D8 21 19
01 00 00 00 01 00 00 00
Получится ключ
2A 09 AC 31 E1 D8 21 19 c8 27 93 01 a1 6c 31 97
????

Добавлено через 9 часов 39 минут
Победила дружба и чистка кода :)
-пару течек памяти и все нормально :)

xkor
23.02.2010, 15:43
хех, утечки эт не хорошо)

Jetty
25.02.2010, 19:24
Кто может подсказать как изменяется ключ в битовом представлении...
А то что-то я не пойму как его инкриментить правильно
Вот жил был у меня ключ : 765fb7cd49e51e7fc8279301a16c3197
Решил я отправить 35 байт, зашифровал, отправил, изменил ключ на 35 и стал он 765fb7cd49e51e7fc8279301a16c31ba
зашифровал этим ключем второй пакет - серер ответил
"05 00 05 5b ec" - я так понимаю шифрование корявое....

подскажите че я делаю не так :)

xkor
25.02.2010, 22:01
Jetty, а нафига ты последний байт увеличиваешь?, меняться должны байты с 8го по 12й (при нумерации с нуля), то есть эти 4 байта это целое число которое и надо увеличивать на размер пакета...

Jetty
25.02.2010, 22:24
Ага, тоесть получается что ключ состоит из 2-ух 64-битных интов и они записаны наоборот, верно ?

И еще не совсем понятно к каому числу прибавлять
вот для примера ключ 765fb7cd49e51e7f c8279301a16c31ba
35(размер пакета) надо прибавить к
1) c8 27 93 01
или
2) 01 93 27 с8

xkor
25.02.2010, 23:53
Jetty, к 0x19327с8 ибо в х86 процессорах принят обратный порядок байт...
ЗЫ а вот насчет 64битное число или 32битное сказать сложно ибо для этого надо либо клиент реверсить, либо пронаблюдать как у ключа переполниться 32битное число и смотреть увеличиться ли при этом 13й байт...

Jetty
26.02.2010, 21:10
Что-то не так )))
сумирую шифрую второй пакет, отправляю и ничего, в ответ
05 00 6c 48 e8

Мб есть какие-то особенности?
Ибо пакетхак без проблем разшифровывает траф...

Добавлено через 5 минут
Что-то не так )))
сумирую шифрую второй пакет, отправляю и ничего, в ответ
05 00 6c 48 e8

Мб есть какие-то особенности?
Ибо пакетхак без проблем разшифровывает траф...

xkor
26.02.2010, 23:24
Jetty, если с шифрацией всё ок то может сам пакет не верный?)

Jetty
27.02.2010, 02:43
ну пакеты я составляю просмотрев пакетхаком предварительно перехваченый от клиента пакет...
хзхз... щас перепроверю :)