- UID
- 52618
注册时间2008-6-2
阅读权限10
最后登录1970-1-1
周游历练
该用户从未签到
|
文章标题】: 脱壳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:[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修复,全部有效^_修复转存文件,成功运行脱壳后文件。
收工!
加壳文件和脱壳后的文件下载见附件。
试炼文件.rar
(472.42 KB, 下载次数: 61)
--------------------------------------------------------------------------------
【经验总结】
学习自己写代码来修复IAT,学习ZP……
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!
2009年11月08日 23:40:25 |
评分
-
查看全部评分
|