Quote:
Originally Posted by shadow52
Die verschlüsselung der Packete !
hoffe kannst damit was anfangen ...
|
Ich weiss, der Thread is uralt. Da ich aber grad damit rumspiele, wollte ich mal kurz eine kleine Korrektur anbringen.
Im aktuellen GER Client wird eine einfache DES Verschluesselung genutzt. Kein AES und nichtmal tripple DES. Da DES wesentlich aelter und schlechter als alle von mir genannten Verfahren ist, wuerde ich mich doch ARG wundern wenn jemals AES genutzt worden waere.
Hier bissle PseudoCode aus IDA direkt aus der DLL (symbolnamen und comments hab ich per Hand eingefuegt);
char *__cdecl DESCryptFunction(char *pcData, char *pcSubKeyPointer)
{
int v2; // ecx@1
int v3; // edx@1
int v4; // eax@1
int v5; // ecx@1
int v6; // edx@1
int v7; // eax@1
int v8; // ecx@1
int v9; // eax@1
int v10; // edx@1
int v11; // esi@1
unsigned int v12; // ecx@1
int v13; // ecx@1
char *v14; // esi@1
int v15; // eax@1
unsigned int v16; // ecx@1
unsigned int v17; // edx@1
int v18; // ecx@1
unsigned int v19; // edx@1
int v20; // ebx@2
int v21; // eax@2
int v22; // eax@2
int v23; // eax@3
unsigned int v24; // ecx@3
int v25; // eax@3
int v26; // esi@3
unsigned int v27; // ecx@3
unsigned int v28; // edx@3
int v29; // edx@3
int v30; // eax@3
int v31; // ecx@3
int v32; // edx@3
int v33; // eax@3
int v34; // ecx@3
int v35; // edx@3
int v36; // ecx@3
int v37; // eax@3
int v38; // edx@3
int v39; // esi@3
char *result; // eax@3
signed int nCryptByteCount; // [sp+10h] [bp-4h]@1
//
// initial DES key permutation
//
v2 = *((_DWORD *)pcData + 1) & 0xF0F0F0F ^ (*(_DWORD *)pcData >> 4) & 0xF0F0F0F;
v3 = v2 ^ *((_DWORD *)pcData + 1);
nCryptByteCount = 8;
v4 = 16 * v2 ^ *(_DWORD *)pcData;
v5 = (unsigned __int16)v3 ^ ((unsigned int)v4 >> 16);
v6 = v5 ^ v3;
v7 = (v5 << 16) ^ v4;
v8 = v7 & 0x33333333 ^ ((unsigned int)v6 >> 2) & 0x33333333;
v9 = v8 ^ v7;
v10 = 4 * v8 ^ v6;
v11 = v9;
v12 = (unsigned int)v10 >> 8;
v13 = v11 & 0xFF00FF ^ v12 & 0xFF00FF;
v14 = pcSubKeyPointer;
v15 = v13 ^ v9;
v16 = 2 * ((v13 << 8) ^ v10) | (((v13 << 8) ^ (unsigned int)v10) >> 31);
v17 = (v15 ^ v16) & 0xAAAAAAAA;
v18 = v17 ^ v16;
v19 = 2 * (v17 ^ v15) | ((v17 ^ v15) >> 31);
do
{
v20 = *(_DWORD *)v14;
v21 = *(_DWORD *)v14 ^ (((unsigned int)v18 >> 4) | (v18 << 28));
v14 += 16;
v19 ^= RawDES_Spbox7[v21 & 0x3F] | RawDES_Spbox5[((v20 ^ (((unsigned int)v18 >> 4) | (v18 << 28))) >> 8) & 0x3F] | RawDES_Spbox3[((unsigned int)v21 >> 16) & 0x3F] | RawDES_Spbox1[((unsigned int)v21 >> 24) & 0x3F] | RawDES_Spbox8[(v18 ^ *((_DWORD *)v14 - 3)) & 0x3F] | RawDES_Spbox6[(((unsigned int)v18 ^ *((_DWORD *)v14 - 3)) >> 8) & 0x3F] | RawDES_Spbox4[(((unsigned int)v18 ^ *((_DWORD *)v14 - 3)) >> 16) & 0x3F] | RawDES_Spbox2[(((unsigned int)v18 ^ *((_DWORD *)v14 - 3)) >> 24) & 0x3F];
v22 = *((_DWORD *)v14 - 2) ^ ((v19 >> 4) | (v19 << 28));
v18 ^= RawDES_Spbox7[v22 & 0x3F] | RawDES_Spbox5[((unsigned int)v22 >> 8) & 0x3F] | RawDES_Spbox3[((unsigned int)v22 >> 16) & 0x3F] | RawDES_Spbox1[((unsigned int)v22 >> 24) & 0x3F] | RawDES_Spbox8[(v19 ^ *((_DWORD *)v14 - 1)) & 0x3F] | RawDES_Spbox6[((v19 ^ *((_DWORD *)v14 - 1)) >> 8) & 0x3F] | RawDES_Spbox4[((v19 ^ *((_DWORD *)v14 - 1)) >> 16) & 0x3F] | RawDES_Spbox2[((v19 ^ *((_DWORD *)v14 - 1)) >> 24) & 0x3F];
--nCryptByteCount;
}
while ( nCryptByteCount );
v23 = ((unsigned int)v18 >> 1) | (v18 << 31); //
//
// // final DES key permutation
//
//
v24 = (v19 ^ v23) & 0xAAAAAAAA;
v25 = v24 ^ v23;
v26 = v25;
v27 = ((v24 ^ v19) >> 1) | ((v24 ^ v19) << 31);
v28 = v27 >> 8;
v29 = v26 & 0xFF00FF ^ v28 & 0xFF00FF;
v30 = v29 ^ v25;
v31 = (v29 << 8) ^ v27;
v32 = v30 & 0x33333333 ^ ((unsigned int)v31 >> 2) & 0x33333333;
v33 = v32 ^ v30;
v34 = 4 * v32 ^ v31;
v35 = (unsigned __int16)v34 ^ ((unsigned int)v33 >> 16);
v36 = v35 ^ v34;
v37 = (v35 << 16) ^ v33;
v38 = v36 & 0xF0F0F0F ^ ((unsigned int)v37 >> 4) & 0xF0F0F0F;
v39 = v37 ^ 16 * v38;
result = pcData;
*(_DWORD *)pcData = v39;
*((_DWORD *)pcData + 1) = v36 ^ v38;
return result;
}
Und weil man sowas ja so niemals wiederverwenden moechte; hier auch gleich eine Referenzimplementation
[Only registered and activated users can see links. Click Here To Register...].