ImageVerifierCode 换一换
格式:DOCX , 页数:61 ,大小:722.75KB ,
资源ID:22755960      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22755960.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(IDA教程Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

IDA教程Word格式.docx

1、 第六节:枚举类型7 第七节:Bit-fields(位域)8 第八节:结构体9 第九节:结构变量和结构数组10 第十节:联合体和结构体中的结构体11 第十一节:可变的结构体12 第十二节:结构体偏移13 第十三节:联合体偏移量14 第十四节:地址偏移量15 第十五节:最终逆向结果附录第一节:为了演示IDA的功能先写一段小程序。(代码在附录)程序在此 源代码程序执行结果:CUSTOMERS:CUSTOMER 0001: Peter (m)CUSTOMER 0002: John (m)CUSTOMER 0003: Mary (f)PRODUCTS:PRODUCT 0001: BOOK: IDA Q

2、uickStart GuidePRODUCT 0002: SOFTWARE: IDA Pro: PC; WINDOWS DOS; DISASSEMBLYPRODUCT 0003: PhotoRescue: PC MAC; WINDOWS OS-X; RECOVERYPRODUCT 0004: aCrypt: WINDOWS; CRYPTOGRAPHY TOP-第二节:用IDA分析我们前面的程序,我们会发现下图的类型只要按D我们就可以任意转换这些不确定的类型.可以变成byte,word,dword(db,dw,dd)。当然你也可以设置更多的数据转换类型:选择“Options”菜单的“Setup

3、data types”命令就可以设置了值得注意的是:你在数据转换的时候,它是依据数据自身的结构来转换的。我们按“D”的时候,如果下一个字节已经被你转换过,你的本次转换,IDA将会提示让你确认。注:如果你想改变这种默认设置可以在“Options”菜单“Convert already defined bytes”命令里设置撤销你的所有转换按“U”键。-第三节:数据类型自定义转换后,被操作过的数据(就是你按过“D”的)的进制IDA也是可以自定义转变的,通过在“Operands”工具栏的“Number”命令我们可以随意转换数字的进制最下面的“Toggle leading point”就是填补数据前的空

4、位为0(就是说如果当前数据未占满数据格式的所有位高位用0来填补)IDA还可以转换数据的标志位(就是正负)具体操作如下图:最后呢如果这些转换你还不满意(够BT)当然你还可以自定义数据进制如图:-第四节:作者又说话了:很多程序都是包含字符串的,一些被操作过的数据(就是你按过“D”的)可以转化为字符,使用的命令就在“Operands”工具栏上由于编程语言的不同造成字符串也有不同的格式,当然IDA就支持所有的格式了。IDA在转化后会在地址添加一个名字。因为我们的程序是c的所以就找到c的字符串。具体操作如图:如果不是C写的程序怎么办呢?我们可以在“Options”菜单“ASCII string styl

5、e”命令中设置。允许你修改其它类型为默认设置,使用默认设置的快捷键是“A”,或者自定义一种类型可以使用不常用的终止字符。-第五节:在c中,ASCII字符串被认为是字符数组,IDA是如何处理数组的呢?我们用最常用命令来定义数组中的第一个元素,设置第一个元素类型为byte,格式为char,然后点击“*”号键(或者“Edition ”工具栏的“Array”命令)来创建数组。这时弹出一个对话框,可以设置很多变量。你可以定义数组一行的显示个数,还可以使用“Element width”来设置他们之间的宽度。使用“Use dup construct ”选项可以合并连贯的相似字节,“ Display inde

6、x ”选项可以像注释一样显示数组的下标。例如我们设置一个有64个元素的数组,一行有8个元素,每个元素之间的宽度为4,不选取“dup constructs”,选取“Display index ”,我们就可以得到下面的数组。当IDA遇到未被识别的字节他会用红色的高亮显示。当然你也可以选择一个范围来创建数组,IDA会自适应的设定。-第六节:还记得我们在C程序中定义的product_category_t 类型吗?让我们用IDA的“Enumerations”来定义一下。首先,我们打开“Enumerations”窗口来创建一个新的枚举类型我们输入我们的枚举类型值在check_product()函数,我们可

7、以用枚举类型重新定义一些操作数。右键点击在数值上,就会弹出一个菜单,选择“Symbolic constant”。IDA就会自动列举枚举值,用以匹配当前的数值。操作完成,我们就会得到下面的结果:-第七节:BTW:Bit-fields,我的理解就是在结构体中的位标志。太菜!希望高手指正!现在,我们来定义一下在software_info_t 结构中的bitfields。IDA的观点就是,bitefields是一种特殊的枚举类型。我们可以选择在枚举类型创造窗口中的“Bitfield”选项。还记得我们曾经在我们的程序中建立了两种不同类型的bitfields ,plateform和os包含了一种隐藏的模式

8、:用来包含组合模式(用逻辑或来操作) 。因为一种产品可以同时在几种plateforms和OS的组合。另一方面,category bitfield 中每一个数字表示一种类别:一种产品每次只能属于一种类别。在IDA中一种指定的模式,bitfield只能包含一个值。所以在描述plateform 和category bitfields时为了显示组合模式,我们必须创建一个小的bitfields,每个值的一个bit.现在我们开始创建category bitfield。mask值为0x3 (2 bits).我们指定一个名字、一个值、还有bitfield mask。我们还需要定义mask的名字:这个我们不用I

9、DA自动生成的,IDA有一个内存助手可以帮助生成。当所有的bitfields被输入,我们就会得到下面的结果:用Operands 工具栏上的Enum member命令就可以定义我们程序中的Enum member数据-第八节:我们的程序当中包含了很多结构体。现在让我们来在IDA中描述一下结构体,看看是怎么提高汇编代码的可读性。第一步,我们必须打开Structures 窗口,来创建一个新的结构体类型。结构体的成员是一汇编的模式定义的。让我们来定义software_t 结构中的第一个成员。一直按“D”知道它变成“dd”意思就是这个成员的值为 dword类型。把它的格式定义为我们以前定义好的softwa

10、re_info_t 枚举类型,然后我们用Rename命令输入一个适当的名字:info开始定义第二个成员,这次使用ASCII命令(按“A”),在这个环节IDA会弹出一个专用对话框用来设定字符串的大小我们还可以从已经分析好的数据中来建立结构体。举个例子:假设我们选择了一块数据正好是和我们的customer_t结构体的数据格式一样,我们就可以用IDA的“Create struct from data ”命令来创建结构体一旦使用了这个命令,IDA就会在Structures窗口创建一个相对应的结构体我们使用“A”键来修改name成员的长度为32bytes(和我们源代码中定义的一样),然后再给结构体一个好

11、听的名字。我们拿这些结构体有什么用呢?IDA提供给我们两种方法:Apply structure types to initialized data in the program.Convert operands as offsets inside structures.我们将在下面的教程当中来介绍这两种方法-第九节:现在让我们用来customer_t结构体整理另外一个客户信息John。把鼠标指针放在我们定义的结构体的第一个自己上面,然后使用Struct var命令。这样我们就得到了一个新的结构体变量。IDA会自动在结构体成员的后面加上变量名的。通过我们的源码,我们知道有一个包含个4元素的cus

12、tomers数组,我们先前把Peter和John都定义为 customer_t 结构体了。现在取消对Join结构变量的定义,然后在Peter结构上按“*”键创建我们的customer数组,这样IDA就弹出一个数组设置框他会自动检测出来我们要创建的数组最大数是4。下来我们就看到创建好的数组了,剩下的就是改一下数组的名字。-第十节:IDA中可以像定义标准结构体那样来定义联合体。让我们来试着定义product_u 这个联合体吧。book_t和software_t这两个结构体我们已经定义过了。IDA认为联合体就是一种特别的结构体:因此我们打开Structures窗口,运行Add struct type

13、命令,在对话框中我们选择创建Create union 选项。我们可以使用IDA常用的命令来创建联合体成员,分别添加一个book_t 结构体类型的book和一个software_t 结构体的software联合体成员当然结构体也可以嵌套一个结构体。事实上,我们刚才做的例子就实现了。记住IDA认为联合体只不过是一种特殊的结构体-第十一节:我们还记得有一个softwares_t 结构体。结构体softs 的长度是不确定的。在汇编中,我们必须创建一个大小可变的结构体。这种结构体创建的时候和普通的一样,仅仅最后一个元素定义的数组元素个数为0。既然IDA不能计算出这种结构体的大小,我们就必须通过选择结构体

14、的区域,来定义大小。我们可以看到所有的类型IDA用注释模式来显示成员名称-第十二节:现在我们知道如何定义联合体和结构体了。现在我们来将一些操作数指向他们原本指向的结构体。在print_customer() 函数中,我们知道他只有一个指向customer_t结构体的参数。EAX寄存器初始化这个指针的值,使他指向customer_t 结构体。因此我们推断所有的EAX+.都是指向customer_t结构体成员的偏移。我们开始重新定义这些结构体变量的偏移,你右击在他们上面IDA会自动给你提供偏移的信息。当我们把所有的偏移量都整理一下的话,汇编代码马上就变得清晰易懂了。print_software()函

15、数呢就是另外一个例子:EBX在初始化的时候指向了software_t 及构体。注意EBX寄存器在整个函数中都有应用(一个一个替换会累死的)。不要紧张,IDA会使用一次操作就能替换全部。做法如下:选择整个函数的代码,然后选在Operands工具栏上的Offset (struct) 命令。弹出Structure offsets窗口。然我们在列表中选择EBX寄存器。左边树形视图显示了在IDA中定义的所有结构。右边就显示与EBX有关系的所有操作。如果我们选择了左边的一个结构,IDA就会自动改变被选择代码中与结构体有关的偏移量。树视图前面不同的符号表示经过计算后的状态。对号就表示完全匹配,相反就是不完全

16、匹配。在我们的操作中正好完全匹配。确定以后,我们就得到了下面的结果:-第十三节:依靠产品种类,我们可以调用适当的函数来打印产品信息。但是这一次的结构体偏移量跟以前不一样了,它是product_u联合体中的一个成员,它是一个数,这时我们就选择Edit struct 菜单中Select union member命令来处理结果就是这样:Structure offset对话框显示如何表明一个联合体成员。在你选择的区域中打开了这个窗口,IDA就会用“?”来显示联合体类型。如果展开树视图中适当的分支,我们可以选择被描述为联合体成员的偏移量。一旦选中,IDA会用在一种绿色的符号来表示偏移量指向的记录中的联合

17、体。-第十四节:IDA也可以重新定义操作数。在下面的例子中,桔黄色的部分显示一个可能存在的参考使用Operands 工具栏上的Offset 按钮就可以进行转换。-第十五节:To end this tutorial, we propose you a visual comparison of the original C source code and our final interactively disassembled code. 来look look我们用IDA整理的结果把struct customer_t long id; char name32; char sex; -custome

18、r_t struc ; (sizeof=0x28)id dd ?name db 32 dup(?) ; string(C)sex dd ? ; charcustomer_t ends struct softwares_t long count; software_t softs;softwares_t struc ; (sizeof=0x4, variable size)count dd ?softs software_t 0 dup(?)softwares_t endsstruct book_t char title128;book_t struc ; (sizeof=0x80)title

19、db 128 dup(?book_t endsstruct software_t software_info_t info;software_t struc ; (sizeof=0x24)info dd ? enum software_info_tsoftware_t endsunion product_u book_t book; software_t software;product_u union ;book book_t ?software software_t ?product_u endsstruct product_t product_category_t category; product_u p;product_t struc ; (sizeof=0x88)category dd ?

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1