IDA的使用
交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA。是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。
IDA Pro 7.0破解版:http://www.32r.com/soft/42075.html(内含安装步骤)
IDA打开文件
打开IDA后,把我们要分析的文件拖到IDA就行。
IDA关闭文件
当我们用IDA打开要分析的文件时,在这个文件下方会同时生成4个数据库文件,这些文件都是当前的IDA程序。
关闭IDA的时候要注意:
IDA窗口介绍
切换图形界面和文本结构界面
这是一个图形化的界面(CTRL+滚轮可以控制大小)
,有时还有流程图,如果不喜欢这个图形结构,
可以按住空格,就能看到一个文本结构的界面
按空格后:看到一个文本结构的界面(图形结构——》文本结构),再按一次空格又可以回到图形结构界面
这样的界面看上去就全是代码了,很多做逆向分析的人更喜欢这个界面
导航条: 一个PE文件包括数据区,代码区,常量区等,这些不同的块,不同的颜色就代表不同的块
IDA View-A:反汇编窗口,打开程序的时候,一般都是停留在反汇编窗口
Hex View-1:想看当前程序的十六进制文件,可以点击这个窗口HEX
Structures: 结构体
Enums: 枚举类型
Imports: 如果想看当前程序用了哪些模块,用了哪些模块的哪些函数,可以点击imports
Exports: 想看当前程序导出了哪些函数,可以点击exports
结构体是由一批数据组合而成的一种新的数据类型。组成结构型数据的每个数据称为结构型数据的“成员”。
shift+F12可以转到字符串窗口
ctrl+e可以到达程序开始的点(start函数)
刚用IDA打开文件,汇编前面没有地址,怎么打开地址呢?Options——》general——》Disassenbly——》右半边的Line prefixes(graph)【行前缀(图形)】
F5或者点tab键——》都可以把汇编代码反编译成类C代码(类似于C语言的代码,也叫做伪代码)
双击后进入某一个界面,按ESC可以退回
快捷键X或者ctrl+X:交叉引用(看看谁用了这个字符串/地址)
选择某函数,按N:重命名(重要!),要养成重命名的习惯。
怎么知道一个文件是用什么语言写的,有没有加壳?用工具DetectItEasy或者exeinfo PE或者PEiD
静态分析用IDA,动态调试用x64dbg(调试32或64位的)或者是Ollydbg(调试32位的)
显示硬编码——>ACDU指令
任何的一个可执行文件,最终都是由硬编码组成(准确来说是由二进制组成),二进制里面包含了很多CPU能识别的指令,这些指令称为硬编码
把当前文件的硬编码指令显示出来:
选择options——》点击general
exe程序在指令部分都是由这些硬编码组成,每一行硬编码都对应一个具体的汇编代码,所以IDA替我们把这些硬编码转换为汇编代码。
A指令
把当前的数据用字符串的形式来显示
C指令
把当前的数据安照代码(code)的形式来显示
D指令
把当前的数据用数据(data)的形式来显示
U指令
把当前的数据用普通的原始字节的形式来显示(undefined未定义)
ACDU指令:某个数据它显示的不合理,可以告诉IDA你以什么形式来对这个数据进行显示
现在我想以字符串的形式来显示它:用A指令
现在我想以数据的形式来显示它:用D指令
按一次d会以db的形式显示,再按一次会以dw形式显示,再按一次d会以dd的形式显示
现在我想以代码的形式来显示它:用C指令
如果不想对它进行定义,按U
跳转指令:G(go)
在实际逆向过程中,经常需要进行跳转
搜索指令 ALT+T
N指令
改名字,这个指令可以说是最重要的指令
真正的逆向分析就是要弄清函数做了什么事,真正起名字的过程就是逆向分析的过程
真正的逆向人员是不会用F5直接把汇编变成C语言的
F5是不准确的,它识别不了的地方他会省略掉,F5生成的代码没有任何可读性,远远没有直接看汇编代码更加清晰。
一个真正的逆向分析就是一个起名字的过程
创建结构体 ,修改全局变量,修改局部变量
在我们分析函数的过程中,可能看到了某处用到了一个结构体(我们自己分析出来的结构体,IDA本身也能自己替我们识别出来一些系统层面的结构体)
假如我们自己分析出来一个结构体,但是IDA里面还没有这个结构体,我们就可以点开structures这个窗口,在这个窗口新增一个结构体
步骤:打开structures这个窗口——》Edit——》Add struct type
那么想在结构体里面添加成员,选择按D,就会给我们新增一个成员:
这个成员的名字和类型都是可以改的(改名字用N,改类型用D)
万一这个成员是一个结构体怎么办,不是一个普通的dword,或者是dw?
选中这个类型ALT+Q——》就会列出当前ID识别出所有的结构体:
第三个结构体是一个DWORD数组,怎么办:
改为dd,选中后单击右键,选择数组array,定义数组长度
局部变量选择结构体的快捷键是P
全局变量选择结构体是ALT+Q
注释
三种常用的注释:
1、直接按分号; 会弹出一个窗口,在窗口中就可以直接写注释的内容了(它引用 的地方会出现副本)
2、按冒号:它引用 的地方不会出现副本
3、希望每次分析完一个函数以后,能在上面写一个注释
针对函数的注释:选中当前函数的函数名,选中它,按分号,就可以直接写注释了(用来描述当前函数的基本特征)
交叉引用
想看引用某个函数的所有地方,点中函数名——》View——》Open subviews——》Cross reference
点开后出现一个界面,这个界面会出现所有引用这个函数的其他的地方
某一个数据,全局变量也可以安装这个方法进行查看