D不忽略内存访问异常,其余全忽略,隐藏OD,载入程序:
00401000 N> 68 01D04000 push NOTEPADy.0040D001 停在这里
00401005 E8 01000000 call NOTEPADy.0040100B
0040100A C3 retn
按Shift+F9运行,N次后,注意堆栈区:
0013FF3C 0013FF44 指针到下一个 SEH 记录
0013FF40 00FC4347 SE 句柄
0013FF44 0013FFE0 指针到下一个 SEH 记录
0013FF48 00FC4C89 SE 句柄
0013FF4C 0013FF90
0013FF50 00FB0000
0013FF54 00F80000
0013FF58 00FC4178
0013FF5C 00FE31B0 ASCII "+U69wAAApMo=" 出现硬盘指纹
继续四次后,再看堆栈区:
0013FF64 /0013FFE0 指针到下一个 SEH 记录
0013FF68 |00AA39CF SE 句柄
0013FF6C |00A90000
0013FF70 |00A70000
0013FF74 |00AA4138
0013FF78 |00AB41E8 硬盘指纹消失
0013FF7C |00AB55D8
异常停在:
00AA39EC 3100 xor dword ptr ds:[eax],eax 最后一次异常停在这里,壳已解压用LordPE脱壳
00AA39EE 64:8F05 0000000>pop dword ptr fs:[0]
00AA39F5 58 pop eax
00AA39F6 833D B07EAA00 0>cmp dword ptr ds:[AA7EB0],0
00AA39FD 74 14 je short 00AA3A13
00AA39FF 6A 0C push 0C
00AA3A01 B9 B07EAA00 mov ecx,0AA7EB0
00AA3A06 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00AA3A09 BA 04000000 mov edx,4
00AA3A0E E8 2DD1FFFF call 00AA0B40
00AA3A13 FF75 FC push dword ptr ss:[ebp-4]
00AA3A16 FF75 F8 push dword ptr ss:[ebp-8]
00AA3A19 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00AA3A1C 8338 00 cmp dword ptr ds:[eax],0
00AA3A1F 74 02 je short 00AA3A23
00AA3A21 FF30 push dword ptr ds:[eax]
00AA3A23 FF75 F0 push dword ptr ss:[ebp-10]
00AA3A26 FF75 EC push dword ptr ss:[ebp-14]
00AA3A29 C3 retn 这里下F2断点,Shift+F9运行到此,随后取消
在命令行下tc ebp==12fff0,一会儿到:
00AB57CC /EB 02 jmp short 00AB57D0
00AB57CE |CD20 F2EB019A vxdjump 9A01EBF2
00AB57D4 51 push ecx
00AB57D5 F3: prefix rep:
00AB57D6 EB 02 jmp short 00AB57DA
按F7会走到:
00AB583A 896C24 00 mov dword ptr ss:[esp],ebp //Stolen Code第一句,是PUSH EBP的变形
00AB583E 8BEC mov ebp,esp //Stolen Code第二句
00AB5840 83EC 44 sub esp,44 //Stolen Code第三句 ,标准化为ADD ESP,-44
00AB5843 /3E:EB 02 jmp short 00AB5848
OK!Alt+M,在00401000段下F2断点,Shift+F9运行:
004010CD 0000 add byte ptr ds:[eax],al 真OEP在这
004010CF 0000 add byte ptr ds:[eax],al
004010D1 0000 add byte ptr ds:[eax],al
004010D3 FF15 E4634000 call dword ptr ds:[4063E4] 停在这里,伪OEP处
004010D9 8BF0 mov esi,eax
004010DB 8A00 mov al,byte ptr ds:[eax]
004010DD 3C 22 cmp al,22
用Imp修复脱壳文件,载入程序,填入OEP=1000,点IAT自动搜索,填入大小=1000,点获得输入信息,用追踪等次1
修复,再用ASProtect 1.22插件修复,还有很多无效指针,只能手动修复,对每个无效指针点右键单击选择
Deasm\HexView查看,如果Imp提示read error!则可以安全剪切!再把OEP改为10CD,修复!
然后载入脱壳后程序,把抽取的字节补上去,保存文件!能正常运行了!
问题1 在命令行下tc ebp==12fff0,一会儿到:
00AB57CC /EB 02 jmp short 00AB57D0
00AB57CE |CD20 F2EB019A vxdjump 9A01EBF2
00AB57D4 51 push ecx
00AB57D5 F3: prefix rep:
00AB57D6 EB 02 jmp short 00AB57DA
为什么要下 tc ebp==12fff0 这个命令?
为什么是12fff0?是固定的 还是随机的?如何查看这个数值?
问题2
按F7会走到:
00AB583A 896C24 00 mov dword ptr ss:[esp],ebp //Stolen Code第一句,是PUSH EBP的变形
00AB583E 8BEC mov ebp,esp //Stolen Code第二句
00AB5840 83EC 44 sub esp,44 //Stolen Code第三句 ,标准化为ADD ESP,-44
如何判断
ASProtect 1.23 RC4 这个壳,如何判断有无Stolen Code?
有没工具查看ASProtect的保护方式?
问题3
OK!Alt+M,在00401000段下F2断点,Shift+F9运行:
004010CD 0000 add byte ptr ds:[eax],al 真OEP在这
004010CF 0000 add byte ptr ds:[eax],al
004010D1 0000 add byte ptr ds:[eax],al
004010D3 FF15 E4634000 call dword ptr ds:[4063E4] 停在这里,伪OEP处
004010D9 8BF0 mov esi,eax
004010DB 8A00 mov al,byte ptr ds:[eax]
004010DD 3C 22 cmp al,22
如何判断真实OEP位置?如果不知道OEP?如何查找
谢谢指点
[课程]Linux pwn 探索篇!