Просмотр полной версии : И опять Init (авторизация)
В поиск прошу не посылать, перечитал уже кучу веток.
итак, правильно ли расшифровываеться пакет (от шока)?
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;
}
finomen, у тебя по BF неверно дешифруется, если я правильно понял код то ты по BF дешифруешь блоками по 4 байта, в то время как BF работает с блоками в 8 байт...
спасибо, просто наткнулся на статью где написано что блоками по 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 байта - размер пакета... не шифруется.. как бы...
186 это без 2 байт, если я правильно понял...это собственно то что прочитано из этих 2 байт
а вот последние 2 байта нули...всегда причем.
alexteam
12.01.2010, 13:05
finomen, думаю.. не осилишь...
ибо "ba 00" = 186...
а длина пакета без первых двух байтов длинны = 184.. что прекрасно разбивается на блоки по 8 байт...
alexteam, думаешь он в курсе что эти два байта содержат размер всего пакета а не только той части что за ними?)
Добавлено через 1 минуту
finomen, короч уменьши размер пакета на два и будет тебе счастье)
спасибо. получилось. я не думал что нулями пакет дополнят после шифрования...
finomen, эм, а где пакет дополнен нулями после шифрования? оО
ну последние 2 байта пакета инит это 00 00. и их не достает ни ксор, ни блоуфиш.
alexteam
12.01.2010, 14:09
немая сцена....
finomen, да нет мля этих двух нулевых байт!, они тебе мерещатся!!!
размер пакета 186 байт, 2 байта это размер, остаётся 184 байта которые замечательно делятся на 8 = 23...
бывает... и если по теме приму в дар квартиру на против КП само собой в Москве, в Кремле не предлагать устарело да занято!
источник нулей нашел. ошибка моей старой программы.
теперь другой вопрос: 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
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"
и ты уверен что у тебя переинициализация ключа происходит нормально?
ЗЫ ксор точно только в первом пакете, по крайней мере на оффах так...
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 байт это какой-то странный ключ.
да, это пакеты шока. а если быть точным-конкретно этот послан корректором.
finomen, ну корректор посылает RequestGGAuth так:
fCryptSrv.InitKey(srvReadBuf.ch[$9b],StrLen(PChar(@srvReadBuf.ch[$9b])));
SendToServer(RequestGGAuth_c621(sessionID));
то есть ключик как раз будет 27 байт ибо 0 после 27го байта)
и всё таки, ты уверен что у тебя переинициализация ключа происходит нормально? то есть перед инициализацией ключа массивы заполняются начальными значениями?
Добавлено через 4 минуты
а у тебя BF от openssl, там по идее всё правильно должно быть, но лучше покажи как ты ключ новый задаёшь
задаю так
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);
finomen, размер ключа не фиксированно равен 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
так и должно быть? ид пакета, ид сессии, нули....опять ид пакета, ид сессии, нули....
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 минуты
тфу блин, она там и есть, всё правильно)
что ж такое....гденить есть описание протокола грации? 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
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;
чет не приходит ответа на 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
соснифал пакеты логина, расшифровал. ересь какая-то
__________________________________________________ ____
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 строку. очень много нулей.
finomen, тыб хоть помечал какнить где у тебя входящие а где исходящие.., а то нихрена не понятно...
что тебе не нравиться в выделенном красном куске?, это пакет со списком серверов, и он вообще от сервера пришел, ты походу сам не знаешь что у тебя откуда пришло...
хм. получается снифер замылил кудато пакет авторизации вместе с ответом. буду думать.
с направлением проблема-снифак все в кучу сваливает. попробую другим.
finomen, стоп, а чем и что ты снифаешь?
Smart Sniff , сдампил Stream c адресом 95.211.81.129:2106
Добавлено через 12 часов 19 минут
ура. оно работет.
хм. А какой формат пакета RequestServerLogin на шоке?у меня нет SessionKey...
авторизация на шоке странная какая-то
>>Init
<<RequestGGAuth
>>GGAuth
<<RequestAuthLogin
>>ServerList //WTF?
<<что вот тут отправить?
alexteam
22.01.2010, 22:58
selectserver ?
finomen, и чего тут странного, по моему нормальная авторизация...
alexteam
23.01.2010, 00:02
ну, если тебе шлют список серверов.. то он отобразиться в клиенте ? правильно ? ну. и следующим пакетом от клиента логично будет выбор сервера...
на шоке все через опу -)
пропущен ответ на 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
а разве на шоках не хрень с выбором сервера и логином вообще ?
там у них сначала идет выбор сервера а потом собственно логин
угу. вот я и хочу понять что это за хрень
alexteam
23.01.2010, 11:42
а что не понятного ? %)
хм..ну исходя из перехваченных пакетов
>>Init
<<RequestGGAuth
>>GGAuth
<<RequestAuthLogin
>>ServerList //WTF?
<<RequestServerLogin
формат последнего пакета непонятен
RequestServerLogin
Назначение: запрашивает подключение к гейм серверу
Формат:
02
XX XX XX XX // SessionKey1 первая часть
XX XX XX XX // SessionKey1 вторая часть
XX // номер сервера
где я возьму SessionKey?
Добавлено через 7 минут
хм...он и действительно константа.....
finomen, ну блин подумаешь переставили порядок пакетов, это даже валкера не смущает...
да нет, не переставили. они 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 застелилсо
finomen, а ты дальше поснифай, LoginOK приходит перед PlayOk)
хм. а почему мне не приходит?
ЗЫ я ужо не снифаю....я ужо прошел авторизацию. но LoginOk так и не поймал
finomen, хм, ну может уже и не приходит, раньше приходил), ны смысла в нем особого никогда не было)
теоретически в нем должен быть LoginKey, вместо которого на шоке нули
На шоке сокращено количество пакетов при конекте к ЛС до минимума.
эт я понял...терь я мучаюсь с гейм сервером. а йменно с шифрацией.
так шифрую
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 ключа, там почти все нули
finomen, посмотри в исходниках пакетхака, там все это есть.
ну энкрипт я оттуда и переписал.
Добавлено через 11 минут
мда. придется по исходникам ПХ делать все...ибо http://fursoffers.narod.ru/Packets.htm#ServerList не имеет ничего общего с реальностью
finomen, из пакета берётся только первые 8 байт, остальные 8 константа...
хм. а существует описание пакетов грации? кроме как ини файл от пакетхака...
alexteam
24.01.2010, 15:02
http://my-trac.assembla.com/l2open-free/browser/trunk/Game/src/main/java/com/l2open/gameserver/network/serverpackets
фух, скурил. оставил тестового чара в гиране....и офигел от числа пакетов после отправки EnterWorld....
дебажить это будет весело...
finomen, тебе из этих пакетов нужна будет только третяя часть, а что ты вообще решил сделпть?
аутгейм бот
Добавлено через 1 час 7 минут
я все понимаю,но в пакете ItemList ПХ кажет фигню.
4194305 коротких мечей это перебор
я все понимаю,но в пакете ItemList ПХ кажет фигню.
4194305 коротких мечей это перебор
Файл packets*.ini в настройках правильно выбран?
хм.. убил соединение, подключился еще раз-все нормально.
Добавлено через 6 минут
ан нет, не все....только первый итем. пробовал и Т1 и Т2
Добавлено через 7 минут
последний d(?) в повторяющемся блоке вно лишний. все стало норм.
Бродил, наткнулся.
Мб кто-то будет искать, найдет:
/*=============== 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 модуль из первого пакета надо переворачивать ?
И если да то на каком этапе ?)
Кстати а RSA модуль из первого пакета надо переворачивать ?
И если да то на каком этапе ?)не надо его никуда переворачивать, первый байт - старший байт
не надо его никуда переворачивать, первый байт - старший байт
Вроде получилось, не крешится криптование... Осталось одно НО... у меня каждый раз получается разных 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);
Вообщем что-то не то у меня с РСА :(
Вот дебаг работы:
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
Проследив работу клиента, заметил что криптованая часть не изменяется.
Непойму куда копать в плане шифрования....(код шифрования по РСА выложил выше)
Непойму куда копатьв сторону форт нокса...
Подскажите как шифруются пакеты ГеймСервера посля получения KeyInit...
А то где-то встречаю что ксор, гдето что ксор+блоуфиш....
ксор+блоуфишэто только на логин сервере и только в первом пакете от сервера...
на гейм сервере только ксор
это только на логин сервере и только в первом пакете от сервера...
на гейм сервере только ксор
Тогда еще вопрос. Я отправляю протовершн - понятно дело нешифрованым, мне в ответ прилетает кейинит, он шифрован ?
Я так понимаю что на типичных фришках(гвардовские которые) щас используется 16-ти байтный XOR ключ. В начале ключ для исходящих пакетов такой же как и для входящих. Далее ключ для шифрования исходящих пакетов увеличивается на сумму пакета, причем сумма прибавляется в младшим 8 байтам только. Входящий ключ не изменяется это верно ?
Jetty, алгоритм изменения ключа одинаков и для входящих и для исходящих, если бы ключ приходил в зашифрованном пакете как бы его клиент извлекал?)
Не подскажите ли как правильно ксорить пакеты ? :)
Тут вот у меня получилось так: берем Нный байт пакета, ксорим его с (Н & 15)ным байтом ключа, и потом ксорим с предидущим отксореным значением.
Т.е. получается что-то типа
result = data[i] xor key[i & 15] xor data[i-1];
но чето нексорит правильно :) В смысле сервер матюжицо в ответ )
Дешифровка:
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
ну у меня приблизительно так и есть...
ключ "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
При этом пакетхак нормально видит пакет(это я к тому что механизм шифрования тот же).....
Jetty, ну значит серверу не шифрование а содержимое пакета не нравиться)
Я правильно понимаю что из пакета 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 минут
Победила дружба и чистка кода :)
-пару течек памяти и все нормально :)
хех, утечки эт не хорошо)
Кто может подсказать как изменяется ключ в битовом представлении...
А то что-то я не пойму как его инкриментить правильно
Вот жил был у меня ключ : 765fb7cd49e51e7fc8279301a16c3197
Решил я отправить 35 байт, зашифровал, отправил, изменил ключ на 35 и стал он 765fb7cd49e51e7fc8279301a16c31ba
зашифровал этим ключем второй пакет - серер ответил
"05 00 05 5b ec" - я так понимаю шифрование корявое....
подскажите че я делаю не так :)
Jetty, а нафига ты последний байт увеличиваешь?, меняться должны байты с 8го по 12й (при нумерации с нуля), то есть эти 4 байта это целое число которое и надо увеличивать на размер пакета...
Ага, тоесть получается что ключ состоит из 2-ух 64-битных интов и они записаны наоборот, верно ?
И еще не совсем понятно к каому числу прибавлять
вот для примера ключ 765fb7cd49e51e7f c8279301a16c31ba
35(размер пакета) надо прибавить к
1) c8 27 93 01
или
2) 01 93 27 с8
Jetty, к 0x19327с8 ибо в х86 процессорах принят обратный порядок байт...
ЗЫ а вот насчет 64битное число или 32битное сказать сложно ибо для этого надо либо клиент реверсить, либо пронаблюдать как у ключа переполниться 32битное число и смотреть увеличиться ли при этом 13й байт...
Что-то не так )))
сумирую шифрую второй пакет, отправляю и ничего, в ответ
05 00 6c 48 e8
Мб есть какие-то особенности?
Ибо пакетхак без проблем разшифровывает траф...
Добавлено через 5 минут
Что-то не так )))
сумирую шифрую второй пакет, отправляю и ничего, в ответ
05 00 6c 48 e8
Мб есть какие-то особенности?
Ибо пакетхак без проблем разшифровывает траф...
Jetty, если с шифрацией всё ок то может сам пакет не верный?)
ну пакеты я составляю просмотрев пакетхаком предварительно перехваченый от клиента пакет...
хзхз... щас перепроверю :)
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot