-
-
[求助]关于Debug Api 处理SEH异常的方法
-
发表于: 2009-8-18 15:27 3559
-
例如:
00799763 61 POPAD
00799764 50 PUSH EAX
00799765 33C0 XOR EAX, EAX
00799767 64:FF30 PUSH DWORD PTR FS:[EAX]
0079976A 64:8920 MOV DWORD PTR FS:[EAX], ESP
0079976D EB 01 JMP SHORT 00799770
0079976F 8700 XCHG DWORD PTR [EAX], EAX
00799771 0000 ADD BYTE PTR [EAX], AL
00799773 0000 ADD BYTE PTR [EAX], AL
00799775 0000 ADD BYTE PTR [EAX], AL
00799777 0000 ADD BYTE PTR [EAX], AL
00799779 0000 ADD BYTE PTR [EAX], AL
0079977B 0000 ADD BYTE PTR [EAX], AL
0079977D 0000 ADD BYTE PTR [EAX], AL
0079977F 0000 ADD BYTE PTR [EAX], AL
当执行到:
00799770 0000 ADD BYTE PTR [EAX], AL
00799772 0000 ADD BYTE PTR [EAX], AL
00799774 0000 ADD BYTE PTR [EAX], AL
00799776 0000 ADD BYTE PTR [EAX], AL
00799778 0000 ADD BYTE PTR [EAX], AL
0079977A 0000 ADD BYTE PTR [EAX], AL
0799770时发生异常
如此是在od的话,可以按shift+f9通过
我在用debug api时也接收到这个异常了
0012FFBC 0012FFE0 指向下一个 SEH 记录的指针
0012FFC0 00799713 SE处理程序
我直接
int she_addr;
int esp_addr = Regs.Esp + 4;
ReadProcessMemory(pi.hProcess,(LPVOID)esp_addr, &she_addr, sizeof(she_addr), NULL);
Regs.Eip = she_addr;
SetThreadContext(pi.hThread, &Regs);
这样,是可以通过了,但是有问题....
请问,要怎么去处理它?
00799763 61 POPAD
00799764 50 PUSH EAX
00799765 33C0 XOR EAX, EAX
00799767 64:FF30 PUSH DWORD PTR FS:[EAX]
0079976A 64:8920 MOV DWORD PTR FS:[EAX], ESP
0079976D EB 01 JMP SHORT 00799770
0079976F 8700 XCHG DWORD PTR [EAX], EAX
00799771 0000 ADD BYTE PTR [EAX], AL
00799773 0000 ADD BYTE PTR [EAX], AL
00799775 0000 ADD BYTE PTR [EAX], AL
00799777 0000 ADD BYTE PTR [EAX], AL
00799779 0000 ADD BYTE PTR [EAX], AL
0079977B 0000 ADD BYTE PTR [EAX], AL
0079977D 0000 ADD BYTE PTR [EAX], AL
0079977F 0000 ADD BYTE PTR [EAX], AL
当执行到:
00799770 0000 ADD BYTE PTR [EAX], AL
00799772 0000 ADD BYTE PTR [EAX], AL
00799774 0000 ADD BYTE PTR [EAX], AL
00799776 0000 ADD BYTE PTR [EAX], AL
00799778 0000 ADD BYTE PTR [EAX], AL
0079977A 0000 ADD BYTE PTR [EAX], AL
0799770时发生异常
如此是在od的话,可以按shift+f9通过
我在用debug api时也接收到这个异常了
0012FFBC 0012FFE0 指向下一个 SEH 记录的指针
0012FFC0 00799713 SE处理程序
我直接
int she_addr;
int esp_addr = Regs.Esp + 4;
ReadProcessMemory(pi.hProcess,(LPVOID)esp_addr, &she_addr, sizeof(she_addr), NULL);
Regs.Eip = she_addr;
SetThreadContext(pi.hThread, &Regs);
这样,是可以通过了,但是有问题....
请问,要怎么去处理它?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [求助]请问这个壳怎么脱? 2552
- Win7下如何利用CreateProcess创建有管理员身份进程 12150
- [求助]如何按照每4bit一位去取数据? 4438
- [求助]如何实现MFC函数的Hook ? 5462
- [求助]是否有工具可以修改文件的CRC值 3968
看原图
赞赏
雪币:
留言: