用OD载入BP IsDebuggerPresent,F9,停了下来:
77E52740 > 64:A1 18000000 MOV EAX, DWORD PTR FS:[18]
77E52746 8B40 30 MOV EAX, DWORD PTR DS:[EAX+30]
77E52749 0FB640 02 MOVZX EAX, BYTE PTR DS:[EAX+2]
77E5274D C3 RETN
F8到RETN的前这行看看[EAX+2]我是7FFDF002=01, 重新载入把7FFDF002值改为0(这样可跳过ASPR对级调试检查),F9这时有异常会停下来这时就用SHIFT+F9过大约30次左右你可看到这样代码
00C23D5F 3100 XOR DWORD PTR DS:[EAX], EAX
00C23D61 64:8F05 0000000>POP DWORD PTR FS:[0]
00C23D68 58 POP EAX
00C23D69 833D BC7EC200 0>CMP DWORD PTR DS:[C27EBC], 0
00C23D70 74 14 JE SHORT 00C23D86
00C23D72 6A 0C PUSH 0C
00C23D74 B9 BC7EC200 MOV ECX, 0C27EBC
00C23D79 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
00C23D7C BA 04000000 MOV EDX, 4
00C23D81 E8 8ED2FFFF CALL 00C21014
00C23D86 FF75 FC PUSH DWORD PTR SS:[EBP-4]
00C23D89 FF75 F8 PUSH DWORD PTR SS:[EBP-8]
00C23D8C 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
00C23D8F 8338 00 CMP DWORD PTR DS:[EAX], 0
00C23D92 74 02 JE SHORT 00C23D96
00C23D94 FF30 PUSH DWORD PTR DS:[EAX]
00C23D96 FF75 F0 PUSH DWORD PTR SS:[EBP-10]
00C23D99 FF75 EC PUSH DWORD PTR SS:[EBP-14]
00C23D9C C3 RETN
这是典型ASPR最后个异常(两个JE加个RETN),这时不要SHIFT+F9了不然会运行要用SHIFT+F7进入这时会停在系统空间用ALT+M打开MEMORY MAP,找到SYSTEM CLEAN所在位置第个SECTION如下. Address size section contains
00401000 00161000 code
在上面这个地方“右键—> memory po _disibledevent=> 打开importREC,选中IATRVA填入16F21C,size:988,按下"获得输入信息",这时可找到些指针,但还用很多无效,按"显示无效--->追踪层次1(分解),可修复大部分指针,还有些得手动了,不过我发现用新版ASPR插件竞可以全部修复(试了几个都可以,所以也就偷懒了,用ASPR插件修复,还有几个无效指针其实是垃圾把它们CUT了(看看它们值就知道是不是垃圾了).然后FIX DUMPED.EXE为DUMPED_.EXE. 下面就是修复入口处了.
回到原.按几下F8,过了RETN我们就来到入口了.
005613DF 0000 ADD BYTE PTR DS:[EAX], AL
005613E1 0000 ADD BYTE PTR DS:[EAX], AL
005613E3 0000 ADD BYTE PTR DS:[EAX], AL
005613E5 0000 ADD BYTE PTR DS:[EAX], AL
005613E7 0000 ADD BYTE PTR DS:[EAX], AL
005613E9 0000 ADD BYTE PTR DS:[EAX], AL
005613EB E8 4C5FEAFF CALL Cl.0040733C
005613F0 FF15 84A15600 CALL DWORD PTR DS:[56A184] ; Cl.005608F0
005613F6 E8 BD39EAFF CALL Cl.00404DB8
005613FB 90 NOP
是停在5613F0,可以断定前面CALL已运行过了.而且入口处和以前样被 改成了0,我们要把它补回,但是新版入口代码似乎不好找(如果谁发现更好思路方法告诉我声:-),不过看这个特点
是用D7写,D7代码特征是
PUSH EBP
MOV EBP,ESP
ADD ESP -10(也可能是ADD ESP -0C)
MOV EAX,******
所以只要找出最后这句MOV,EAX,******,中*****值就可以补回去了,还记得开始要大家记做EBX值560D08吗,它就是这里值.这样我们就可以打开DUMP出并已经修复引入表DUMPED_.EXE,把这段代码补回去了,补完后是这样 005613E0 > $ 55 PUSH EBP
005613E1 . 8BEC MOV EBP, ESP
005613E3 . 83C4 F0 ADD ESP, -10
005613E6 . B8 080D5600 MOV EAX, jjjj_.00560D08
005613EB . E8 4C5FEAFF CALL jjjj_.0040733C
005613F0 . FF15 84A15600 CALL DWORD PTR DS:[56A184] ; jjjj_.005608F0
005613F6 . E8 BD39EAFF CALL jjjj_.00404DB8
保存后用LOADPE把入口点改成1613e0,OK,可以运行了.脱壳完成.
最新评论