die Verschlüsselung ist nicht weiter ein problem, ist relativ einfach zu knacken, (haufenweise BitShift+Xor), das problem ist der 128 Byte Key,
dieser wird aus 6 Datenpacketen zufällig generiert, wie der client das genau macht und der server das versteht hab ich noch nicht raus, soweit ich das sehen kann muss der Key aber bei jedem Paket identisch sein, da das Login Packet immer den selben Key benutzt
hier mein versuch decrypt versuch, vieleicht kannst du ja fortführen womit ich angefangen hab wurstbrot ^^ (alle werte beziehen sich auf den Eternia Client, weil dieser sich ja nicht ändern kann)
Code:
#include <stdio.h>
#include <stdlib.h>
int DecrypterData_105E0A48[64] = {
0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, 0x00010000,
0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004,
0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404,
0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000,
0x00010000, 0x01010404, 0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400,
0x01010004, 0x00010000, 0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404,
0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, 0x00010404, 0x01010400,
0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004, 0x00010400, 0x00000000, 0x01010004
};
int DecrypterData_105E0B48[64] = {
0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, 0x80008020,
0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020,
0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000,
0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020,
0x00000000, 0x00108020, 0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000,
0x80100000, 0x80008000, 0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000,
0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, 0x80000020, 0x00100020,
0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000, 0x80100020, 0x80108020, 0x00108000
};
int DecrypterData_105E0C48[64] = {
0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, 0x08000200,
0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208,
0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208,
0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000,
0x08020200, 0x08000000, 0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000,
0x00000200, 0x00020008, 0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008,
0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, 0x00020200, 0x08000008,
0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208, 0x00000008, 0x08020008, 0x00020200
};
int DecrypterData_105E0D48[64] = {
0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, 0x00002001,
0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001,
0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080,
0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081,
0x00800080, 0x00800001, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000,
0x00002080, 0x00800080, 0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080,
0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, 0x00802080, 0x00800081,
0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002000, 0x00802080
};
int DecrypterData_105E0E48[64] = {
0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, 0x02080000,
0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000,
0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100,
0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100,
0x00080000, 0x42000100, 0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100,
0x02000100, 0x40000000, 0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000,
0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, 0x40080000, 0x42000000,
0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000, 0x40080000, 0x02080100, 0x40000100
};
int DecrypterData_105E0F48[64] = {
0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, 0x00400000,
0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010,
0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010,
0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000,
0x20004000, 0x00000010, 0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010,
0x00400000, 0x20004000, 0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000,
0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, 0x20400000, 0x00404010,
0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000, 0x20000000, 0x00400010, 0x20004010
};
int DecrypterData_105E1048[64] = {
0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, 0x04200800,
0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802,
0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002,
0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800,
0x04000000, 0x00200800, 0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002,
0x00200002, 0x04000000, 0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800,
0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, 0x00000002, 0x04200802,
0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002, 0x04000800, 0x00000800, 0x00200002
};
int DecrypterData_105E1148[64] = {
0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, 0x10000000,
0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040,
0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000,
0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000,
0x00041040, 0x00040000, 0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040,
0x10001000, 0x00000040, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040,
0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0x00000000,
0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040, 0x00040040, 0x10000000, 0x10041000,
};
// Der Login Key, ist nur beim LoginPaket Valid
int DecrypterData_ESI[32] = {
0x000D2E32, 0x2F312913, 0x3B012A06, 0x2E15332E, 0x031C292E, 0x3C1A0523, 0x1B061529, 0x213B2037,
0x2F213527, 0x38093818, 0x022A001D, 0x361A1B19, 0x0F361E10, 0x031C3B24, 0x15311A36, 0x2209042E,
0x16270536, 0x02352F20, 0x25102A35, 0x1E2D0231, 0x301E3A28, 0x30263E12, 0x3E2A1D1C, 0x0925141A,
0x24092701, 0x1B2A110E, 0x281B310B, 0x05360F24, 0x3D2D0C3B, 0x05040A2D, 0x19351810, 0x2132271D
};
char KeyData_105E0960[56] = {
0x38, 0x30, 0x28, 0x20, 0x18, 0x10, 0x08, 0x00,
0x39, 0x31, 0x29, 0x21, 0x19, 0x11, 0x09, 0x01,
0x3A, 0x32, 0x2A, 0x22, 0x1A, 0x12, 0x0A, 0x02,
0x3B, 0x33, 0x2B, 0x23, 0x3E, 0x36, 0x2E, 0x26,
0x1E, 0x16, 0x0E, 0x06, 0x3D, 0x35, 0x2D, 0x25,
0x1D, 0x15, 0x0D, 0x05, 0x3C, 0x34, 0x2C, 0x24,
0x1C, 0x14, 0x0C, 0x04, 0x1B, 0x13, 0x0B, 0x03
}
char KeyData_105E0998[24] = {
0x0D, 0x10, 0x0A, 0x17, 0x00, 0x04, 0x02, 0x1B,
0x0E, 0x05, 0x14, 0x09, 0x16, 0x12, 0x0B, 0x03,
0x19, 0x07, 0x0F, 0x06, 0x1A, 0x13, 0x0C, 0x01
}
char KeyData_105E09B0[24] = {
0x28, 0x33, 0x1E, 0x24, 0x2E, 0x36, 0x1D, 0x27,
0x32, 0x2C, 0x20, 0x2F, 0x2B, 0x30, 0x26, 0x37,
0x21, 0x34, 0x2D, 0x29, 0x31, 0x23, 0x1C, 0x1F
}
char KeyData_105E09C8[16] = {
0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00
}
char KeyData_105E09D8[96] = {
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00,
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
}
char KeyData_105E0A38[16] = {
0x01, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1C
}
void GenerateKey(int *Data, int * Key)
{
/*
int v2; // edx@1
char *v3; // esi@1
int result; // eax@2
unsigned int v5; // ecx@2
int v6; // eax@2
int v7; // ebx@2
int v8; // edi@2
unsigned int v9; // ebx@2
unsigned int v10; // ebx@2
int v11; // edi@2
char v12; // zf@2
signed int v13; // [sp+10h] [bp-84h]@1
char v14; // [sp+14h] [bp-80h]@1
v2 = a2;
v3 = &v14;
v13 = 16;
do
{
v5 = *(_DWORD *)(v2 + 4);
v6 = *(_DWORD *)v2;
v7 = *(_DWORD *)v2;
v8 = v7 & 0xFC0000 | 16 * (*(_DWORD *)v2 & 0xFC0);
v9 = v5 >> 4;
v3 += 8;
v10 = (*(_DWORD *)(v2 + 4) & 0xFC0 | v9 & 0xFC000) >> 6;
v2 += 8;
*((_DWORD *)v3 - 2) = v10 | (v8 << 6);
v11 = v5 & 0x3F | (v5 >> 4) & 0x3F00 | ((v6 & 0x3F000 | 16 * (v6 & 0x3F)) << 12);
result = v13 - 1;
v12 = v13 == 1;
*((_DWORD *)v3 - 1) = v11;
--v13;
}
while ( !v12 );
if ( a1 < (char *)a1 + 128 )
memcpy(a1, &v14, 0x80u);
return result;
*/
}
void Crypt(int *DataIn, int *DataOut)
{
unsigned char *Data1ptr = (unsigned char*)DataIn;
unsigned char *Data2ptr = (unsigned char*)DataIn+4;
unsigned char *Data3ptr = (unsigned char*)DataOut;
unsigned char *Data4ptr = (unsigned char*)DataOut+4;
unsigned int EAX=0,EDX=0,ECX=0,ESI=0,EBX=0,EDI=0,EBP=0;
unsigned int j,*DecryptDataPtr,*ESIDataPtr,ESI_DataOffset=0;
unsigned int tempvar1=0,tempvar2=0;
EAX = *Data1ptr << 24 | *(Data1ptr+1) << 16 | *(Data1ptr+2) << 8 | *(Data1ptr+3); // EAX
EDX = *Data2ptr << 24 | *(Data2ptr+1) << 16 | *(Data2ptr+2) << 8 | *(Data2ptr+3); // EDX
ECX = ((EDX & 0x0F0F0F0F) ^ (EAX >> 4) & 0x0F0F0F0F);
EAX ^= 16 * ECX;
EDX ^= ECX;
ECX = (EDX & 0x0000FFFF) ^ (EAX >> 0x10);
EDX ^= ECX; //XOR EDX,ECX
EAX ^= (ECX << 0x10); //XOR EAX,ECX + SHL ECX,10
ECX = (EAX & 0x33333333) ^ ((EDX >> 0x2) & 0x33333333);
EAX ^= ECX; //XOR EAX,ECX
EDX ^= 4 * ECX;
ECX = (EAX & 0x00FF00FF) ^ (EDX >> 0x8) & 0x00FF00FF;
EAX ^= ECX; //XOR EAX,ECX
ECX = 2 * ((ECX << 0x8) ^ EDX) | (((ECX << 0x8) ^ EDX) >> 0x1F);
EDX = (ECX ^ EAX) & 0xAAAAAAAA;
ECX ^= EDX;
EDX = 2 * (EAX ^ EDX) | ((EAX ^ EDX) >> 0x1F);
j=8;
ESIDataPtr = (unsigned int*)DecrypterData_ESI;
do
{
EAX = *ESIDataPtr ^ ((ECX >> 4) | (ECX << 28));
ESIDataPtr += 4;
EDX ^= DecrypterData_105E1048[(EAX & 0x3F)] |
DecrypterData_105E0E48[(EAX >> 8) & 0x3F] |
DecrypterData_105E0C48[(EAX >> 16) & 0x3F] |
DecrypterData_105E0A48[(EAX >> 24) & 0x3F] |
DecrypterData_105E1148[(ECX ^ *(ESIDataPtr-0x3)) & 0x3F] |
DecrypterData_105E0F48[((ECX ^ *(ESIDataPtr-0x3)) >> 8) & 0x3F] |
DecrypterData_105E0D48[((ECX ^ *(ESIDataPtr-0x3)) >> 16) & 0x3F] |
DecrypterData_105E0B48[((ECX ^ *(ESIDataPtr-0x3)) >> 24) & 0x3F];
EAX = (*(ESIDataPtr-2) ^ ((EDX >> 4) | (EDX << 28)));
ECX ^= DecrypterData_105E1048[(EAX & 0x3F)] |
DecrypterData_105E0E48[((*(ESIDataPtr-2) ^ ((EDX >> 4) | (EDX << 28))) >> 8) & 0x3F] |
DecrypterData_105E0C48[(EAX >> 16) & 0x3F] |
DecrypterData_105E0A48[((*(ESIDataPtr-2) ^ ((EDX >> 4) | (EDX << 28))) >> 24) & 0x3F] |
DecrypterData_105E1148[(*(ESIDataPtr-1) ^ EDX) & 0x3F] |
DecrypterData_105E0F48[((*(ESIDataPtr-1) ^ EDX) >> 8) & 0x3F] |
DecrypterData_105E0D48[((*(ESIDataPtr-1) ^ EDX) >> 16) & 0x3F] |
DecrypterData_105E0B48[((*(ESIDataPtr-1) ^ EDX) >> 24) & 0x3F];
--j;
//printf("ECX: 0x%08X, EDX: 0x%08X\n\n",ECX,EDX); // nur ECX und EDX sind die wichtigen Werte...
}
while(j != 0);
/*
v25 = ((unsigned int)v3 >> 1) | (v3 << 31);
v26 = (v2 ^ (((unsigned int)v3 >> 1) | (v3 << 31))) & 0xAAAAAAAA;
v27 = v26 ^ v25;
v28 = v27;
v29 = ((v26 ^ v2) >> 1) | ((v26 ^ v2) << 31);
v30 = v29 >> 8;
v31 = v28 & 0xFF00FF ^ v30 & 0xFF00FF;
v32 = v31 ^ v27;
v33 = (v31 << 8) ^ v29;
v34 = v32 & 0x33333333 ^ ((unsigned int)v33 >> 2) & 0x33333333;
v35 = v34 ^ v32;
v36 = 4 * v34 ^ v33;
v37 = (unsigned __int16)v36 ^ ((unsigned int)v35 >> 16);
v38 = v37 ^ v36;
v39 = (v37 << 16) ^ v35;
v40 = v38 & 0xF0F0F0F ^ ((unsigned int)v39 >> 4) & 0xF0F0F0F;
v41 = v39 ^ 16 * (v38 & 0xF0F0F0F ^ ((unsigned int)v39 >> 4) & 0xF0F0F0F);
result = a1;
*(_DWORD *)a1 = v41;
*(_DWORD *)(a1 + 4) = v38 ^ v40;
return result;
*/
EAX = (ECX >> 1) | (ECX << 0x1F);
ECX = (EAX ^ EDX) & 0xAAAAAAAA;
EDX ^= ECX;
EAX ^= ECX;
ECX = EDX << 0x1F;
EDX >>= 1;
ESI = EAX & 0x00FF00FF;
ECX |= EDX;
EDX = (ECX >> 8) & 0x00FF00FF;
EDX ^= ESI;
EAX ^= EDX;
EDX <<= 8;
ECX ^= EDX;
ESI = EAX & 0x33333333;
EDX = (((ECX >> 2) & 0x33333333) ^ ESI);
EAX ^= EDX;
ECX ^= (EDX << 2);
EDX = (EAX >> 16) ^ (ECX & 0x0000FFFF);
ECX ^= EDX;
EAX ^= (EDX << 16);
EDX = (EAX >> 4) & 0x0F0F0F0F ^ (ECX & 0x0F0F0F0F);
ESI = (EDX << 4) ^ EAX;
EDX ^= ECX;
//ESI & EDX = Verschlüsselte Daten ^^
//printf("EDX: 0x%08X\nESI: 0x%08X\n\n",EDX,ESI);
*(Data3ptr+0) = ((ESI & 0xFF000000) >> 24);
*(Data3ptr+1) = ((ESI & 0x00FF0000) >> 16);
*(Data3ptr+2) = ((ESI & 0x0000FF00) >> 8);
*(Data3ptr+3) = ((ESI & 0x000000FF) >> 0);
*(Data4ptr+0) = ((EDX & 0xFF000000) >> 24);
*(Data4ptr+1) = ((EDX & 0x00FF0000) >> 16);
*(Data4ptr+2) = ((EDX & 0x0000FF00) >> 8);
*(Data4ptr+3) = ((EDX & 0x000000FF) >> 0);
printf("Unencrypted Data:\tEncrypted Data:\n");
printf("1: 0x%02X 0x%02X 0x%02X 0x%02X\t0x%02X 0x%02X 0x%02X 0x%02X\n",
*Data1ptr,*(Data1ptr+1),*(Data1ptr+2),*(Data1ptr+3),
*Data3ptr,*(Data3ptr+1),*(Data3ptr+2),*(Data3ptr+3));
printf("2: 0x%02X 0x%02X 0x%02X 0x%02X\t0x%02X 0x%02X 0x%02X 0x%02X\n",
*Data2ptr,*(Data2ptr+1),*(Data2ptr+2),*(Data2ptr+3),
*Data4ptr,*(Data4ptr+1),*(Data4ptr+2),*(Data4ptr+3));
}
int main()
{
/*
char PACKET[] = {
0x00, 0x00, 0x00, 0x1A, //Paket Länge, von 0 bis n
0x03, 0x00, //REQUEST LOGIN
0x00, 0x05, 0x29, 0x00, //CLIENT_PATCH_VERSION
0x74, 0x65, 0x73, 0x74, 0x69, 0x65, 0x65, 0x00, //ACCOUNT_NAME
0x70, 0x77, 0x74, 0x65, 0x73, 0x74, 0x00, //ACCOUNT_PASSWORD
0x09, 0x15, 0x94, 0xAB, 0x84, 0x44, 0x00 // ZEIT ?
};
//*/
// Dieses Paket ist verschlüsselt
///*
char PACKET[] = {
0x81, 0x94, 0xF2, 0x14,
0xA3, 0x05, 0x26, 0xB2,
0x77, 0xB2, 0x22, 0x42,
0x7F, 0x5A, 0xCE, 0x8D,
0xF4, 0x1E, 0xDD, 0x7C,
0xB1, 0x74, 0x64, 0xCF,
0xCE, 0x1C, 0xB0, 0x2F,
0xB7, 0x6A, 0x34, 0xE5,
0xA7
};
//*/
char *PACKET_OUT = (char*)malloc(sizeof(PACKET));
int encrypt = 0, i = 0;
if (encrypt == 1)
{
i = ((sizeof(PACKET) - 1) + 7) >> 3;
}
else
{
i = (sizeof(PACKET) + 7) >> 3;
}
int *Data1ptr,*Data2ptr, j=0;
unsigned char *Data1ptrByte,*Data2ptrByte;
int Data1, Data2;
printf("Count: %d,%d\n",i,sizeof(PACKET));
// GenerateKeyData
int v13 = 0;
char v49[56];
do
{
//v49[v13] = (KeyData_105E09C8[2 * (KeyData_105E0960[v13] & 7)] & *(&v32 + (KeyData_105E0960[v13] >> 3))) != 0;
++v13;
}
while ( v13 < 56 );
int v15 = 0;
/* do
{
v19 = &v51[8 * v15];
v16 = 0;
v17 = (unsigned __int8)byte_105E0A38[v15];
*(_DWORD *)v19 = 0;
*(_DWORD *)&v50[8 * v15] = 0;
v18 = v17;
do
{
if ( v17 >= 28 )
v20 = v48[v17];
else
v20 = v49[v17];
v47[v16++] = v20;
++v17;
}
while ( v16 < 28 );
v21 = 28;
v22 = v18 + 28;
do
{
if ( v22 >= 56 )
v23 = v48[v22];
else
v23 = v49[v22];
v47[v21++] = v23;
++v22;
}
while ( v21 < 56 );
v25 = 0;
v24 = (signed int)&unk_105E09D8;
do
{
if ( v47[(unsigned __int8)byte_105E0998[v25]] )
*(_DWORD *)&v50[8 * v15] |= *(_DWORD *)v24;
if ( v47[(unsigned __int8)byte_105E09B0[v25]] )
*(_DWORD *)v19 |= *(_DWORD *)v24;
v24 += 4;
++v25;
}
while ( v24 < (signed int)byte_105E0A38 );
++v15;
}
while ( v15 < 16 );
*/
do
{
Data1ptr = (int*)(PACKET+0+j);
Data2ptr = (int*)(PACKET_OUT+0+j);
Crypt(Data1ptr,Data2ptr);
i--;
j+=8;
//i=0;
}
while ( i );
getchar();
return EXIT_SUCCESS;
}