import immlib from immlib import LogBpHook import getopt class BSU(LogBpHook): def __init__(self): LogBpHook.__init__(self) self.availableRegs = ['EIP','ESP','EDI','EAX','EBP','EDX','EBX','ESI','ECX'] def run(self,regs): """This will be executed when hooktype happens""" imm = immlib.Debugger() actaddr = "%08x" % regs['EIP'] behaviour = imm.getKnowledge(actaddr) imm.log("Hook hit at %s" % actaddr) imm.log('Set behaviour %s' % behaviour) pair = behaviour.split(':') actReg = pair[0] if (pair[1] in (self.availableRegs)): value = regs[pair[1]] else: value = int(pair[1],16) imm.setReg(actReg,value) def usage(imm): imm.Log('bsu.py -b ID:ADDRESS:REGISTER:VALUE<;><ID:ADDRESS:REGISTER:VALUE><;>...') imm.Log(' ID: something descriptive to identify your hook') imm.Log(' ADDRESS: the break point address') imm.Log(' REGISTER: the register to modify') imm.Log(' VALUE: either a set value or the name of a register whose value to copy') return 'Check usage' def main(args): imm = immlib.Debugger() try: opts,argo = getopt.getopt(args, "hb:") except: return usage(imm) for o,a in opts: if (o=='-b'): iStream = a if (o=='-h'): return usage(imm) imm.Log('Setting up the hooks...') bPoints = iStream.split(';') hooker = BSU() for p in bPoints: det = p.split(':') desc = det[0] bp = long(int(det[1],16)) behav = det[2]+':' + det[3] ret=hooker.add(desc,bp) if ret == -1: imm.Log('Counldn\'t install hook at %s %08x %s' % (desc,bp,behav)) else: imm.addKnowledge("%08x" % bp , behav) imm.Log('Installed hook at %s %08x %s' % (desc,bp,behav)) imm.addKnowledge('bsu',hooker) return 'Finished hooking, check Log to spot any failures'
There are 31,328 total registered users.
[+] expand