初识IDA

初识IDA

在这里插入图片描述

有个项目需要查看原有的二进制代码,试着反编译看看汇编码,意外找到了IDA这款著名的反编译工具。

若干年前搞过一点反编译逆向工程,在SPARC工作站。那真是一件非常耗精神的工作。因为是定长指令的RISC结构,感觉比X86平台还简单些。X86多字节指令平台上,跳转位置错了,反编译的指令就完全错了。所以看到X86的汇编代码,更头痛。

IDA最早的版本大概在2005年,Hex-Rays公司位于比利时。创立者和CEO Mr. Guilfanov 是俄罗斯人吧,毕业于莫斯科大学,学数学的。牛人。

IDA支持多构架平台,交互式,静态代码分析,好像还可以跨平台DEBUG。强大到有些功能难以理解如何实现的,比如跨平台的DEBUG。

IDA支持一种类C的脚本语言和Python脚本语言。后者更亲民些。脚本语言可以一些繁琐而重复的工作,比如MCU的中断向量表,系统寄存器,功能寄存器,GPIO寄存器,Serial寄存器的命名。挺好用的。有脚本专门处理防破译的obfuscate代码,还没试用过。

产品的二进制目标码的符号表一般都是被删除了的,stripped,主要是能节省空间。嵌入式系统更是如此。用-g 或 -g3编译的.elf是包含符号表的,但.hex文件不会含有。有符号表的反编译结果,系统库函数会有自己的函数名,功能和参数一目了然。与自编的函数名sub_xxxxxxxx区分开来,对理解汇编码帮助很大。

IDA用签名文件来解决这个问题。

库函数的代码在确定的编译环境下是固定不变的,长度,每一个字节,都不变。IDA提取该库的每个函数的特征码,用某种哈希码算法。再对照需要反汇编的目标码中的函数特征码,特征码相同,则函数相同。

有两个工具, pelf 和 sigmake。 先编译一段简单的程序,调用该库的函数,编译时将该库静态链接进来,用pelf抽取编译结果(xxxlib.a)的符号表和特征码,再用sigmake生成IDA可以识别的该库的签名文件。在IDA中加载这个签名文件,就可以看到库函数的符号表了。

想来,目标代码编译时所用的工具和版本相关性很强。

IDA是非常强大的静态反编译工具,除了逆向工程,还广泛用在恶意代码分析,漏洞研究,产品验证评估,知识产权取证等方面。就是太贵了。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值