当前位置: 首页 > 工具软件 > IDA PRO > 使用案例 >

IDA工具使用

怀齐智
2023-12-01

IDA Pro工具介绍:

        交互式反汇编器,是典型的递归下降反汇编器。

导航条

        蓝色 :表示常规的指令函数

        黑色 :节与节之间的间隙

        银白色 :数据内容

        粉色 :表示外部导入符号

        暗黄色: 表示ida未识别的内容

IDA主界面

        IDA View三种反汇编视图:文本视图、图表视图、路径视图

        Hex View 十六进制窗口

        Struceures 结构体窗口

        Enums 枚举窗口

        Imports 导入函数窗口

        Exports 导出函数窗口

        Strings 字符串窗口

IDA常用功能及快捷键:

        空格键:切换文本视图与图表视图

        ESC:返回上一个操作地址

        G:搜索地址和符号

        N:对符号进行重命名

        冒号键:常规注释

        分号键:可重复注释

        Alt+M:添加标签

        Ctrl+M:查看标签

        Ctrl+S:查看段的信息

        代码数据切换

        C=>代码  D=>数据  A=>ascii字符串 U=>解析成未定义的内容

        X:查看交叉应用

        F5:查看伪代码

        Alt+T:搜索文本

        Alt+B:搜索十六进制

IDA静态分析:

        导入jni.h分析jni库函数

        拷贝伪C代码到反汇编窗口

        右键=>copy to -assembly-把伪c代码复制到反汇编窗口的汇 编代码。

        IDA可以修改so的hex来修改so,edit=>edit-patchrogram

         在这里建议使用winhex来实现。

IDA动态调试:

       IDA调式界面

1.反汇编窗口

C 将当前地址处的数据解析成代码

P

2.十六进制窗口

编辑内存数据和代码

3.寄存器窗口

修改寄存器的值

4.模块窗口

模块路径和地址

5.线程窗口

6.栈窗口

7.输出信息窗口

IDA调式常用功能

1.断点和运行

设置断点 F2

设置断点不可用 Disable breakpoint

编辑断点 Edit breakpoint

删除断点 Delete breakpoint

继续运行 F9

查看当前所有断点 Ctrl+Alt+B

2.单步调式

单步步入 F7

单步步过 F8

运行到函数的返回地址 Ctrl+F7

运行到光标处 F4

3.IDC脚本

static main(void)
{
	auto fp, dexAddress, end, size;
	dexAddress = 0x77607640;
	size = 0x19E118;
	end = dexAddress + size;
	fp = fopen("D:\\classes.dex", "wb");
	for ( ; dexAddress < end; dexAddress++ )
	fputc(Byte(dexAddress), fp);
}

4.修改内存数据

5.修改寄存器

修改PC寄存器时,最好在跳转指令改,当然如果你对程序流程    把握很好,可以随便PC,只要程序不出错

7.NOP函数或代码

NOP函数MOV R0,R0(00 00 A0 E1/00 1C)

清空指令(00 00 00 00/00 00)

函数头直接返回mov pc,lr(0E F0 A0 E1/F7 46)

8.改变执行流程

修改寄存器的值

修改跳转指令

注意:修改内存和修改代码的时机选择不同,因为修改内存和寄存       器,必须调式到某一处,才能让寄存器和内存是想要的值,此       时修改,而且数据的值一般对程序影响不大,而修改代码就不同了       如果已经走到了那一句代码,才去修改代码,是要报错的,提前在         它 运行到前面1-2条指令时修改代码。原因是PC指令预读三级流       水线:

1.读取指令

2.解析指令

3.执行指令

ADD R6,PC,R6 =>R6=PC+R6=847C+1840=9CBC+8? 9CC4

JNI_OnLoad下断方法技巧

so内寻找

基址+偏移

dvmloadnativecode函数

dlsym(handle,"jni_onload")

.init和.init_array下断技巧

         linker大法,先勾选三项F9运行,再执行jdb,当目标so被加载       时通过基址+偏移下段

 类似资料: