|
楼主 |
发表于 2010-11-22 11:10
|
显示全部楼层
贴上wayos的算法
int __cdecl jhlfs_check(unsigned int a1, int a2)
{
unsigned int v2; // ecx@1
unsigned int v3; // kr00_4@1
char *v4; // edi@3
unsigned int v5; // esi@3
char v6; // al@4
char *v7; // edi@5
unsigned int v8; // esi@5
char v9; // al@6
unsigned int v10; // eax@7
unsigned int v11; // ecx@8
int v12; // esi@9
char *v13; // edx@11
unsigned int v14; // eax@12
unsigned __int8 v15; // cf@13
unsigned __int8 v16; // zf@13
signed int v17; // ecx@13
char *v18; // edi@13
int v19; // esi@13
int v20; // ecx@17
unsigned __int8 v21; // cf@18
unsigned __int8 v22; // zf@18
signed int v23; // ecx@18
int v24; // edi@18
int v25; // esi@18
char v27[128]; // [sp+Ch] [bp-158h]@1
unsigned int v28; // [sp+8Ch] [bp-D8h]@7
int v29; // [sp+90h] [bp-D4h]@7
unsigned int v30; // [sp+94h] [bp-D0h]@7
unsigned int v31; // [sp+98h] [bp-CCh]@7
unsigned int v32; // [sp+9Ch] [bp-C8h]@7
unsigned int v33; // [sp+A0h] [bp-C4h]@7
char v34; // [sp+E4h] [bp-80h]@11
int v35; // [sp+E8h] [bp-7Ch]@13
int v36; // [sp+ECh] [bp-78h]@13
int v37; // [sp+F0h] [bp-74h]@13
char v38[56]; // [sp+F4h] [bp-70h]@1
unsigned int v39; // [sp+12Ch] [bp-38h]@9
int v40; // [sp+130h] [bp-34h]@9
char v41; // [sp+134h] [bp-30h]@13
int v42; // [sp+138h] [bp-2Ch]@13
int v43; // [sp+13Ch] [bp-28h]@13
int v44; // [sp+140h] [bp-24h]@13
memset(v38, 0, 0x20u);
v3 = strlen(v27);
v2 = (v3 - 1) >> 2;
memcpy(v38, v27, 4 * v2);
if ( ((_BYTE)v3 - 1) & 3 )
memcpy(&v38[4 * v2], &v27[4 * v2], ((_BYTE)v3 - 1) & 3);
v5 = 0xC0660CFEu;
v4 = v27;
do
{
v6 = *(_BYTE *)v5++;
*v4++ = v6;
}
while ( v6 );
v8 = 0xC0660D12u;
v7 = v27;
xxtea_Encrypt(dword_C07114E0, 64, v38);
do
{
v9 = *(_BYTE *)v8++;
*v7++ = v9;
}
while ( v9 );
xxtea_Decrypt(dword_C07114E0, 64, v38);
v29 = 0;
v28 = 0;
v30 = 0x87452301u;
v31 = 0xCFCDAB89u;
v32 = 0x28BADCFEu;
v33 = 0x30325476u;
jhlfs_MD5Update((int)&v28, a2, 0x200u);
v10 = (v28 >> 3) & 0x3F;
if ( (signed int)v10 > 55 )
v11 = 120 - v10;
else
v11 = 56 - v10;
v39 = v28;
v40 = v29;
jhlfs_MD5Update((int)&v28, -1066330656, v11);
v12 = 0;
do
{
*(_DWORD *)&v38[4 * v12] = *((_BYTE *)&v28 + v12 + 24) | (*((_BYTE *)&v28 + v12 + 26) << 16) | (*((_BYTE *)&v28 + v12 + 27) << 24) | (*((_BYTE *)&v28 + v12 + 25) << 8);
++v12;
}
while ( v12 != 14 );
jhlfs_final((int)&v30, (int)v38);
v13 = &v34;
do
{
v14 = *((_DWORD *)v13 - 20);
*v13 = v14;
v14 >>= 8;
v13[1] = v14;
v14 >>= 8;
v13[2] = v14;
v13[3] = BYTE1(v14);
v13 += 4;
}
while ( v13 != v38 );
memset(&v41, 0, 0x20u);
*(_DWORD *)&v41 = *(_DWORD *)&v34;
v42 = v35;
v43 = v36;
v44 = v37;
v19 = a1 + 4;
xxtea_Decrypt(a1 + 4, 127, &v41);
v17 = 16;
v18 = &v34;
do
{
if ( !v17 )
break;
v15 = *(_BYTE *)v19 < (unsigned __int8)*v18;
v16 = *(_BYTE *)v19++ == *v18++;
--v17;
}
while ( v16 );
v20 = -1;
if ( !(v15 | v16) == v15 )
{
v23 = 492;
v21 = a1 >= 0xFFFFFFEC;
v22 = a1 == -20;
v25 = a1 + 20;
v24 = a2;
do
{
if ( !v23 )
break;
v21 = *(_BYTE *)v25 < *(_BYTE *)v24;
v22 = *(_BYTE *)v25++ == *(_BYTE *)v24++;
--v23;
}
while ( v22 );
v20 = (unsigned int)(char)(!(v21 | v22) - v21) >= 1 ? 0xFFFFFFFE : 0;
}
return v20;
} |
|