首页
社区
课程
招聘
[原创]IDA从入门到乞讨之初入逆门
发表于: 2021-10-2 17:33 10346

[原创]IDA从入门到乞讨之初入逆门

2021-10-2 17:33
10346

​ IDA一般指的是交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,IDA为简称。IDA是Hex-Rays公司的旗舰产品,是最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。
​ 就其本质而言,IDA是一种递归下降反汇编器,当然他也是支持线性扫描反汇编。何为递归下降反汇编,简单说就是程序运行他得有个入口点是吧,经过这个入口点往下一直去找他调用的函数地址,把那个地址当作函数反汇编,层层递归去反汇编。而线性扫描就是反汇编完这个函数,然后就把后面的地址直接当函数或者汇编直接给反汇编了,这样线性的去反汇编。那么他们的优点和缺点我们不难看出来,递归下降反汇编应该比较符合机器运行的理解,而线性好像更加符合我们人脑的理解。谈不上绝对,各有各的优势。

​ IDA版本 : 7.5 下载地址 : 看雪论坛 工具下载 栏 或者 百度

MainGUI
1.中间这一个显示text:00401008这个tab页是反汇编窗口,当然你可以看到还有很多页他们都是共用了这个位置
2.下面这个output window标题的窗口是记录日志或者打印信息的窗口,之后我们运行Script等都会用到他
3.下边的Python,这个是提示当前脚本环境是IDAPython,可以点击选择IDC,后面紧跟的是输入脚本命令的edit,输入回车就是运行这个命令
4.左边Function windows这个窗口就是显示当前反汇编程序的全部函数
5.工具栏下的这一条颜色条是标识了当前分析的程序的各种数据排布,包括汇编代码、数据、导出表等等,他是可以点击的,你的可能颜色与我的不同
这些窗口都是可以自己拖拽放到不同的界面的不同位置,他应该是一种MID子窗口的形式存在,当你拖拽的乱了很懵逼的时候不要怕,他有个还原的功能按钮,这个按钮在 菜单栏 -> Windows -> Reset desktop ,当然当你点击这个的 时候你就会发现他上面还有3个功能Load desktop、Save desktop和Delete desktop,都动手试试吧。很多东西并不能完全的表现出来,因为他很简单,随便的点击一看就知道了,如果过多的描述他就不太合理了。
MainGui_
当我们在IDA View这一页中按了空格键,我们这个反汇编界面就成了一个流程图的样子,而且左边中间位置会多出一个Graph overview窗口,是当前反汇编函数的一个流程缩小版。如果你发现你即使是打开了这个流程图样子但这个缩小版显示窗口没有,你可以用刚刚的大法直接reset desktop或者 选择菜单栏->View->Graph Overview 重新打开这个窗口。还有其他的我们就不一一介绍了,可以去一个个点击看看,以后用到了我们在说。

​ 1.鼠标点击这个反汇编窗口内容,然后点击菜单栏Search就可以看到关于搜索的快捷键
SearchMenu
​可以看到Ctrl + B是按二进制搜索的,16进制数值码,而Ctrl + T 是按文本搜索的。
​ 2.同样的鼠标先点击一下这个反汇编窗口,即这个当前焦点在反汇编上的意思,要不他这个菜单点出来显示的是其他,你可以自己反复试试.
​我们点击 菜单->Jump看看关于跳转的快捷键
Jump
​ 这个一看不用多说,我们都知道,然后主要是我们一般只用这个G快捷键就满足了我们对跳转的需求,按G输入地址我们就可以跳转到相应的地址。然后这里有两个个重要的快捷键也是我们常用到的 标签 ,这个主要是给我们汇编窗口中的特殊地址打标记,比如我们分析到了关键函数,然后防止我们忘记这个地址,我们就可以给这个地址打标签,鼠标点击要打标签的那一行(可以看到图中的地址) ALT+M 输入内容就是标签的内容,然后Ctrl + M 是查看当前标签,然后点击相应的标签就会跳到相应的地址,这个功能是很有作用的。
​ 你对比我上面两个图有明显的区别一个是有地址和hex值的一个是没有,那么这个是怎么设置的呢 点击菜单栏 的options设置一下即可
ShowLineAndHex
把Line prefixes(graph) 和 number of opcode bytes(graph) 设置一下即可,其他的默认就可以。其他功能目前没用到我们先不说。
​ 3.同要到的道理我们在来看看我们平时分析中最常用的快捷键,点击到菜单栏edit
EditMenu
​ 这一个的快捷键最常用的有C、D、U还有个P,当然这里没看到P,大小写无关。这些指令是要你鼠标放在反汇编窗口的行上才起作用,C是告诉IDA当前行应该为汇编,主要作用是给IDA没有识别的汇编给他识别出来。D、P和前面的C一样,D是告诉IDA当前行Hex应该是数据,你多按几次还有变化byte,word,dword和qword等(1byte 、2byte、4byte、8byte ),或者你读做字节、字、双字、四字。而P是告诉IDA当前行应该是一个函数序言(函数开始),应该翻译为一个函数。最后U表示取消的意思,即IDA分析的(或者你刚刚C啊P啊D的)不对,你把他给还原成hex code码,或者还原在改变(比如数据取消然后改为代码等)。
​ 看到Patch Program这个允许你改这个字节码或者汇编(改汇编自动给你改字节码,你改字节码也是一样的),而这个Patch program功能也和平台相关性很大,有的平台可能没有这个功能,比如PIC16、HCS08等。在看看plugins,这个就是我们IDA的插件列表了,他主要是IDA目录下的plugins文件夹下的文件,dll或者python文件。最后我们还有最np的没说F5快捷键,当然了你要看你逆向的平台支持不支持F5反编译快捷键,你看载入分析文件后看这个plugins下有没有Hex-Rays Decomplier选项了,或者我们可以看官方介绍文档,目前F5支持的有x86_64、mips、ppc、arm这4个平台。F5步骤也是和上面一样先让反编译窗口获取焦点在F5,就会生成反编译代码在新的tab上,类似C语言。但并不意味着你一劳永逸。
​ 最后我们看到IDA的快捷键其实官方已经给了一个文件 IDA快捷键速览

​ 1.x86_64文件载入,IDA有个自动识别文件的,你把要分析的文件拖入IDA他会自动给你识别出来是什么平台的文件和架构,但是有些文件识别不了,识别不了的原因一般有两个,一个是他没有这个文件的反汇编架构,而他有这个反汇编的架构但是没有具体的信息,因为相同汇编架构的芯片也有很大的差异。而x86的特点是很明确的,所以一般x86或者x64的文件都能识别,所以一般我们都默认加载即可:
x86Loader
我们这个是exe文件,我们直接OK就可以,一切默认,如果你是dll你可能会点击这个Manual load,然后输入他这个加载地址,而exe的一般都是0x400000不需要改,所以我们不点这个选项,当然你这个dll你也可以不点默认就是0x10000000了。当我们结合OD分析时,如果这个载入基址不匹配的话,我们要转换一下,转换方法很简单: od_offset 表示你当前定位到的关键代码位置,od_loadbase为当前模块的基址,同理IDA

​ 2.非x86_64文件 ,一般指不是windows的PE文件或者linux的elf文件,我这里主要讲的是ecu的flash文件。比如MC9S08QE8这个芯片,8bit,我们得到他的bin文件,我们应该怎么载入到ida分析呢,首先我们得得到他的datasheet文档,我们才知道他是属于什么架构的(简单说就是什么汇编),然后我们得到的这个bin文件在芯片中应该是存放的位置,主要就是这个偏移,然后还有这个芯片的接口内容什么的。 mc9s08qe8_chiper
从这里我们可以看出他应该是属于HCS08这一架构的,我们可以在IDA中找一下看看有没有支持这个架构的,如果没有,我们就只能自己写这个反汇编框架的处理模块了(IDA process module IDA处理模块),这个是后话。庆幸我们这个有,我们载入时弹出Load a new file标题的界面,让我们选择这个文件的处理器类型 在Processor type下的下拉框我们找到 Freescale HCS08 [hcs08]这个即可,然后其他默认就行了,如果是arm框架的可能要设置一下(Processor options 这个按钮 设置一下是arm7还是什么版本等等,或者PPC框架的设置一下是可变长的指令还是固定等,这些都可以在相应的datesheet文档看到)。然后就会弹出要加载的base,rom偏移位置和ram是否创建等
LoadbaseOption
可以看到1就是你要创建的rom段或者节,这个一般就是你这个bin文件加载的地址,然后2的位置就是设置你当前文件加载的位置,一般就是和1的地址是一样的就可以了,然后根据实际情况是否你要创建这个ram section,一般可能不设置。然后OK,载入文件后,看看你这个datesheet的中断表,一般是开始或者最后地址上,然后用脚本去让去处理(相当于人工去按P什么的这样),或者你编写这个cfg文件去操作等等。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-10-3 22:23 被zuoshang编辑 ,原因: 少了一个小内容
上传的附件:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//