反汇编系列(一)——工具篇

来源:互联网 发布:网络直播的优缺点 编辑:程序博客网 时间:2024/06/03 12:47

反汇编,也有人称为“逆向工程”,就是把 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',就可以重命名这个变量名,之后可以保存工程,下次打开的时候还是你重命名后的名称,方便多次反汇编。






原创粉丝点击