用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone

用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone

今天要给大家介绍一款全能型的反汇编引擎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

用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone

2、最简单的例子

用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone

以上代码片段的输出结果为:

用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone

代码的第二行导入了Capstone的库,第三行是一段十六进制表示的机器码。

第四行初始化了Capstone的Cs类,初始化需要两个参数,分别是平台的架构和模式。

用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone

在这一段代码中,我们想反汇编的是一段x86的64位汇编代码。

第五行,通过Cs类的disasm对二进制的机器码进行反汇编,第一个参数是机器码Byte数据,第二个参数是这段代码的“基地址”。该函数为反汇编到一条错误的指令为止。

第六行,输出地址信息、助记符、操作数字符串。

3、详细信息

Capstone有一项非常强大的技能,它能分析汇编指令的隐含信息,比如“call xxx”是调用xxx这个函数,实质是把下一条指令地址入栈后修改EIP寄存器至XXX地址,Capstone就能将这种隐含信息分析出来。

因为分析需要花费更多的时间,所以默认是关闭的,需要开发者自己打开。

打开方法:

用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone

如果不使用可,就及时关闭:

md.detail = False

完整的测试代码:

用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone

输出的结果:

用Python玩玩反汇编,一个好玩有趣的全能型的反汇编引擎Capstone
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 3,067评论 1 3
  • 开发环境 1.安装cordova和plugman 使用npm命令: 在mac安装失败的话,在命令前面加上sudo即...
    小程序阅读 379评论 0 0
  • 很久很久以前,大学同学给我做了一个测试。 如果你被困在一个荒岛,很饿很饿很饿,给你四样东西,管够,只能选一样,选定...
    子聿阅读 11,935评论 100 241
  • 今日重阳节。天气晴朗温度适宜操场上面学生欢蹦乱跳,运动会准备工作紧锣密鼓,学生参与运动的积极性完全激发。 昨天教育...
    星之梦lyx阅读 140评论 0 0
  • 《可可和树叶钥匙》――给小朋友送去快乐, 给大朋友带来思考 简介 可可在操场上捡到了一片叶子。 这可不是普通的叶子...
    西丁Xetine阅读 403评论 0 1