首页
社区
课程
招聘
tongdunSDK逆向
发表于: 2025-10-20 15:58 644

tongdunSDK逆向

2025-10-20 15:58
644

已完结


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-12-30 15:33 被fogSea编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 4481
活跃值: (2208)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
2
难在哪里,说明下
2025-10-20 16:51
0
雪    币: 572
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
CCTV果冻爽 难在哪里,说明下
他这个so文件好像是那个虚拟机混淆,里面函数调用都没办法确定,不过ida确认可以调试,但是这个APP禁止调试,而且还套的360企业壳,所有调试我没办法经验少,现在我是找到了数据压缩位置和加密位置,数据用zlib压缩,但视乎是魔改了的zlib压缩,加密出来的数据跟官方库不一致,问ai也说压缩中存在xor加密,但是ai说不明白,给的代码加密也不一样,然后卡在这里了,他还有一个核心加密视乎是AES-CBC,我找到了key和iv,也用官方库进行解密,但是解密出来也跟源压缩后的数据不一致。我不知道是不是因为我想的太难了,也可能是我经验太少了,全是自学,搞定了数盟,数美,但是这个同盾用的虚拟机混淆,我也定位不到对应的代码,就卡在了压缩数据的地方和AES-CBC加密的地方,完全没思路了
2025-10-20 17:20
0
雪    币: 4481
活跃值: (2208)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
4
虚拟机也是可以分析的,先直接调用,看zlib 和 aes是不是标准的
2025-10-20 20:22
0
雪    币: 572
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
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完全对不上,我不知道是不是虚拟机里做了其他事,实在是不知道咋搞了
2025-10-21 09:09
0
雪    币: 572
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
不过我可以断定,zlib压缩不是标准的,压缩内部加了xor加密,aes不确定,因为拿到key和iv解开数据对不上压缩后数据的hex
2025-10-21 09:13
0
游客
登录 | 注册 方可回帖
返回