首页
社区
课程
招聘
[原创]窥见ACPR1.32的ReplaceCode
发表于: 2009-10-24 15:36 7685

[原创]窥见ACPR1.32的ReplaceCode

2009-10-24 15:36
7685

【文章标题】: 窥见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
  部分修复代码如下,完整代码和例子见附件
  


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
长知识了,感谢!
2009-12-2 16:25
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
嗯,  事后补救的方法也相当不错 ,  不过我比较喜欢事前的...
2009-12-3 14:20
0
雪    币: 340
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
nick大牛啊,膜拜!
2010-9-15 19:02
0
游客
登录 | 注册 方可回帖
返回
//