反汇编系列——工具篇

Posted 牧秦丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反汇编系列——工具篇相关的知识,希望对你有一定的参考价值。

反汇编,也有人称为“逆向工程”,就是把 DLL 或者 EXE 程序逆向为程序员可读的汇编代码,方便我们理解程序。有时候我们需要分析别人的DLL或者程序,想看看它做了什么或者实现方案(请不要干坏事!),可能需要反汇编知识。我们首先需要借助一些反汇编利器。我强烈推荐的是IDA Pro,它的功能异常强大,对某些程序的反汇编,可以达到伪代码级别的反汇编——当然,这需要你具有扎实的汇编功底。


IDA Pro 目前的稳定版本是5.5官网上最新评估版本是6.3点此下载评估版),你可以根据自己需要去找一份。我使用的是 6.3 的评估版本,功能比5.5强大许多。你可以将一个DLL 或者 EXE 直接拖入 IDA 主窗口,然后它就会自动展开一份反汇编好的代码。如下:




几个主要的区域有:

  • 代码窗口:主要展示反汇编代码;
  • 输出窗口:
  • 函数窗口:主要用于查看函数(非导出函数可能只用 sub_XXXXX 替代,导出函数你可以看到完整的全名);
  • 导入窗口:查看导入的所有函数(如 LoadLibraryCreateThread 等等);
  • 导出窗口:查看该 DLL 导出的函数接口;
  • 结构体窗口:查看结构体定义;
  • 字符串窗口:查看所有 HardCode 的字符串;
主要我们需要关注的窗口大致就这些,其他的窗口可以自己去探索。并且 IDA 具有相当强大的快捷键功能,比如我们定位到一个导入函数上,然后想看什么地方调用了这个函数,只需按 'X' 键,会弹出一个调用了这个函数的地址列表,我们可以双击列表中的某一行,方便的跳转到该调用处。如:


如果你想查看你自己写的代码的汇编代码,可以参考《用汇编分析C++程序》。通过第一张图中反汇编出的代码可以看到,某些变量名均已被反汇编出来了,这可以方便我们理解代码。
但是,对初学者来说,其他的变量名如:“var_802” 这样的名称不易理解,并且对后面的-48-802 等这样的数字也一头雾水,下一篇将详述堆栈。
Tips:你可以在知道var_802这样的变量名代表的确切意义后,可以用光标点击它,然后按下'n',就可以重命名这个变量名,之后可以保存工程,下次打开的时候还是你重命名后的名称,方便多次反汇编。





以上是关于反汇编系列——工具篇的主要内容,如果未能解决你的问题,请参考以下文章

反汇编系列——函数篇

挂茶馆_VIP其他杂项系列教程

反汇编工具objdump的使用以及反汇编文件的解读

IDA反汇编工具的使用详解

反汇编和二进制分析工具清单

linux驱动系列之程序反汇编