用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone
今天要给大家介绍一款全能型的反汇编引擎Capstone。这一款引擎不仅能够跨平台,还跨多种语言,其中就有我们喜爱的Python。
我们利用Capstone也能轻松写出高大上的反汇编工具啦~~~
Capstone 能轻松反汇编多种平台的机器码,例如:x86(普通PC机)、ARM(手机用得比较多)、MIPS(路由) //括号中仅作举例。
更多Python视频、源码、资料加群683380553免费获取
实验环境:
- macOS
- Python 2.7
1、安装Capstone 库
Mac OSX 系统:
brew install capstone
Ubuntu :
sudo apt-get install libcapstone3
其它系统或方法可以参考:
Documentation
step 0x1 Clone
我们去git上Clone 一份Capstone 源码,其中包含了大量示范代码和文档
git clone https://github.com/aquynh/capstone.git
切换到Python 示范代码的目录:bindings/python,这里你能找到大量的py演示代码。
比如,我是做ARM逆向分析的,所以对ARM反汇编比较关心,就看test_arm.py 这一份代码了。
python test_arm.py
2、最简单的例子
以上代码片段的输出结果为:
代码的第二行导入了Capstone的库,第三行是一段十六进制表示的机器码。
第四行初始化了Capstone的Cs类,初始化需要两个参数,分别是平台的架构和模式。
在这一段代码中,我们想反汇编的是一段x86的64位汇编代码。
第五行,通过Cs类的disasm对二进制的机器码进行反汇编,第一个参数是机器码Byte数据,第二个参数是这段代码的“基地址”。该函数为反汇编到一条错误的指令为止。
第六行,输出地址信息、助记符、操作数字符串。
3、详细信息
Capstone有一项非常强大的技能,它能分析汇编指令的隐含信息,比如“call xxx”是调用xxx这个函数,实质是把下一条指令地址入栈后修改EIP寄存器至XXX地址,Capstone就能将这种隐含信息分析出来。
因为分析需要花费更多的时间,所以默认是关闭的,需要开发者自己打开。
打开方法:
如果不使用可,就及时关闭:
md.detail = False
完整的测试代码:
输出的结果:
本文来自博客园,作者:I'm_江河湖海,转载请注明原文链接:https://www.cnblogs.com/jhhh/p/16766383.html