使用winappdbg设置断点后继续访问冲突

时间:2013-02-24 19:20:15

标签: python debugging breakpoints access-violation ida

我正在使用winappdbg框架在python中构建调试器。

我可以使用event.debug.break_at(event.get_pid(),address)设置一些断点,以便设置断点但是在设置certin断点之后(而不是在设置它们时,但是一旦程序命中它们!)i获取访问冲突异常。

例如,我可以在0x48d1ea或0x47a001设置一个访问点,但如果我在0x408020设置一个访问点,我会得到异常。

模块基地址是0x400000。

0048D0BE: xor esi,eax

0048D0C0: call [winamp!start+0x25c1]

760DCC50: add [ebx],dh

Access Violation

Exception event (00000001) at address 779315DE, process 9172, thread 9616

b.t.w 我正在从IDA生成的pida文件中获取地址以设置断点。 我重新定位了文件,因此地址应该对齐

谢谢!

2 个答案:

答案 0 :(得分:0)

我的第一个猜测是你试图在指令中间设置断点。我的第二个猜测,你也在修改寄存器的内容,这是写入[ebx]时访问冲突的原因。 (另请注意,0x779315DE可能是在ntdll.dll而不是winamp.exe,因此它可能完全不同于其他内容。)

但如果没有更多信息我肯定不知道。你能在你提到的那些地址发布代码吗?您是否尝试继续例外并查看会发生什么?寄存器的内容也会有所帮助,就像尝试使用Microsoft的调试器(ntsd.exe)来查看问题是否特定于WinAppDbg一样。

关于IDA的地址,您可以尝试使用相对地址来避免ASLR出现问题。例如,如果“winamp”模块基数为0x400000且断点应为0x408020,则可以将断点设置为“winamp!0x8020”,如下所示:

address = event.get_process().resolve_label("winamp!0x8020")
event.debug.break_at(event.get_pid(), address)

希望这有帮助! :)

答案 1 :(得分:0)

显然pida_dump脚本没有得到正确的基址,所以当我做了一个rebase时代码就像

地址 - old_base_address + new_base_address

因为old_base_address很糟糕,它错过了我的BP。

感谢任何帮助!