我正在尝试调试读取父进程 Id(PPID) 的应用程序,以检查是否正在调试应用程序。它期望 PPID 是 explorer.exe 的 PID,如果不是,则退出。
为了绕过这个,我写了一个 pycommand 脚本。该脚本在 Process32NextW 和 Process32FirstW 结束时(以及在 pops 和 ret 之前)中断。下面是我正在使用的钩子:
class Process32NextWHook(LogBpHook):
def __init__(self):
LogBpHook.__init__(self)
return
def run(self, regs):
imm = immlib.Debugger()
# Get the Out_ LPPROCESSENTRY32 lppe
PROCESSENTRY32 = regs["EBP"] + 16
# Get the DWORD th32ParentProcessID
target_ppid = PROCESSENTRY32 + 24
# Get the DWORD th32ProcessID
target_pid = imm.readMemory(PROCESSENTRY32 + 12, 4)
# Get the debugged process id
self_pid = imm.getDebuggedPid()
# If the target pid matches our pid
if int(target_pid.encode("HEX"), 16) == self_pid:
# Set our ppid to the pid of explorer.exe
imm.writeMemory(target_ppid, explorer_pid)
imm.log("[*] patch_ppid patched ppid!!")
return
但是,那
if int(target_pid.encode("HEX"), 16) == self_pid:
从来都不是真的。我的猜测是我使用了错误的偏移量,但我不知道正确的偏移量是多少。我可以简单地修补反调试措施,但这不会是一个学习经验。
谢谢。