Files
hakril-PythonForWindows/samples/local_debugger.py
T
Clement Rouault 5b66242680 writing some doc
2016-04-18 23:09:26 +02:00

52 lines
1.4 KiB
Python

import ctypes
import windows
import windows.debug
from windows.generated_def.winstructs import *
ct = windows.current_thread
t = [t for t in windows.current_process.threads if t.tid == ct.tid][0]
class YoloDebugger(windows.debug.LocalDebugger):
def __init__(self, single_step_count):
super(YoloDebugger, self).__init__()
self.single_step_count = single_step_count
def on_exception(self, exc):
code = self.get_exception_code()
context = self.get_exception_context()
print("EXCEPTION !!!! Got a {0} at 0x{1:x}".format(code, context.pc))
if self.single_step_count:
self.single_step_count -= 1
return self.single_step()
return EXCEPTION_CONTINUE_EXECUTION
class YoloHXBP(windows.debug.HXBreakpoint):
def trigger(self, dbg, exc):
context = dbg.get_exception_context()
print("GOT AN HXBP <3 at 0x{0:x}".format(context.pc))
windows.current_process.write_memory(self.addr, "\x90\x90")
return dbg.single_step()
print("Your main thread is {0}".format(windows.current_thread.tid))
d = YoloDebugger(5)
# Infinite loop + nop + ret
addr = windows.native_exec.native_function.allocator.write_code("\xeb\xfe\x90\x90\x90\x90\xc3")
func_type = ctypes.CFUNCTYPE(PVOID)
func = func_type(addr)
print("Code addr = 0x{0:x}".format(addr))
t = windows.current_process.create_thread(addr, 0)
d.add_bp(YoloHXBP(addr))
t.wait()