F9运行,
异常1,
0040D232 8DC0 LEA EAX,EAX ; 非法使用寄存器
0040D234 CD 20 INT 20
用Shift+F9忽略异常继续运行。
异常2.
0040D4D7 8DC0 LEA EAX,EAX ; 非法使用寄存器
0040D4D9 CD 20 INT 20
0040D4DB 64:8F03 POP DWORD PTR FS:[EBX]
再用Shift+F9程序运行。
Ctrl+F2重来,用插件隐藏Od.
通过前面的SEH经验看堆栈。
0012FF9C 0012FFE0 指针到下一个 SEH 记录
0012FFA0 0040D4AC SE 句柄
40D4AC是异常处理完毕出口。
我们Ctrl+G ,输入 40D4AC ,回车
0040D4AC 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C] 到这里下断点,F9运行断在这里后取消断点
0040D4B0 8380 B8000000 0>ADD DWORD PTR DS:[EAX+B8],4
注意这里的堆栈值40D4D7+4=40D4DB
学自jeffzhang的未知加密壳脱文。
0040D4B7 53 PUSH EBX
0040D4B8 33DB XOR EBX,EBX
0040D4BA 8958 04 MOV DWORD PTR DS:[EAX+4],EBX
0040D4BD 8958 08 MOV DWORD PTR DS:[EAX+8],EBX
0040D4C0 C740 18 5501000>MOV DWORD PTR DS:[EAX+18],155
0040D4C7 8958 0C MOV DWORD PTR DS:[EAX+C],EBX
0040D4CA 8958 10 MOV DWORD PTR DS:[EAX+10],EBX
0040D4CD 5B POP EBX
0040D4CE 33C0 XOR EAX,EAX //表示已修复,可以从异常处继续执行
0040D4D0 C3 RETN
如果你执行这里的返回语句,将迷失在系统领空。
0040D4D1 64:FF33 PUSH DWORD PTR FS:[EBX]
0040D4D4 64:8923 MOV DWORD PTR FS:[EBX],ESP
0040D4D7 8DC0 LEA EAX,EAX ; 非法使用寄存器
0040D4D9 CD 20 INT 20
0040D4DB 64:8F03 POP DWORD PTR FS:[EBX] 在这里下断点吧。顺利到达后取消断点。
问题:
1.主要的问题是“如果你执行这里的返回语句,将迷失在系统领空”。这一段没有跳转,如何不执行这条语句呢?
2.我在“0040D4D9”处下了断点,然后按Shift+F9,确实可以在0040D4D9处断下,可我不明白为什么可以,执行0040D4D0 C3 RETN不是会迷失在系统领空里吗?
3.0040D4D9这个地址是通过“注意这里的堆栈值40D4D7+4=40D4DB 学自jeffzhang的未知加密壳脱文。”计算而来,能给一个关于jeffzhang此文的链接吗?谢谢
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)