ACProtect Professional 1.3C 主程序脱壳(3)(图)

互联网   发布时间:2008-10-08 19:05:26   作者:佚名   我要评论
运行程序,crashedL。直接用修复完stolen code的dumped_.exe看看。从EP的第1个call进去就有问题。 在OllyDbg中可以看到: 有部分IAT在壳中。这部分代码前面是跟到了的(在第6次int 3以后),原来认为这只是loader自己需要的API。实际上

找到匹配地址后,ecx等于表项的offset,第1项为0x2A。

2) 查opcode表
用1中的到的offset查opcode数据表(007262ED):

密文opcode表:


counter表(记录每个地址的调用次数,超出0x20次将使用新的地址解码):


第1次解出的变形码:



3) 调整stack以便正确调用变形码及返回




4) 破坏解出的代码,ret到变形码




5) 执行变形码,返回到原程序




6) Patch

先把解出的代码binary copy到dumped_.exe(直接copy 722416 - 7226B0的代码即可)。

关闭722579的解码(解出7225C1 - 7226B0):


关闭7226A8处对前面代码的破坏:


patch 72260C: jnz->jmp,无论执行多少次都使用同一解码地址



copy正确的ImageBase值,这里为0,改72FC1F为400000





copy 正确的10 bytes key(第1 byte为0)




执行,仍然crashedL。

8. 修复Replaced code (2)

还有replaced code,在这里出异常:


->


将解出的代码贴到ACProtect_Fixed.exe。可以看到,这些实际上是变形的call代码。第1次执行到这里,在buffer中解出的变形码为:




XOR的结果:



目前的dumped_.exe,地址72ED83的值为0(这些值是loader写入的)。

406DF8的变形码原来是call GetKeyboardType。原程序的call API 全部被抽掉了。壳代码的动作与前面相似,用返回地址查表,获取相应的指针,生成jmp dword ptr ds:[xxxxxxxx]指令,该地址则指向类似72124C的变形码,调用正确的API。

变形call API的返回RVA地址表:

开始:


结束:


寻址变形码数组下标表(每项1字节),用于查变形码指针数组:


变形码地址表(指向变形码的指针):


相关文章

最新评论