IDA判断PE文件是32位还是64位、选项卡介绍

0x01、IDA是什么

交互式反汇编器专业版(Interactive Disassembler Professional)简称为IDA。IDA Pro是一款支持交互、可编程的、扩展插件、支持多种处理器的逆向工程利器。

0x02、为什么要用IDA Pro?

为什么要用IDA?因为OD是一个只能调试32位程序的调试器。而IDA Pro可以调试32位、64位的程序。除了可以静态反汇编程序,还支持作为调试器对程序调试。

中国人逆向喜欢用OllyDbg:https://ti.360.net/blog/articles/suspected-molerats-new-attack-in-the-middle-east-en/

国外专家Vitali Kremez喜欢用OllyDbg+IDA:https://www.vkremez.com/2018/12/lets-learn-dissecting-apt28-zebrocy.html

IDA支持不同的操作系统环境(例如Windows,Linux或Mac OS X)上运行,也支持远程调试:

IDA支持的微处理器体系结构列表:

0x03、判断程序是32位还是64位

因为crackme.exe是一个32位可执行文件,所以要使用32位IDA版本打开。判断EXE文件是32位还是64位,有很多方法。

PE文件里的NT头->FileHeader->machine这个字段声明PE是哪个平台下运行的,比如32位程序内容是I386 (14Ch)。

struct IMAGE_NT_HEADERS NtHeader
struct IMAGE_FILE_HEADER FileHeader
enum IMAGE_MACHINE Machine

识别比较快的方法是看PE字段后面跟着的值,以PE后面跟着的字母为例:PE..d†字样后的符号是一个64位文件。而crackme.exe的PE之后是:PE..L,所以这是一个32位文件:

0x04、IDA逆向程序-选项卡介绍

打开Crackme。选择“ new”打开一个新文件,会自动识别PE文件的类型:

默认设置单击 “OK”,如果同意显示 ”Proximity View”模式会显示出图形化的界面,在树形模型下显示出Crackme里的函数信息,可以很直观的看出来程序跳转的关系。:

  • 使用快捷键(空格键),可以在图形模式(*Graph*)或普通文本模式之间切换。
  • 在“ Options(选项) - General(常规)”,选中“ Line prefixes(行前缀)”可以显示跟内存地址有关的更多信息。选中“Number of opcode bytes(操作码字节数)”,可以显示操作码。

  • 访问View-Open Subview,可以打开特定功能的选项卡。

在IDA的图形屏幕上会看到许多具有相同地址的位置。例如在开始(start)函数,地址会重复很多次。因为这条地址的信息很多,多到同一条地址上显示不完。

找到重复的同一地址结尾。在这种情况下对应地址00401000的反汇编指令为push 0

通过“Windows-Save Desktop"设置了常用的窗口和选项卡:转到Windows-Save Desktop,然后选择“ Default ”保存默认配置。

在IDA选项卡上,例如FunctionStringsNames等。可以用快捷键按CTRL + F搜索。View-Open Subview-Strings中,IDA会根据搜索关键字显示出有“ try”的字符串,如下图所示:

  • 选择View-Open Subview-Disassembly,可以打开第二个反汇编窗口,之后还可以使用第一个反汇编窗口访问其他功能,让分析人员方便分析程序的其他功能。与OllyDbg / x64dbg相比起来,这是IDA的优势:

IDA还提供类似于OllyDBG / x64dbg的“Dump”(十六进制显示窗口)。在IDA中这样的窗口称为“ Hex View”。可以通过View(视图)-Open Subview(打开子视图)-Hex dump(十六进制转储)显示:

Open Subview中,还可以通过Imports选项卡访问跟程序导入函数有关的信息,如下所示:

左下角看到另一个叫“ Graph overview”的小屏幕(如果没有可以通过“View(视图)-> Graph Overview(图形概述)”的位置打开)。这个窗口显示了正在分析的功能代码块,可以让分析人员快速地在代码块之间来回移动。

IDA还其他很有用的选项卡,例如“ Structures”,“ Exports”,“ Names”,“Segments ”等。顶部导航栏(navigator)用不同的颜色显示出文件的不同部分。

描述性信息每种颜色都有含义,例如,灰色是.data部分,粉红色对应外部符号idata部分和蓝色字体对应在代码部分检测到的功能。

0x05、参考

posted @ 2020-01-29 02:43  17bdw  阅读(11891)  评论(3编辑  收藏  举报