diff options
Diffstat (limited to 'example/ida')
| -rw-r--r-- | example/ida/ctype_propagation.py | 38 | ||||
| -rw-r--r-- | example/ida/depgraph.py | 24 | ||||
| -rw-r--r-- | example/ida/graph_ir.py | 20 |
3 files changed, 41 insertions, 41 deletions
diff --git a/example/ida/ctype_propagation.py b/example/ida/ctype_propagation.py index 3de81d0d..3dcd8b98 100644 --- a/example/ida/ctype_propagation.py +++ b/example/ida/ctype_propagation.py @@ -148,20 +148,20 @@ class MyCHandler(CHandler): class TypePropagationEngine(SymbExecCType): - def __init__(self, ir_arch, types_mngr, state): + def __init__(self, lifter, types_mngr, state): mychandler = MyCHandler(types_mngr, state.symbols) - super(TypePropagationEngine, self).__init__(ir_arch, + super(TypePropagationEngine, self).__init__(lifter, state.symbols, mychandler) class SymbExecCTypeFix(SymbExecCType): - def __init__(self, ir_arch, + def __init__(self, lifter, symbols, chandler, cst_propag_link, sb_expr_simp=expr_simp): - super(SymbExecCTypeFix, self).__init__(ir_arch, + super(SymbExecCTypeFix, self).__init__(lifter, symbols, chandler, sb_expr_simp=expr_simp) @@ -177,7 +177,7 @@ class SymbExecCTypeFix(SymbExecCType): offset2cmt = {} for index, assignblk in enumerate(irb): - if set(assignblk) == set([self.ir_arch.IRDst, self.ir_arch.pc]): + if set(assignblk) == set([self.lifter.IRDst, self.lifter.pc]): # Don't display on jxx continue instr = assignblk.instr @@ -187,7 +187,7 @@ class SymbExecCTypeFix(SymbExecCType): todo = set() # Replace PC with value to match IR args - pc_fixed = {self.ir_arch.pc: m2_expr.ExprInt(instr.offset + instr.l, self.ir_arch.pc.size)} + pc_fixed = {self.lifter.pc: m2_expr.ExprInt(instr.offset + instr.l, self.lifter.pc.size)} inputs = tmp_r inputs.update(arg for arg in tmp_w if arg.is_mem()) for arg in inputs: @@ -209,14 +209,14 @@ class SymbExecCTypeFix(SymbExecCType): idc.set_cmt(offset, '\n'.join(value), 0) print("%x\n" % offset, '\n'.join(value)) - return self.eval_expr(self.ir_arch.IRDst) + return self.eval_expr(self.lifter.IRDst) class CTypeEngineFixer(SymbExecCTypeFix): - def __init__(self, ir_arch, types_mngr, state, cst_propag_link): + def __init__(self, lifter, types_mngr, state, cst_propag_link): mychandler = MyCHandler(types_mngr, state.symbols) - super(CTypeEngineFixer, self).__init__(ir_arch, + super(CTypeEngineFixer, self).__init__(lifter, state.symbols, mychandler, cst_propag_link) @@ -273,16 +273,16 @@ def analyse_function(): lifter_model_callCallStackFixer = get_lifter_model_call_call_fixer(lifter_model_call) - ir_arch = lifter_model_callCallStackFixer(loc_db) + lifter = lifter_model_callCallStackFixer(loc_db) asmcfg = mdis.dis_multiblock(addr) # Generate IR - ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) + ircfg = lifter.new_ircfg_from_asmcfg(asmcfg) cst_propag_link = {} if settings.cUnalias.value: - init_infos = {ir_arch.sp: ir_arch.arch.regs.regs_init[ir_arch.sp] } - cst_propag_link = propagate_cst_expr(ir_arch, ircfg, addr, init_infos) + init_infos = {lifter.sp: lifter.arch.regs.regs_init[lifter.sp] } + cst_propag_link = propagate_cst_expr(lifter, ircfg, addr, init_infos) types_mngr = get_types_mngr(settings.headerFile.value, settings.arch.value) @@ -318,8 +318,8 @@ def analyse_function(): assignblk_head = AssignBlock( [ - ExprAssign(ir_arch.IRDst, ExprLoc(lbl_real_start, ir_arch.IRDst.size)), - ExprAssign(ir_arch.sp, ir_arch.arch.regs.regs_init[ir_arch.sp]) + ExprAssign(lifter.IRDst, ExprLoc(lbl_real_start, lifter.IRDst.size)), + ExprAssign(lifter.sp, lifter.arch.regs.regs_init[lifter.sp]) ], first_block.lines[0] ) @@ -340,9 +340,9 @@ def analyse_function(): done.add((lbl, state)) if lbl not in ircfg.blocks: continue - symbexec_engine = TypePropagationEngine(ir_arch, types_mngr, state) + symbexec_engine = TypePropagationEngine(lifter, types_mngr, state) symbexec_engine.run_block_at(ircfg, lbl) - symbexec_engine.del_mem_above_stack(ir_arch.sp) + symbexec_engine.del_mem_above_stack(lifter.sp) sons = ircfg.successors(lbl) for son in sons: @@ -354,9 +354,9 @@ def analyse_function(): for lbl, state in viewitems(states): if lbl not in ircfg.blocks: continue - symbexec_engine = CTypeEngineFixer(ir_arch, types_mngr, state, cst_propag_link) + symbexec_engine = CTypeEngineFixer(lifter, types_mngr, state, cst_propag_link) symbexec_engine.run_block_at(ircfg, lbl) - symbexec_engine.del_mem_above_stack(ir_arch.sp) + symbexec_engine.del_mem_above_stack(lifter.sp) if __name__ == "__main__": diff --git a/example/ida/depgraph.py b/example/ida/depgraph.py index 4a0fb1e9..1ab31688 100644 --- a/example/ida/depgraph.py +++ b/example/ida/depgraph.py @@ -129,9 +129,9 @@ Method to use: if value in self.stk_args: line = self.ircfg.blocks[self.loc_key][self.line_nb].instr arg_num = self.stk_args[value] - stk_high = m2_expr.ExprInt(idc.get_spd(line.offset), ir_arch.sp.size) - stk_off = m2_expr.ExprInt(self.lifter_model_call.sp.size // 8 * arg_num, ir_arch.sp.size) - element = m2_expr.ExprMem(self.mn.regs.regs_init[ir_arch.sp] + stk_high + stk_off, self.lifter_model_call.sp.size) + stk_high = m2_expr.ExprInt(idc.get_spd(line.offset), lifter.sp.size) + stk_off = m2_expr.ExprInt(self.lifter_model_call.sp.size // 8 * arg_num, lifter.sp.size) + element = m2_expr.ExprMem(self.mn.regs.regs_init[lifter.sp] + stk_high + stk_off, self.lifter_model_call.sp.size) element = expr_simp(element) # Force stack unaliasing self.stk_unalias_force = True @@ -168,7 +168,7 @@ def clean_lines(): def treat_element(): "Display an element" - global graphs, comments, sol_nb, settings, addr, ir_arch, ircfg + global graphs, comments, sol_nb, settings, addr, lifter, ircfg try: graph = next(graphs) @@ -195,7 +195,7 @@ def treat_element(): if graph.has_loop: print('Graph has dependency loop: symbolic execution is inexact') else: - print("Possible value: %s" % next(iter(viewvalues(graph.emul(ir_arch))))) + print("Possible value: %s" % next(iter(viewvalues(graph.emul(lifter))))) for offset, elements in viewitems(comments): idc.set_cmt(offset, ", ".join(map(str, elements)), 0) @@ -207,7 +207,7 @@ def next_element(): def launch_depgraph(): - global graphs, comments, sol_nb, settings, addr, ir_arch, ircfg + global graphs, comments, sol_nb, settings, addr, lifter, ircfg # Get the current function addr = idc.get_screen_ea() func = ida_funcs.get_func(addr) @@ -220,7 +220,7 @@ def launch_depgraph(): loc_db = LocationDB() mdis = dis_engine(bs, loc_db=loc_db, dont_dis_nulstart_bloc=True) - ir_arch = lifter_model_call(loc_db) + lifter = lifter_model_call(loc_db) # Populate symbols with ida names for ad, name in idautils.Names(): @@ -231,10 +231,10 @@ def launch_depgraph(): asmcfg = mdis.dis_multiblock(func.start_ea) # Generate IR - ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) + ircfg = lifter.new_ircfg_from_asmcfg(asmcfg) # Get settings - settings = depGraphSettingsForm(ir_arch, ircfg, mn) + settings = depGraphSettingsForm(lifter, ircfg, mn) settings.Execute() loc_key, elements, line_nb = settings.loc_key, settings.elements, settings.line_nb @@ -245,14 +245,14 @@ def launch_depgraph(): fix_stack = offset is not None and settings.unalias_stack for assignblk in irb: if fix_stack: - stk_high = m2_expr.ExprInt(idc.get_spd(assignblk.instr.offset), ir_arch.sp.size) - fix_dct = {ir_arch.sp: mn.regs.regs_init[ir_arch.sp] + stk_high} + stk_high = m2_expr.ExprInt(idc.get_spd(assignblk.instr.offset), lifter.sp.size) + fix_dct = {lifter.sp: mn.regs.regs_init[lifter.sp] + stk_high} new_assignblk = {} for dst, src in viewitems(assignblk): if fix_stack: src = src.replace_expr(fix_dct) - if dst != ir_arch.sp: + if dst != lifter.sp: dst = dst.replace_expr(fix_dct) dst, src = expr_simp(dst), expr_simp(src) new_assignblk[dst] = src diff --git a/example/ida/graph_ir.py b/example/ida/graph_ir.py index c827bbe2..c7bc6201 100644 --- a/example/ida/graph_ir.py +++ b/example/ida/graph_ir.py @@ -103,14 +103,14 @@ def label_str(self): return "%s:%s" % (self.name, self.offset) -def color_irblock(irblock, ir_arch): +def color_irblock(irblock, lifter): out = [] - lbl = idaapi.COLSTR("%s:" % ir_arch.loc_db.pretty_str(irblock.loc_key), idaapi.SCOLOR_INSN) + lbl = idaapi.COLSTR("%s:" % lifter.loc_db.pretty_str(irblock.loc_key), idaapi.SCOLOR_INSN) out.append(lbl) for assignblk in irblock: for dst, src in sorted(viewitems(assignblk)): - dst_f = expr2colorstr(dst, loc_db=ir_arch.loc_db) - src_f = expr2colorstr(src, loc_db=ir_arch.loc_db) + dst_f = expr2colorstr(dst, loc_db=lifter.loc_db) + src_f = expr2colorstr(src, loc_db=lifter.loc_db) line = idaapi.COLSTR("%s = %s" % (dst_f, src_f), idaapi.SCOLOR_INSN) out.append(' %s' % line) out.append("") @@ -222,7 +222,7 @@ def build_graph(start_addr, type_graph, simplify=False, use_ida_stack=True, dont loc_db = LocationDB() mdis = dis_engine(bs, loc_db=loc_db) - ir_arch = IRADelModCallStack(loc_db) + lifter = IRADelModCallStack(loc_db) # populate symbols with ida names @@ -247,7 +247,7 @@ def build_graph(start_addr, type_graph, simplify=False, use_ida_stack=True, dont open('asm_flow.dot', 'w').write(asmcfg.dot()) print("generating IR... %x" % start_addr) - ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) + ircfg = lifter.new_ircfg_from_asmcfg(asmcfg) if verbose: print("IR ok... %x" % start_addr) @@ -271,7 +271,7 @@ def build_graph(start_addr, type_graph, simplify=False, use_ida_stack=True, dont head = list(entry_points)[0] if simplify: - ircfg_simplifier = IRCFGSimplifierCommon(ir_arch) + ircfg_simplifier = IRCFGSimplifierCommon(lifter) ircfg_simplifier.simplify(ircfg, head) title += " (simplified)" @@ -302,7 +302,7 @@ def build_graph(start_addr, type_graph, simplify=False, use_ida_stack=True, dont if irblock is None: continue regs = {} - for reg in ir_arch.get_out_regs(irblock): + for reg in lifter.get_out_regs(irblock): regs[reg] = reg assignblks = list(irblock) new_assiblk = AssignBlock(regs, assignblks[-1].instr) @@ -326,7 +326,7 @@ def build_graph(start_addr, type_graph, simplify=False, use_ida_stack=True, dont ret = ssa.graph elif type_graph == TYPE_GRAPH_IRSSAUNSSA: ircfg = self.ssa_to_unssa(ssa, head) - ircfg_simplifier = IRCFGSimplifierCommon(self.ir_arch) + ircfg_simplifier = IRCFGSimplifierCommon(self.lifter) ircfg_simplifier.simplify(ircfg, head) ret = ircfg else: @@ -335,7 +335,7 @@ def build_graph(start_addr, type_graph, simplify=False, use_ida_stack=True, dont head = list(entry_points)[0] - simplifier = CustomIRCFGSimplifierSSA(ir_arch) + simplifier = CustomIRCFGSimplifierSSA(lifter) ircfg = simplifier.simplify(ircfg, head) open('final.dot', 'w').write(ircfg.dot()) |