IDA实例
来源:互联网 发布:理查德拉米雷斯 知乎 编辑:程序博客网 时间:2024/06/05 20:49
IDA实例教程
1 软件环境
静态分析有很多好处,例如加壳的程序(尽管对于高手来说这并不会耗费太多时间),我们不需要寻找OEP,也不需要解除自校验,只要修复IAT,DUMP下来就可以动手分析了。假如你需要修改程序,可以使用内存补丁技术。动态与静态,调试器与反汇编器结合可以简化分析任务,帮助我们理解代码。因此掌握一种反汇编器是非常必要的。IDA可以说是这方面的首选工具,它为我们提供了丰富的功能,以帮助我们进行逆向分析。这从IDA复杂的工作界面便可以知道。
种类繁多的工具栏
在分辨率不高的情况,这些工具栏与反汇编窗口挤在小屏幕里,看起来不爽。我一般把它关闭(查看=>工具栏=>主工具栏)以获得更好的视觉效果。当我们需要这些功能的时候,直接使用快捷键就可以了。下面是常用快捷键的清单:
快捷键
功能
注释
C
转换为代码
一般在IDA无法识别代码时使用这两个功能整理代码
D
转换为数据
A
转换为字符
N
为标签重命名
方便记忆,避免重复分析。
;
添加注释
R
把立即值转换为字符
便于分析立即值
H
把立即值转换为10进制
Q
把立即值转换为16进制
B
把立即值转换为2进制
G
跳转到指定地址
X
交叉参考
便于查找API或变量的引用
SHIFT+/
计算器
ALT+ENTER
新建窗口并跳转到选中地址
这四个功能都是方便在不同函数之间分析(尤其是多层次的调用)。具体使用看个人喜好
ALT+F3
关闭当前分析窗口
ESC
返回前一个保存位置
CTRL+ENTER
返回后一个保存位置
在工具栏下面的便是工作窗口。主要的窗口分页有“IDA View-A”、“Name”、“Strings”、“Exports”和“Imports”。对于后面3项相信大家都不会陌生了,它们分别是字符参考,输出函数参考和输入函数参考。Name是命名窗口,在那里可以看到我们命名的函数或者变量。这四个窗口都支持索引功能,可以通过双击来快速切换到分析窗口中的相关内容,使用起来十分方便。
简单输入几个字符即可定位目标
IDA View-A是分析窗口,支持两种显示模式,除了常见的反汇编模式之后,还提供图形视图以及其他有趣的功能。
IDA的反汇编窗口
一般我们在分析的时候,并不关心程序的机械码,所以IDA为我们自动隐藏了这些信息。如果你有需要,可以通过以下步骤来设置:
选项=>常规=>反汇编=>显示反汇编行部分=>机械码字节数=>修改为你允许显示的大小
现在让我们以论坛脱壳版块置顶帖的那个经典为例,看看图形视图的表现。首先我们到以下连接下载:http://bbs.pediy.com/upload/bbs/unpackfaq/notepad.upx.rar
你能通过图形视图及其缩略图快速找到壳的出口吗?
如图所示,标签40EA0E便是壳的出口代码的地址。在OD中直接跳到该地址,下断点,然后运行到该处,再单步便能看到OEP了。假如希望通过跳转法找OEP,相信图形视图比你在OD一个一个跳转跟随,要快得多。
再来看看这个壳的另类脱法。直接运行该程序, DUMP下来,再使用IMPORTREC的IAT AutoSearch功能修复输入表。用IDA打开修复了输入表的DUMP文件。在IMPORT窗口随便选一个API,随便通过交叉参考跳转到一个函数的代码。
此处为文件输入表的位置
我选了RegQueryValueExA,通过交叉参考,来到Sub_402488处的函数代码。
用鼠标拖动缩略图中的虚线框到上方,便能看到该CALL的头部了。然后按下图指示操作:
在函数标记上点击鼠标右键
处于最上层的函数,便是OEP了,使用PE工具修改文件入口为10CC。现在函数可以正常工作了。这个方法的原理是通常我们写程序都有如下流程:
Main proc
//代码
CALL FUN1
//代码
CALL FUN2
//代码
END proc
所以处于函数调用最上层的便是MAIN函数了。当然这个方法局限性很大,这里只是对该功能的一种介绍。我们留意到图表功能有两个选项,在上面的例子中,我们使用的是“交叉参考到”。我想细心的朋友大概能通过“交叉参考来自”左边的小图标猜出它的用途了。该功能可以显示目标函数调用了什么函数,当然也包括API。这样除了观察函数的输入参数来判断是否关键CALL之外,又多了一个参考途径。
- IDA实例
- IDA Pro 6.6 反汇编程序实例
- IDA
- ida
- IDA*
- IDA*
- IDA*
- IDA Blog
- ida-x86emu
- IDA算法
- IDA 6.1
- poj2331 ida*
- poj3460 ida*
- 7.IDA-
- poj2286---IDA*
- hdu2234---IDA*
- hdu2918---IDA*
- hdu1560---IDA*
- redis 源码--跳表
- ubuntu root默认密码(初始密码)
- c++中的顺序容器
- C语言实现linux内核链表
- Jzoj2581 最大公约数
- IDA实例
- ubuntu修改自带的vim tiny模式
- EA&UML日拱一卒-活动图::14.2 Behavior StateMachines (9)
- 写样式一些经验:
- 本科CS专业学习攻略
- for(;i>=0;--i)中,i是unsigned,需要break退出
- lucene读取索引文件到内存
- 安卓7.0 系统服务启动流程
- 5.综合运用:实现用户登录