这是linux下的C请高人帮忙转成一个Windows下的DLL函数,输出函数为DES,伪代码如下,有不清楚的回复。做出来的朋友发我邮箱[sungon%163.com]最好了,谢谢
int __cdecl DES(int a1, int a2, int a3, int a4)
{
signed int v4; // esi@6
signed int v5; // esi@8
int v6; // eax@9
int v7; // edx@9
signed int v8; // ecx@9
signed int v9; // ecx@11
unsigned __int8 v10; // bl@11
int v11; // edx@12
char v12; // al@12
signed int v13; // esi@14
int result; // eax@18
int v15; // [sp+Ch] [bp-1Ch]@5
int v16; // [sp+10h] [bp-18h]@8
signed int v17; // [sp+18h] [bp-10h]@1
signed int v18; // [sp+18h] [bp-10h]@3
signed int v19; // [sp+18h] [bp-10h]@5
signed int v20; // [sp+18h] [bp-10h]@17
v17 = 0;
do
{
deskey[v17] = *(_BYTE *)(v17 + a3);
++v17;
}
while ( v17 <= 7 );
DES_setkey(deskey);
v18 = 0;
do
{
LR0[v18] = getbit(a1, (unsigned __int8)IIP[v18]);
++v18;
}
while ( v18 <= 63 );
v19 = 0;
v15 = 3 * ((((a4 != 1) - 1) & 0xFFFFFFF1) + 15);
do
{
memcpy(LR1, &LR0[32], 0x20u);
memset(&LR1[32], 0, 0x20u);
v4 = 0;
do
{
bit48[v4] = *(&SUBKEY[16 * v15] + v4) != LR0[(unsigned __int8)E[v4]];
++v4;
}
while ( v4 <= 47 );
v5 = 0;
v16 = 0;
do
{
v6 = 2 * v5;
v7 = 0;
v8 = 5;
do
{
LOBYTE(v6) = *(&bit48[v8--] + (unsigned __int8)(6 * v5));
v7 = v6 + 2 * v7;
}
while ( v8 >= 0 );
v10 = *(&S[(unsigned __int8)v7] + v16);
v9 = 0;
do
{
v11 = (unsigned __int8)(4 * v5 + 3) - v9++;
v12 = v10 & 1;
v10 >>= 1;
bit32[v11] = v12;
}
while ( v9 <= 3 );
++v5;
v16 += 64;
}
while ( v5 <= 7 );
v13 = 0;
do
{
LR1[v13 + 32] = LR0[v13] != bit32[(unsigned __int8)P[v13]];
++v13;
}
while ( v13 <= 31 );
memcpy(LR0, LR1, 0x40u);
++v19;
v15 += 3 * a4;
}
while ( v19 <= 15 );
memcpy(LR1, &LR0[32], 0x20u);
memcpy(&LR1[32], LR0, 0x20u);
*(_DWORD *)a2 = 0;
*(_DWORD *)(a2 + 4) = 0;
v20 = 0;
do
{
result = (unsigned __int8)IIP_1[v20];
if ( LR1[result] )
result = setbit(a2, v20);
++v20;
}
while ( v20 <= 63 );
return result;
}
int __cdecl DES_setkey(int a1)
{
signed int v1; // ebx@1
v1 = 0;
do
{
KEY[v1] = getbit(a1, v1);
++v1;
}
while ( v1 <= 63 );
return getsubkey(a1);
}
bool __cdecl getbit(int a1, signed int a2)
{
return (*((_BYTE *)&bitmask + (a2 & 7)) & *(_BYTE *)((a2 >> 3) + a1)) != 0;
}
[课程]FART 脱壳王!加量不加价!FART作者讲授!