#!/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时,它将暂停执行。
评论
哦,现在我真的很傻,我认为运行第一个脚本后的抗扰度调试器会自行调用该脚本并将结果记录到我的日志窗口中。但是我必须再次运行脚本才能将结果返回给我。
–user2464
13年7月17日在12:35
究竟。就您的脚本而言。 logFunction具有以下原型logFunction(address,number_of_arguments)。如果number_of_arguments没什么,就像您一样,它很可能会尝试挂钩函数的出口。为了挂接入口点,您需要提供2个args。此外,logDirectMemory(address)需要一个地址来记录。您也缺少该部分。
– PSS
13年7月17日在13:04