读者如果发现错误,请指正。
IDA的逆向分析水平就是一个逆向工程师的水平;
7.1 IDA与OD的联合使用
一般使用OD下断点,找到关键代码位置,然后使用IDA静态看流程。
需要注意的是IDA需要与OD基地址对齐,这样才方便在IDA中查找代码位置,具体方式如下:
Edit ---> Segment ----- Rebase Program : 设置基地址;
在WINdbg中基地址在“符号”中查看;在OD中基地址在Model中查看;
IDA中G + 地址,即可找对对应位置;
7.2 数据不小心转换成为函数,如何处理?
如果不小心使用P将数据识别成了函数,可以使用D,转换成数据,再用C转换成为代码;
毕竟IDA不存在撤销功能;
7.3 IDA如何创建结构体?
7.3.1 结构体的创建
IDA中结构体成员一般出现在:类初始化的地方(XX.dll);
根据成员的多少,我们创建结构体的大小,注意虚表vt占4个字节;一般有三个地方有助于我们创建结构体:初始化函数成员列表、memcpy函数的使用、数据库字段;
在初始化函数中看见最后一个成员为V1[239],可以 使用“Reset Point Type” 可以改为:v1-> 1036,这样就能看到成员在的偏移,就可以设置结构体大小为1036 + 4.。
创建了结构体后,structure窗口中可以N改写字段的名称;
7.3.2 结构体的使用
创建好结构体后,我们就可以使用Y来修改分析的数据类型;
7.3.3 结构体的导入和导出使用
有时我们需要在一个数据库中创建结构体,在另外的一个数据库中使用,具体方法:
在数据库A的localtype视图中选中需要导出的数据类型,右键 --- “export to header”,如果是多个结构体写到同一个文件,请选择追加方式(Append),导出到一个.h文件;
接下来是导入到另外一个数据库,具体方法:
Ctrl + F9 :”选择一个C文件头去解析”,选择需要导入的一个文件,这样我们就会可以在LocalType中查看我们自建的结构体;
7.3.4 创建结构体 例子
一般方法构建结构体(方法1):在structure窗口,Insert 一个结构,自己命名(如struct_4),在end处使用D添加结构体数据,在成员处D 切换占有的字节数(db、dw、dd),在成员处使用Y来改变识别类型(int、float、double、LPVOID、BYTE field_60[1024]、)
使用: 在相应的rdata处,使用Y改变当前位置的识别类型为struct_4;
例如:
创建结构体数组:
00000000 struc4 struc ; (sizeof=0x28, mappedto_194)
00000000 ; XREF: .data:stru_A47A220/r
00000000 field_0 dw ?
00000002 field_2 db ?
00000003 field_3 db ?
00000004 field_4 dd ?
00000008 field_8 dd ?
0000000C field_C db ?
0000000D field_D db ?
0000000E field_E db ?
0000000F field_F db ?
00000010 field_10 dd ?
00000014 field_14 dd ?
00000018 field_18 dd ?
0000001C field_1C dd ?
00