脱壳ZProtect 1.4.9.2 记事本默认保护

Eddy 发布于2009-11-8 23:52:53 分类: 技术心得 已浏览loading 网友评论0条 我要评论

 

【文章标题】: 脱壳ZProtect 1.4.9.2 记事本默认保护
【文章作者】: Eddy
【作者邮箱】: eddyblog2009@gmail.com
【作者主页】: http://www.rrgod.com
【作者QQ号】: 860822214
【软件名称】: NotePad
【下载地址】: 大家都有……
【加壳方式】: ZProtect 1.4.9.2
【保护方式】: Free
【编写语言】: VC
【使用工具】: OD
【操作平台】: XP SP2
【作者声明】: 学习脱壳……
--------------------------------------------------------------------------------
【详细过程】
  关于ZP加壳的程序如何到OEP,很简单。F7单步到pushad,然后利用ESP定律即可到达OEP。
  
  到OEP后我们来修复IAT。关于ZP如何处理IAT的,可以去看hyperchem的脱文,那个版本和1.4.9.2的基本一样,不同之处看完我这个就明白了。
  
  随便跟进一个call,观察一下
引用:

0040E684    68 50276710     PUSH 10672750
0040E689  ^ E9 96FFFFFF     JMP 0040E624
0040E624  - E9 13425600     JMP 0097283C
0097283C    60              PUSHAD
0097283D    FF7424 20       PUSH DWORD PTR SS:[ESP+20]
00972841    E8 DCF8FFFF     CALL 00972122
00972122    A1 44669700     MOV EAX,DWORD PTR DS:[976644]
00972127    8078 34 00      CMP BYTE PTR DS:[EAX+34],0
0097212B    74 57           JE SHORT 00972184
0097212D    FF15 E8109600   CALL DWORD PTR DS:[9610E8]               ; kernel32.GetTickCount
00972133    8BC8            MOV ECX,EAX
00972135    2B0D 10659700   SUB ECX,DWORD PTR DS:[976510]
0097213B    81F9 88130000   CMP ECX,1388
00972141    76 41           JBE SHORT 00972184
00972143    FF35 14659700   PUSH DWORD PTR DS:[976514]
00972149    A3 10659700     MOV DWORD PTR DS:[976510],EAX
0097214E    FF15 58109600   CALL DWORD PTR DS:[961058]               ; kernel32.ResumeThread
00972154    833D 9C6C9700 0>CMP DWORD PTR DS:[976C9C],3
0097215B    7C 08           JL SHORT 00972165
0097215D    6A 00           PUSH 0
0097215F    FF15 EC109600   CALL DWORD PTR DS:[9610EC]               ; kernel32.ExitProcess
00972165    803D 90669700 0>CMP BYTE PTR DS:[976690],0
0097216C    74 08           JE SHORT 00972176
0097216E    FF05 9C6C9700   INC DWORD PTR DS:[976C9C]
00972174    EB 07           JMP SHORT 0097217D
00972176    8325 9C6C9700 0>AND DWORD PTR DS:[976C9C],0
0097217D    C605 90669700 0>MOV BYTE PTR DS:[976690],1
00972184    56              PUSH ESI
00972185    FF7424 08       PUSH DWORD PTR SS:[ESP+8]
00972189    FF15 2C659700   CALL DWORD PTR DS:[97652C]
0097218F    8BF0            MOV ESI,EAX
00972191    A1 646C9700     MOV EAX,DWORD PTR DS:[976C64]
00972196    2B05 606C9700   SUB EAX,DWORD PTR DS:[976C60]
0097219C    C1F8 02         SAR EAX,2
0097219F    3BF0            CMP ESI,EAX
009721A1    72 05           JB SHORT 009721A8
009721A3    E8 7649FFFF     CALL 00966B1E
009721A8    A1 606C9700     MOV EAX,DWORD PTR DS:[976C60]
009721AD    8B04B0          MOV EAX,DWORD PTR DS:[EAX+ESI*4]          //这里出现真实的API地址
009721B0    894424 2C       MOV DWORD PTR SS:[ESP+2C],EAX
009721B4    5E              POP ESI
009721B5    C2 0400         RETN 4
修复IAT代码:
引用:
  009F0000    B8 D3104000     MOV EAX,4010D3                 搜索FF15 查找第一个位置
  009F0005    8038 FF         CMP BYTE PTR DS:[EAX],0FF
  009F0008    75 3F           JNZ SHORT 009F0049
  009F000A    8078 01 15      CMP BYTE PTR DS:[EAX+1],15     判断是不是FF15
  009F000E    75 45           JNZ SHORT 009F0055
  009F0010    8B58 02         MOV EBX,DWORD PTR DS:[EAX+2]
  009F0013    807B 03 00      CMP BYTE PTR DS:[EBX+3],0
  009F0017    75 30           JNZ SHORT 009F0049
  009F0019    8B0B            MOV ECX,DWORD PTR DS:[EBX]
  009F001B    50              PUSH EAX
  009F001C    FF71 01         PUSH DWORD PTR DS:[ECX+1]
  009F001F    FF15 2C659700   CALL DWORD PTR DS:[97652C]     壳处理IAT函数
  009F0025    8BF0            MOV ESI,EAX
  009F0027    A1 646C9700     MOV EAX,DWORD PTR DS:[976C64]
  009F002C    2B05 606C9700   SUB EAX,DWORD PTR DS:[976C60]
  009F0032    C1F8 02         SAR EAX,2
  009F0035    3BF0            CMP ESI,EAX
  009F0037    72 05           JB SHORT 009F003E
  009F0039    E8 E06AF7FF     CALL 00966B1E
  009F003E    A1 606C9700     MOV EAX,DWORD PTR DS:[976C60]
  009F0043    8B3CB0          MOV EDI,DWORD PTR DS:[EAX+ESI*4]
  009F0046    893B            MOV DWORD PTR DS:[EBX],EDI
  009F0048    58              POP EAX
  009F0049    83C0 01         ADD EAX,1
  009F004C    3D 00005000     CMP EAX,500000                      搜索终点位置
  009F0051  ^ 72 B2           JB SHORT 009F0005
  009F0053    EB 08           JMP SHORT 009F005D
  009F0055    8078 01 25      CMP BYTE PTR DS:[EAX+1],25          判断是不是FF25
  009F0059 >^ 75 EE           JNZ SHORT 009F0049
  009F005B  ^ EB B3           JMP SHORT 009F0010
  009F005D  - E9 6A10A1FF     JMP notepad_.004010CC
修复完后,然后用LordPE来DUMP,Import REC修复,全部有效^_修复转存文件,成功运行脱壳后文件。
  
  收工!
  
【经验总结】
  学习自己写代码来修复IAT,学习ZP……
  
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!
                                                       2009年11月08日 23:40:25

 

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/technique/80.html     欢迎订阅Eddy Blog

关于 Zprotect  脱壳  的相关文章

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言