【iOS 逆向与安全】利用 IDAPython 插件提高反汇编和逆向工程效率
前言
IDA Python 是一个用 Python 语言编写的插件,它为 IDA Pro 提供了可扩展性和自动化脚本支持。使用 IDA Python,可以以更快、更简单的方式完成反汇编和逆向工程任务。
1、目标
快速了解和开始使用 idapython。
2、开发环境和工具清单
mac 系统
IDA Pro7.0
3、常用 API
idaapi 模块:该模块提供了许多核心的 IDA API,包括:
idaapi.get_func(ea)
:获取给定地址处的函数对象idaapi.get_segm_by_name(name)
:获取指定名称的段对象idaapi.get_screen_ea()
:获取当前屏幕上显示的地址idaapi.get_func_name(ea)
:获取给定地址处的函数名idaapi.get_name_ea_simple(name)
:获取具有给定名称的地址idaapi.asktext(defval, prompt)
:显示一个文本框,等待用户输入文本idaapi.get_func_offset(ea)
:获取指定地址相对于函数起始地址的偏移量idaapi.get_segment_name(ea)
:获取指定地址所在的段名称
idaapi.idc 模块:该模块提供了一些旧版 IDA API 的 Python 封装,包括:
idc.GetDisasm(ea)
:获取给定地址处的反汇编指令idc.Jump(ea)
:跳转到指定地址idc.SetColor(ea, what, color)
:设置给定地址的颜色idc.MakeCode(ea)
:将给定地址处的字节转换为指令idc.MakeName(ea, name)
:将给定地址处的符号名称更改为给定名称idc.get_inf_attr(idc.INF_MIN_EA)
:获取载入程序的最小的有效地址idc.get_inf_attr(idc.INF_MAX_EA)
:获取载入程序的最大的有效地址idc.print_insn_mnem(ea)
:获取给定地址处的助记符idc.prev_head(ea)
:获取给定地址的上一条指令的地址idc.print_operand(ea,index)
:获取给定地址中的操作数idc.PatchByte(ea, 0x90)
:修改给定地址的第一个字节idc.PatchWord(ea, 0x9090)
:修改给定地址的前两个字节idc.PatchDword(ea, 0x90909090)
:修改给定地址的前四个字节idc.PatchQword(ea,0x9090909090909090)
:修改给定地址的前八个字节
idautils 模块:该模块提供了一些常用的 IDA 辅助函数,包括:
idautils.Functions()
:返回当前程序中所有函数的迭代器idautils.Segments()
:返回当前程序中所有段的迭代器idautils.Strings()
:返回当前程序中所有字符串的迭代器idautils.XrefsFrom(ea)
:返回指向给定地址的所有交叉引用的迭代器idautils.Heads(ea,ea)
:获取指定地址段的汇编指令
4、使用示例
移除 SVC 指令:
需要被移除的汇编指令如下:
idapython 脚本如下:
执行前:
按下图操作执行上边的脚本
执行后效果如下:
总结
这篇文章小牛试刀的介绍如何在 IDA 中使用 IDAPython 插件,这只是一部分应用场景,期待大家继续探索更多用法。
提示:阅读此文档的过程中遇到任何问题,请关住工众好【
移动端Android和iOS开发技术分享
】或+99 君羊【812546729
】
版权声明: 本文为 InfoQ 作者【小陈】的原创文章。
原文链接:【http://xie.infoq.cn/article/7c73f78888c0e5437522ab816】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论