首页
社区
课程
招聘
[原创]菜鸟也玩 ZProtect v1.4(demo) IAT 修复
发表于: 2012-8-30 12:52 8957

[原创]菜鸟也玩 ZProtect v1.4(demo) IAT 修复

2012-8-30 12:52
8957

【文章标题】:菜鸟也玩 ZProtect v1.4(demo) IAT 修复
【作者邮箱】: a474528738@163.com
【软件名称】: XXX邮件推广
【使用工具】: OD,exeinfoPE
【操作平台】: XP SP3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  Zp脱壳的实例资料在我们论坛比较少,正好我在我电脑上看见了一ZP加壳的软件,就顺便脱了,写了我
  的第一篇脱文。第一次写脱文,难免有错误与遗漏,到时请各位不吝指出!在此感谢。
  
  OD载入,先F7单步,到达
  009C89DC    60              PUSHAD
  009C89DD  ^ E9 F7FCFFFF     JMP 009C86D9 <---此步之后下好断点: hr esp
  下好断点后F9运行,弹出注册对话框,点试用,断下,单步F7到达OEP:
  0084F914    55              PUSH EBP  <------OEP
  0084F915    8BEC            MOV EBP,ESP
  0084F917    83C4 F0         ADD ESP,-10
  0084F91A    B8 9CEA8400     MOV EAX,0084EA9C
  0084F91F    E8 8489BBFF     CALL 004082A8   <----
  0084F924    A1 0C738600     MOV EAX,DWORD PTR DS:[86730C]
  0084F929    8B00            MOV EAX,DWORD PTR DS:[EAX]
  0084F92B    E8 48CAC5FF     CALL 004AC378
  0084F930    A1 0C738600     MOV EAX,DWORD PTR DS:[86730C]

  进入CALL 004082A8,再进入第一个call:
  004081CC  - FF25 B0138700   JMP DWORD PTR DS:[8713B0]                ; 1_72.009CAE9C
  004081D2    8BC0            MOV EAX,EAX
  004081D4  - FF25 AC138700   JMP DWORD PTR DS:[8713AC]
  004081DA    8BC0            MOV EAX,EAX
  004081DC  - FF25 A8138700   JMP DWORD PTR DS:[8713A8]                ; 1_72.009C9EF4
  004081E2    8BC0            MOV EAX,EAX
  004081E4  - FF25 A4138700   JMP DWORD PTR DS:[8713A4]
  
  
  IAT已被加密,跟随到数据窗口-->内存地址,看到
  008713B0  009CAE9C  1_72.009CAE9C  <--------第一种加密
  008713B4  00000000
  008713B8  009CA578  1_72.009CA578
  008713BC  009CAAAC  1_72.009CAAAC
  008713C0  01AF0196    <----------第二种加密
  008713C4  01AF01A4
  008713C8  01AF01B2
  到IAT尾部:
  00871CA8  01B001F8<--------第三种加密
  00871CAC  01B00206
  00871CB0  01B00214
  00871CB4  01B00222
  00871CB8  00000000
  00871CBC  009CAB48  1_72.009CAB48
  00871CC0  01B00230

  第一种加密,009XXXXX
  第二种加密,01AXXXXX
  第三种加密,01BXXXXX

  在 008713B0  009CAE9C  1_72.009CAE9C  <--------第一种加密   上新建EIP,注意,此时先前用来到达OEP的硬件断点不要删!F8一路步过,最后
  来到
  018673DD    C3              RETN
  此时堆栈已出现解密后的地址:
  0012FFC0   7C80B741  kernel32.GetModuleHandleA
  那 018673DD 就是IAT解密完成后的跳转。我们得到第一种加密的关键地方:018673DD
  又新建EIP,跟随后两种加密方式,都可以看到这样的形式:
  PUSH EAX
  PUSHAD
  PUSH XXXXXXXX
  CALL 018A43A0
  POPAD
  RETN
  在RETN一句,堆栈也已经解密出真实地址了。
  其中 CALL 018A43A0 是一个关键地方,大家可以进去分析分析。
  现在要修复IAT就比较简单了,我写了一个脚本,供大家参考:
  
  var cur_addr
  var old_esp
  var old_eip
  var end_addr
  var bp_addr
  
  mov old_esp,esp        ;保存eip,esp,脚本运行后我们要还原
  mov old_eip,eip
  
  bphwc        ;删除所有断点
  bc
  ask "输入起始的IAT地址-4"
  cmp $RESULT, 0
  je exit
  mov cur_addr,$RESULT        ;IAT起始地址-4
  ask "输入结束的IAT地址+4"
  cmp $RESULT, 0
  je exit
  mov end_addr,$RESULT      
  
  mainloop:
  BPHWC
  BC
  mov esp,old_esp
  add cur_addr,4
  cmp cur_addr,end_addr        ;IAT结束+4,当前地址大于这个值,IAT修复完毕
  jae exit
  cmp [cur_addr],0    ;DLL结束的地方,不处理
  je mainloop
  CMP [cur_addr],00A00000
  JB loop1           ;调向第一种加密处理
  JMP  loop2         ;调向第二三种加密处理
  
  
  loop:
  mov eip,[cur_addr]        ;在目标地址新建EIP
  esto            
  mov [cur_addr],[esp]      ;栈顶出现真实函数地址,我们把它写回到 IAT
  jmp mainloop
  
  loop1:    ;第一种加密处理
  BPHWS 018673DD
  JMP loop
  
  loop2:     ;第二三种加密处理
  MOV bp_addr,[cur_addr]
  ADD bp_addr,0D
  BPHWS bp_addr,"x"
  JMP loop
  
  exit:
  mov eip,old_eip
  mov esp,old_esp
  bc
  BPHWC
  ret

  起始IAT-4=008712A4
  结束IAT+4=00871D78

  此脚本已经测试通过。ZProtect会对PE头做比较大的手脚,修复的时候要注意
  取消lordpe勾选“从磁盘文件粘贴PE头”,然后DUMP下来,修复,成功!这是为什么?
  原来,我们之前脱壳抓取镜像的时候,使用的从磁盘文件(加壳文件)贴过来的PE头,
  而对于加壳文件来说,资源表是被修改了的。这样就会出错。
  以下是脱壳试练品,有兴趣的可以试一试。你还有别的脱壳思路吗?
   http://pan.baidu.com/share/link?shareid=7962&uk=4280448916
--------------------------------------------------------------------------------
【版权声明】: 本文原创于红绡枫叶, 转载请注明作者并保持文章的完整, 谢谢!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 6
支持
分享
最新回复 (5)
雪    币: 1895
活跃值: (1657)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
好贴。学习了。
2012-8-30 13:04
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
3
我对壳 都不了解MARK
2012-8-30 14:01
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
4
前排站位 收藏之
2012-8-31 22:02
0
雪    币: 154
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
脚本不错,加入自己的思路,谢谢分享!!!
2012-9-3 00:59
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
思路很好,受教了。
2012-9-6 20:16
0
游客
登录 | 注册 方可回帖
返回
//