用Python玩玩反汇编

今天要给大家介绍一款全能型的反汇编引擎Capstone。这一款引擎不仅能够跨平台,还跨多种语言,其中就有我们喜爱的Python。

我们利用Capstone也能轻松写出高大上的反汇编工具啦~~~

Capstone 能轻松反汇编多种平台的机器码,例如:x86(普通PC机)、ARM(手机用得比较多)、MIPS(路由) //括号中仅作举例。

实验环境:

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

完整的测试代码:

输出的结果:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181215A0FRJK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券