第19-22天 静态反汇编之IDA

1. IDA Pro 简介
①安装后有 32-bit 64-bit 分别分析32位和64位程序
②处理支持PE格式,还支持DOS UNIX MAC JAVA .NET等平台的文件格式
③IDA会建立一个数据文件,下次直接打开数据库文件就能继续分析
④如果IDA分析出了有问题代码,将 Kernel optionl 中的 Make final analysi pass 关闭
⑤某些时候,代码因不再预计的位置不被确认,选择Kernel option2 中的 CDS in the final pass

2.IDA的配置
修改选项,只能对当前项目有效。所以要改变默认配置,必须编辑ida.cfg文件。
cfg目录下有ida.cfg和idagui.cfg文件,用十六进制编辑器编辑他们。
①反汇编选项
②ASCII字符串与符号
③显示中文字符

主要上面3个的配置,按照书本截图配置即可。

3.IDA主窗口
①反汇编窗口
有两者显示形式,图形视图和文本视图。ctrl+鼠标滚轮可以调节图像大小,和谷歌浏览器类似。
空格键可以在两种形式之间切换。
"View" "Open subviews" "Disassembly"可以打开多个反汇编子窗口,方便多处单独分析,其他同理。
②导航栏
"Library function"为库函数
"Data"为数据
"Regular function"为规则函数
"Unexplored"为未查过的
"Instruction"为指令
"External symbol"为外部符号
"Zoom in" 和 "Zoom out" 可以调整导航条的现实比例
③注释
快捷键冒号:只在当前位置注释
快捷键分号:在所有交叉处注释
④提示窗口
下面的提示窗口是IDA的输出控制台,反馈文件分析进度、状态消息、错误消息及IDA脚本或插件信息。
⑤字符串窗口
字符串窗口和交叉引用结合使用,可以快速定位任何引用该字符串的位置。
右键菜单中的 Setup可以设置字符串的类型
⑥输入窗口
每一行都列出了函数名称,和库的名称,以及函数的虚拟地址,双击函数可以跳转到反汇编处。
⑦跳转到地址窗口
快捷键G跳转到指定地址,快捷键Esc返回,快捷键Ctrl+enter前进

4.交叉参考
CODE XREF: sub_401120+B↑j 调用地址为401120 j表示跳转,o表示偏移(offset),p表示子程序。双击可以跳转到调用该处的地方。
在loc_401165上面按快捷键X可以打开交叉参考

5.参考重命名
快捷键N打开更名对话框
Local name:局部符号名的作用域仅限于当前函数。
Include in name list: 将有一个名称被添加到名称窗口中。
Public name: 由二进制文件输出的名称。
Autogenerated name :自带创建符号名。
Weak name: 弱符号,是公共符号的一种特殊形式。

6.标签的用法
jump→Mark position 对当前光标位置设置标签
Jump→Jump to marked position 跳转到指定标签处

7.格式化指令操作数
IDA提供多种进制显示,大部分情况下,源代码使用的是已命名的常量,右键菜单 Use standard symbolic constant选项来设置常量。

8.函数的操作
IDA允许手动干预函数的创建,编辑,删除。
"Edit" → "Function" → "Create Function" 创建一个函数.
"Edit" → "Function" → "Delete Function" 删除一个函数.

9.代码和数据的转换
IDA的交互性可以使用户将十六进制数据指定为代码或者数据。
快捷键C 可以将十六进制转换为代码
快捷键D 可以将代码转换为十六进制,另外多次按D 可以在各种数据类型之间切换
快捷键P 可以将某段代码定位为子程序
快捷键U 可以取消子程序的定义,数据重新以十六进制形式显示

10.字符串
IDA支持所有字符串格式,按快捷键A就可以转换为字符串。
A键默认设置的是C语言的字符串,可以在 "Options"→"ASCII string style" 中设置其他格式字符串。(新版本IDA好像换了位置)

11.数组
IDA可以将一串数据声明成一个反汇编行,按数组的形式显示。"Edit"→"Array"或者*快捷键,打开数组排列调整窗口。
Items on a line 填 0 每行项数会根据页面自动调整。若想让每行显示更多数据,可以在反汇编选项中调整右边距(Right margin)。

12.结构体
先跳过,以后学习

13.枚举类型
先跳过,以后学习

14.变量
W32Dasm反汇编出来的代码可读性差,看不到参数的传递过程。
而IDA会分析出哪些参数放到了栈中。
IDA可以给传递的变量改名称。在任何函数栈双击(或者快捷键Ctrl+K)打开栈窗口,可以看到他的结构成员。

15.FLIRT签名
先跳过,以后学习

16.脚本
先跳过,以后学习

17.插件
先跳过,以后学习

18.IDA调试器

①加载目标文件
"Debugger""Select Debugger"根据当前文件类型选择合适调试器,典型的"Local Windows debugger"
"Debugger"此时会更换,"Debugger""Start Process"开始调试目标文件
还有一种方法是附加正在运行的目标进程"Debugger""Attach to process..."
如果没有加载任何数据库,"Debugger""Attach""Local Windows debugger"可以打开附加进程窗口
另外IDA还可以远程调试,通过与服务器通信,在远程计算机上启动目标进程

②调试器界面
左侧标题是反汇编窗口
右上方是通用寄存器窗口
右下方是栈窗口
Module窗口显示了加载的进程的可执行文件和共享库,双击模块,将打开该模块输出的符号列表
大概的界面与OD类似

③调试跟踪
列以下常用的快捷键,与OD类似
F7 单步步进
F8 单步步过
F4 运行到光标所在行
F9 运行程序
F2 设置断点
Ctrl+F2 终止一个正在运行的进程
Ctrl+F7 知道该函数返回时才停止

④断点
F2可以开启或者关闭断点。
Breakpoint List中可以查看所有断点。
Edit Breakpoin中 Location是断点地址,勾选Enabled说明断点处于活动状态
勾选Hardware说明以硬件断点的方式下断
同时Condition中可以设置条件断点的表达式
⑤跟踪
类似OD的Run trace功能,
主要分为Instruction Tracing 记录地址、指令和寄存器的值
Funtion Tracing 跟踪call指令的调用,并把结果记录下来
⑥监视窗口
调试过程中需要持续监视变量的变化,所有需要IDA监视数据,监视点一般设置在栈或者数据快中
双击来到数据块右键 AddWatch添加一个监视点。按Delect可删除监视点。
⑦自动化调试
使用脚本和插件来代替人力实现自动化调试,例如启动调试器,执行断点条件,想办法破坏反调试技巧等。
IDA提供了很多脚本函数。等需要用到的时候在细细研读。这里先了解个大概。

19.远程调试
重点学习,先跳过,以后学习

20.其他功能
①图像化模式
我们的大脑更加喜欢图像,空格键切换图像与文本模式,IDA提供了总览窗口,用户可以单击感兴趣的位置,就能快速定位。
②修改可执行文件

"edit""Patch program" 中的"Change byte"和"Change word" 可以直接修改十六进制
"Assemble...",可以直接修改汇编代码
"Apply patch to input file"功能是将改动更新到二进制文件中
PS:实际上"Hex View"窗口中可以直接改十六进制代码
③加载符号文件
IDA通过"Load file""PDB file"加载DBG和PDB文件。次功能对系统软件强大,只要联网IDA就会自动到微软寻找最合适的PDB和DBG文件
④API帮助关联
将idagui.cfg中的"HELPFILE" 指向本地Windows API帮助文件。使用快捷键Ctrl+F1 能快速找到需要的函数帮助信息
⑤输出文件
IDA可以以MAP,ASM,LST,EXE,DIF等格式输出。
知道有这个功能就好,以后遇到在深入学习。

21.小结
①IDA提供专业的反汇编能力的同时,提供了很多好的辅助功能(例如制作流程图,动态调试等)
②IDA是一款非常智能的反汇编工具,能够分析程序的流程,变量和函数调用等
③由Windows SDK开发的程序,配合IDA都能逆向得到源代码(Hex-Rays Decompiler F5功能使得到源码更加简单)
④IDA的缺点是反汇编速度慢,界面过于专业,初级者很难使用,但是这正好证明IDA在专业领域的地位高

posted on 2020-05-22 09:14  YXGust  阅读(1015)  评论(0编辑  收藏  举报

导航