-
-
[原创]窥见ACPR1.32的ReplaceCode
-
发表于:
2009-10-24 15:36
7695
-
[原创]窥见ACPR1.32的ReplaceCode
【文章标题】: 窥见ACPR1.32的ReplaceCode
【文章作者】: nick
【作者主页】: www.begin09.com
【作者声明】: 成长的足迹~
--------------------------------------------------------------------------------
【详细过程】
ACPR1.32的ReplaceCode,是将原程序中的5个字节的指令替换成CALL ReplaceCodeFun(call指令正好占用5字节),
在ReplaceCodeFun中动态还原被替换的5个字节,同时参杂5个字节的垃圾指令,然后转去执行被还原的代码。
被替换的5字节正常指令呈现出"2+3"或"3+2"的规律,即有2条正常的指令,一条是2字节,一条是3字节。
被参杂的5字节垃圾指令,2字节的垃圾指令通常有2种,ADD REG1,REG2/SUB REG1,REG2垃圾指令对和XOR REG1/REG2垃圾指令对。
在修复ReplaceCode的时候存在2张表:
表一:被加密过的ReplaceCode的字节码表。该表10个字节为一项,正好对应解码出来的10字节指令(正常5字节+垃圾5字节)。
表二:存放被ReplaceCode的代码的下一条指令的偏移地址(有点拗口),实际这个表中的项的值-5就是被ReplaceCode代码的起始偏移地址。
壳区段.perplex作用:
1 部分ReplaceCode将动态解码到壳的区段然后转去执行
2 部分资源(图标,图标组)被抽取到了壳区段当中
完美修复ReplaceCode所替换的代码后,还要将资源目录相关项修复,才能删除壳区段。
示例中ReplaceCodeFun地址:00480416
部分修复代码如下,完整代码和例子见附件
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)