脱壳ZProtect 1.4.9.2 记事本默认保护
文章标题】: 脱壳ZProtect 1.4.9.2 记事本默认保护【文章作者】: Eddy
【作者邮箱】: [email protected]
【作者主页】: 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:
00972841 E8 DCF8FFFF CALL 00972122
00972122 A1 44669700 MOV EAX,DWORD PTR DS:
00972127 8078 34 00 CMP BYTE PTR DS:,0
0097212B 74 57 JE SHORT 00972184
0097212D FF15 E8109600 CALL DWORD PTR DS: ; kernel32.GetTickCount
00972133 8BC8 MOV ECX,EAX
00972135 2B0D 10659700 SUB ECX,DWORD PTR DS:
0097213B 81F9 88130000 CMP ECX,1388
00972141 76 41 JBE SHORT 00972184
00972143 FF35 14659700 PUSH DWORD PTR DS:
00972149 A3 10659700 MOV DWORD PTR DS:,EAX
0097214E FF15 58109600 CALL DWORD PTR DS: ; kernel32.ResumeThread
00972154 833D 9C6C9700 0>CMP DWORD PTR DS:,3
0097215B 7C 08 JL SHORT 00972165
0097215D 6A 00 PUSH 0
0097215F FF15 EC109600 CALL DWORD PTR DS: ; kernel32.ExitProcess
00972165 803D 90669700 0>CMP BYTE PTR DS:,0
0097216C 74 08 JE SHORT 00972176
0097216E FF05 9C6C9700 INC DWORD PTR DS:
00972174 EB 07 JMP SHORT 0097217D
00972176 8325 9C6C9700 0>AND DWORD PTR DS:,0
0097217D C605 90669700 0>MOV BYTE PTR DS:,1
00972184 56 PUSH ESI
00972185 FF7424 08 PUSH DWORD PTR SS:
00972189 FF15 2C659700 CALL DWORD PTR DS:
0097218F 8BF0 MOV ESI,EAX
00972191 A1 646C9700 MOV EAX,DWORD PTR DS:
00972196 2B05 606C9700 SUB EAX,DWORD PTR DS:
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:
009721AD 8B04B0 MOV EAX,DWORD PTR DS: //这里出现真实的API地址
009721B0 894424 2C MOV DWORD PTR SS:,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:,0FF
009F0008 75 3F JNZ SHORT 009F0049
009F000A 8078 01 15 CMP BYTE PTR DS:,15 判断是不是FF15
009F000E 75 45 JNZ SHORT 009F0055
009F0010 8B58 02 MOV EBX,DWORD PTR DS:
009F0013 807B 03 00 CMP BYTE PTR DS:,0
009F0017 75 30 JNZ SHORT 009F0049
009F0019 8B0B MOV ECX,DWORD PTR DS:
009F001B 50 PUSH EAX
009F001C FF71 01 PUSH DWORD PTR DS:
009F001F FF15 2C659700 CALL DWORD PTR DS: 壳处理IAT函数
009F0025 8BF0 MOV ESI,EAX
009F0027 A1 646C9700 MOV EAX,DWORD PTR DS:
009F002C 2B05 606C9700 SUB EAX,DWORD PTR DS:
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:
009F0043 8B3CB0 MOV EDI,DWORD PTR DS:
009F0046 893B MOV DWORD PTR DS:,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:,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 Eddy 是老兄的马甲 ? 原帖由 Nisy 于 2009-11-9 13:00 发表 https://www.chinapyg.com/images/common/back.gif
Eddy 是老兄的马甲 ?
本论坛有Eddy这个用户?Eddy是后来给自己整的个代号,sjh717142是原来一直用的……/:013 高手,如果能有个自动脱壳机就好了 希望能做个视频教程那就好了,对了,还有就是有注册框的,如果不能试用的话如何跳到OEP哪,有试用的可以到OEP,没有的过不去注册框,还有不会修复,还望大牛指教,谢谢了 不会这么简单吧 原帖由 a2006 于 2009-11-20 09:29 发表 https://www.chinapyg.com/images/common/back.gif
不会这么简单吧
看着很简单 是吧^_ /:010 高手就是不一样 楼主能出个视频教程给我们学习下么 相当深奥。。。。