zlib内部压缩存在xor加密,我不是很看得懂伪c,只能看懂一点,问AI,AI又提供的是错误的测试代码,aes找不到前置操作,只能找到核心AES加密// The function seems has been flattened
_BYTE *__fastcall sub_DF9E8(unsigned __int8 *a1, _BYTE *a2, _DWORD *a3)
{
_BYTE *result; // x0
int v4; // [xsp+2Ch] [xbp-44h]
unsigned int v5; // [xsp+30h] [xbp-40h]
unsigned int v6; // [xsp+34h] [xbp-3Ch]
unsigned int v7; // [xsp+38h] [xbp-38h]
unsigned int v8; // [xsp+3Ch] [xbp-34h]
unsigned int v9; // [xsp+40h] [xbp-30h]
unsigned int v10; // [xsp+40h] [xbp-30h]
unsigned int v11; // [xsp+44h] [xbp-2Ch]
unsigned int v12; // [xsp+44h] [xbp-2Ch]
unsigned int v13; // [xsp+48h] [xbp-28h]
unsigned int v14; // [xsp+48h] [xbp-28h]
unsigned int v15; // [xsp+4Ch] [xbp-24h]
unsigned int v16; // [xsp+4Ch] [xbp-24h]
_DWORD *v17; // [xsp+50h] [xbp-20h]
v17 = a3;
v15 = (*a1 << 24) ^ (a1[1] << 16) ^ (a1[2] << 8) ^ a1[3] ^ *a3;
v13 = (a1[4] << 24) ^ (a1[5] << 16) ^ (a1[6] << 8) ^ a1[7] ^ a3[1];
v11 = (a1[8] << 24) ^ (a1[9] << 16) ^ (a1[10] << 8) ^ a1[11] ^ a3[2];
v9 = (a1[12] << 24) ^ (a1[13] << 16) ^ (a1[14] << 8) ^ a1[15] ^ a3[3];
v4 = (int)a3[60] >> 1;
while ( 1 )
{
v8 = td_10454508061205582617[HIBYTE(v15)]
^ td_16285320911784171940[BYTE2(v13)]
^ td_6854013251101861955[BYTE1(v11)]
^ td_6186001563344423828[(unsigned __int8)v9]
^ v17[4];
v7 = td_10454508061205582617[HIBYTE(v13)]
^ td_16285320911784171940[BYTE2(v11)]
^ td_6854013251101861955[BYTE1(v9)]
^ td_6186001563344423828[(unsigned __int8)v15]
^ v17[5];
v6 = td_10454508061205582617[HIBYTE(v11)]
^ td_16285320911784171940[BYTE2(v9)]
^ td_6854013251101861955[BYTE1(v15)]
^ td_6186001563344423828[(unsigned __int8)v13]
^ v17[6];
v5 = td_10454508061205582617[HIBYTE(v9)]
^ td_16285320911784171940[BYTE2(v15)]
^ td_6854013251101861955[BYTE1(v13)]
^ td_6186001563344423828[(unsigned __int8)v11]
^ v17[7];
v17 += 8;
if ( !--v4 )
break;
v15 = td_10454508061205582617[HIBYTE(v8)]
^ td_16285320911784171940[BYTE2(v7)]
^ td_6854013251101861955[BYTE1(v6)]
^ td_6186001563344423828[(unsigned __int8)v5]
^ *v17;
v13 = td_10454508061205582617[HIBYTE(v7)]
^ td_16285320911784171940[BYTE2(v6)]
^ td_6854013251101861955[BYTE1(v5)]
^ td_6186001563344423828[(unsigned __int8)v8]
^ v17[1];
v11 = td_10454508061205582617[HIBYTE(v6)]
^ td_16285320911784171940[BYTE2(v5)]
^ td_6854013251101861955[BYTE1(v8)]
^ td_6186001563344423828[(unsigned __int8)v7]
^ v17[2];
v9 = td_10454508061205582617[HIBYTE(v5)]
^ td_16285320911784171940[BYTE2(v8)]
^ td_6854013251101861955[BYTE1(v7)]
^ td_6186001563344423828[(unsigned __int8)v6]
^ v17[3];
}
v16 = td_6854013251101861955[HIBYTE(v8)]
& 0xFF000000
^ td_6186001563344423828[BYTE2(v7)]
& 0xFF0000
^ td_10454508061205582617[BYTE1(v6)]
& 0xFF00
^ (unsigned __int8)td_16285320911784171940[(unsigned __int8)v5]
^ *v17;
*a2 = HIBYTE(v16);
a2[1] = BYTE2(v16);
a2[2] = BYTE1(v16);
a2[3] = v16;
v14 = td_6854013251101861955[HIBYTE(v7)]
& 0xFF000000
^ td_6186001563344423828[BYTE2(v6)]
& 0xFF0000
^ td_10454508061205582617[BYTE1(v5)]
& 0xFF00
^ (unsigned __int8)td_16285320911784171940[(unsigned __int8)v8]
^ v17[1];
a2[4] = HIBYTE(v14);
a2[5] = BYTE2(v14);
a2[6] = BYTE1(v14);
a2[7] = v14;
v12 = td_6854013251101861955[HIBYTE(v6)]
& 0xFF000000
^ td_6186001563344423828[BYTE2(v5)]
& 0xFF0000
^ td_10454508061205582617[BYTE1(v8)]
& 0xFF00
^ (unsigned __int8)td_16285320911784171940[(unsigned __int8)v7]
^ v17[2];
a2[8] = HIBYTE(v12);
a2[9] = BYTE2(v12);
a2[10] = BYTE1(v12);
result = a2;
a2[11] = v12;
v10 = td_6854013251101861955[HIBYTE(v5)]
& 0xFF000000
^ td_6186001563344423828[BYTE2(v8)]
& 0xFF0000
^ td_10454508061205582617[BYTE1(v7)]
& 0xFF00
^ (unsigned __int8)td_16285320911784171940[(unsigned __int8)v6]
^ v17[3];
a2[12] = HIBYTE(v10);
a2[13] = BYTE2(v10);
a2[14] = BYTE1(v10);
a2[15] = v10;
return result;
}也就是这样只,但是前面做了什么都不知道,拿key和iv只能解开填充方式为Zeros和None,但是解开后的数据跟压缩后的hex完全对不上,我不知道是不是虚拟机里做了其他事,实在是不知道咋搞了