Люди помогите!!!
(( никак не получается с этим пакетом Init... Вроде бы всё верно делаю, но клиент Interlude никак не реагирует на такой пакет... А Ertheia вообще критует..
PHP код:
static void XorInitPacket(unsigned char* raw, int size, int key)
{
int i = 0;
int key2 = key;
for(i = 6; i < size - 4; i+=4)
{
int temp = (*(raw + i + 3) << 24) & 0xFF000000 | (*(raw + i + 2) << 16) & 0xFF0000 | (*(raw + i + 1) << 8) & 0xFF00 | *(raw + i) & 0xFF;
key2 += temp;
int temp2 = key2 ^ temp;
raw[i] = temp2 & 0xFF;
raw[i + 1] = temp2 >> 8 & 0xFF;
raw[i + 2] = temp2 >> 16 & 0xFF;
raw[i + 3] = temp2 >> 24 & 0xFF;
}
raw[i] = key2 & 0xFF;
raw[i + 1] = key2 >> 8 & 0xFF;
raw[i + 2] = key2 >> 16 & 0xFF;
raw[i + 3] = key2 >> 24 & 0xFF;
};
void CUserSocket::OnCreate()
{
m_pAuthUser = new CAuthUser;
m_pAuthUser->Init();
srand(time(NULL));
*(int*)(m_bwKey) = rand();
*(int*)(m_bwKey + 4) = rand();
*(int*)(m_bwKey + 8) = rand();
*(int*)(m_bwKey + 0xc) = rand();
m_pCrypt = new CBlowFish(g_bfStaticKey, sizeof(g_bfStaticKey));
CIOBuffer* pBuffer = CIOBuffer::Alloc();
int nLen = Assemble(pBuffer->m_Buffer + 2, IOBUFFER_SIZE, "cddbddddbc",
0,
1234567, // Session ID
0x0000c621, // protocol version
sizeof(m_pAuthUser->m_RSA),
&m_pAuthUser->m_RSA, // public key
0x29DD954E,
0x77C39CFC,
0x97ADB620,
0x07BDE0F7,
sizeof(m_bwKey),
m_bwKey, // new BlowFish Key
0
);
nLen += 8; // xor key
nLen = (nLen + 7) & 0xfffffff8; // aligment for blowfish
XorInitPacket(pBuffer->m_Buffer, nLen, rand());
m_pCrypt->Encrypt(pBuffer->m_Buffer + 2, nLen); // blowfish encrypt
nLen+=2; // packet total size
Read(0); // WSARead() IOCP early call
*(short*)(pBuffer->m_Buffer) = nLen; // set first bytes to length of packet
pBuffer->m_dwSize = nLen // for WSASend
Write(pBuffer); // Write!
delete m_pCrypt; // change blowfish key
m_pCrypt = new CBlowFish(m_bwKey, sizeof(m_bwKey));
}
Улетает клиенту вот такое
Код:
00000000: ba 00 e7 22 01 4f 2b 42 68 b1 b9 06 e8 a2 ac a4
00000010: 17 97 94 2f 4b da 02 02 36 bb 65 02 33 77 fb b4
00000020: c7 64 23 cf eb b1 c2 fb 97 11 d3 85 19 1e 42 5e
00000030: 46 f8 fc aa 4f 34 eb cc 39 b0 02 98 fd e0 21 9d
00000040: dc 5c d3 dd e3 b5 4d fa 38 46 6f 02 d4 4c 9d ce
00000050: e8 46 9b 88 1b 01 4f cc 69 52 7d ae b5 5e e1 92
00000060: 3a 6e 92 43 7a c3 82 17 06 2e d2 27 53 1c 25 98
00000070: 53 ca 27 56 60 e3 9f 14 f6 54 9f bf 9f 48 c8 ed
00000080: d8 28 e9 93 96 d3 16 7a c9 81 b4 52 c2 d9 8b dd
00000090: 42 3f 59 cf 1a 11 a3 fa 0c 9b 46 94 e3 0f 91 fb
000000a0: a7 9f 0a f0 42 ec f2 07 66 ae 86 10 6d 62 cf 12
000000b0: 01 3b e2 0b ec 99 3d 8b 23 b0
оно же до ксора и шифрования (но с ксор ключом в конце пакета)
Код:
00000000: ba 00 00 87 d6 12 00 21 c6 00 00 6e 12 32 ab a3
00000010: 1a ee 4c eb 97 09 25 f8 e5 25 ad db d7 80 e1 20
00000020: 4c 72 d7 1d b4 fb fb c0 7e e9 3d d0 b8 87 3f b1
00000030: 1c fe ad 5d 17 08 2c 18 9b 26 ec 61 6e 32 95 73
00000040: 95 7e 37 3d 03 d4 14 be 43 b8 92 3b b2 d1 76 e3
00000050: a3 0e 87 7d a5 ee ed 69 56 59 57 5f ee c6 17 35
00000060: 81 10 f7 43 74 32 03 c4 46 c9 e3 a5 d6 29 a6 a6
00000070: a5 3d c8 e6 af dc 35 19 43 21 0a 2e d8 12 a7 6c
00000080: 11 d1 a5 ab b1 d6 85 44 72 fb 93 4e 95 dd 29 fc
00000090: 9c c3 77 20 b6 ad 97 f7 e0 bd 07 27 1d 6e 6e e0
000000a0: 09 a9 14 24 7c a1 10 0f 0b 06 6a 00 cc cc cc cc
000000b0: cc cc cc cc cc cc d2 ab 71 63
что у меня может быть не так? Нигде не могу найти точного примера ксора инит пакета