如何在免疫调试器中使用 fastloghook

逆向工程 Python 免疫调试器
2021-07-05 22:18:42

fastloghook 如何在免疫调试器 pycommand 部分工作?我想不通。我尝试的一切都不起作用,我知道这段代码一团糟。我真的不明白 fastloghook 当 bphook 工作得如此好时,这让我发疯。我需要一个解释:/

#!/usr/bin/env python

import immlib
import struct
from immlib import FastLogHook

def main(args):

"""
    Will hook and run its own assembly code then return control
"""

imm = immlib.Debugger()

# Set name
Name = "hippie"

fast = imm.getKnowledge(Name)

if fast:
    hook_list = fast.getAllLog()
    imm.log(str(hook_list))
        imm.log("%s" item[1[0]])

# Instantiate fastloghook
fast = immlib.FastLogHook(imm)

# Primary address to hook on to
fast.logFunction(imm.getAddress("msvcrt.strcpy"))

# Takes register and offset. dereference parameters from the stack
# or capture data at a known offset from a register
fast.logBaseDisplacement('ESP', 0x4)
fast.logBaseDisplacement('ESP', 0x8)

# Tracks the value of a specific register when the hook is hit
fast.logRegister("ESP")

# Logs known memory offset at hook time
# fast.logDirectMemory()

# Set the hook
fast.Hook()

# Save data so we can retrieve results later
imm.addKnowledge(Name, fast, force_add=1)

return "LogBPHook installed"`
1个回答

FastLogHook是 Immunity Debugger 附带的 13 种钩子类型之一。本质上,这种类型的钩子的目的是使用微小的程序集存根将执行转移到钩子函数,以便记录特定的寄存器和/或内存位置。FastLogHook本质上是一个 python 对象,它允许我们相对容易地设置硬钩。

setup的定义如下:

debugger  = immlib.Debugger()
fast_hook = immlib.FasLogHook(debugger)

fast_hook.logFunction(address, number_of_arguments)
fast_hook.logRegister(register)
fast_hook.logDirectMemory(address)
fast_hook.logBaseDisplacement( register, offset ) 

logFunction()返回我们需要覆盖的原始指令的地址,跳转到我们的钩子函数。这是绝对需要的。

logRegister()logDirectMemory()logBaseDisplacement()是分别在挂钩时间跟踪特定寄存器、内存位置或与寄存器的特定偏移量的特定值的方法。

FastLogHook不会中断执行并将结果平滑地记录到调试器对象中。另一方面,BpHook是完全不同类型的钩子。BPHook被调用时,它将停止执行。