- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IDA Pro使用技巧及大杂烩
IDA Pro基本简介
IDA加载完程序后,3个立即可见的窗口分别为IDA-View,Named,和消息输出窗口(output Window)。
IDA图形视图会有执行流,Yes箭头默认为绿色,No箭头默认为红色,蓝色表示默认下一个执行块。
在寄存器窗口中显示着每个寄存器当前的值和对应在反汇编窗口中的内存地址。函数在进入时都会保存堆栈地址EBP和ESP,退出函数时恢复。
选择菜单Debugger下的Start process(也可以按F9键)来开始调试。调试会让程序在电脑中执行,所以IDA会提示注意提防恶意程序、病毒和木马。
打开IDA Pro 6.5,为进入IDA界面提供三种选项,分别是New(新建),Go(运行),Previous(上一个)。
选择File菜单下的Open,打开想要逆向的可执行文件,会显示一个Load a new file的界面。这里可以选择:
1. 程序的类型;
2. 处理器的类型;
3. 加载的段地址和偏移量;
4. 是否允许分析;
5. 一些加载选项;
6. 内核和处理器的一些选项;
7. windows系统dll所在的目录。
默认选择PE文件就可以,对于一些网络数据包或者其他格式的文件,可以使用二进制加载,自己进行解析。
工作区有多个子窗口,
IDA View-A是反汇编窗口,
HexView-A是十六进制格式显示的窗口,
Imports是导入表(程序中调用到的外面的函数),
Functions是函数表(这个程序中的函数),
Structures是结构,
Enums是枚举。
IDA view: 定位要修改的代码段在哪里。
Hex view: 用来修改我们的数据
exports window: 导出窗口
import window: 导入窗口
names window: 函数和参数的命名列表
functions window: 样本的所有函数窗口
strings window: 字符串显示窗口,会列出程序中的所有字符串
IDA很智能,鼠标移到某些标识符上会自动有适当的提示,双击还能自动跳到相应的位置。把一个函数逆向的方法很简单,只要按F5键就会出来逆向出的C语言程序了。
退出IDA时,会进行文件保存确认,如果需要继续进行分析,将IDA中间数据库打包,下次继续打开就可以进行分析;如果不需要继续分析,选择不要打包,不要存储数据库。
IDA打开应用程序时,会为其创建一个数据库,后缀为IDB。IDB由4个文件组成:
后缀为id0的二叉树形式的数据库,
后缀为id1的程序字节标识,
后缀为nam的Named窗口的索引信息,
后缀为til的给定数据库的本地类型定义的相关信息。
一旦IDA为某个可执行程序创建数据库,它本身就不再需要访问这个可执行文件,除非使用IDA的Debug功能。
跳转指令分三类:
无条件跳转: JMP;
根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);
根据 EFLAGS 寄存器的标志位跳转, 这个太多了.
学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
— MOVSX MOVZX
比如
MOVSX EAX, BYTE PTR
或
MOVZX EAX, BYTE PTR
在C语言中应该如何表达啊?
比如定义一个全局变量
BYTE bt = 101;
DWORD dw;
应该如何把bt赋值到dw中. 并且功能与MOVSX/MOVZX相同?
汇编语言与C语言的语言构件不同,并不是一定能转成完全等价的C语言的代码的。
对于以上代码,可以这样理解:
movsx ==== dw = (DWORD) ( (signed char) (bt) )
movzx ==== dw = (DWORD) ( (unsigned char) (bt) )
movzx是把高位全部用0填充,而movsx是把原来数的最高位扩展成超出的位。
对于bt=101,也就是0x65,八位二进制是,因为它的最高位是0,因此这两种情况,dw都等于0换一个,比如bt=247,也就是0xF7,八位二进制是它的最高位是1。
经过movsx变换后,dw等于0xfffffff7;
而经过movzx变换后,dw等于0x000000f7
交叉参考
通过交叉参考(XREF)可以知道指令代码互相调用的关系.如下:
.textloc_401165: ;CODE XREF:s
文档评论(0)