关于逆向工程:IDA静态分析

36次阅读

共计 852 个字符,预计需要花费 3 分钟才能阅读完成。

一:剖析“getText”函数

1. 首先任意关上一个函数,以 getText 函数为例,如下图所示。

2. 双击关上该函数,开始剖析汇编指令,箭头所指地位是指令的开始处,如下图所示。

.text:00001148 STMFD SP!,{R3-R5,LR}

压栈操作,把 R3-R5,LR 别离压到栈顶。

.text:0000114C MOV R5, R1

把 R1 赋值给 R5。

.text:00001150 LDR R3, [R0]

将 R0 的地址给 R3。

.text:00001154 MOV R4, R0

将 R0 给 R4。

.text:00001164 BLX R3

跳转带链接状态切换到 R3。

.text:0000117C ADD R3, PC, R3

将 PC 和 R3 相加给 R3。

曾经晓得他的操作流程,那么它的这些操作为了实现什么逻辑呢?带着这个疑难持续剖析。

二:比照剖析源码、伪代码、汇编指令三者对应关系

1. 如下图所示为源代码的逻辑,它在获取字段的值。

2. 在反汇编窗口中找到 getText 函数,按“F5”, 将汇编指令切换为伪代码,通过查看 IDA 里的伪代码发现:默认传入的参数类型须要批改能力查看,如下图所示。

3. 选中 getText 函数的参数,右键 N 对名称进行批改。第一个参数就是刚刚看到的 env,间接改为 env;右键 Y 对类型的批改,将类型批改为 JNIEnv*。这样就辨认实现了,成果如下图所示。

剖析此处的逻辑:

第一个跳转是:Findclass

第二个跳转是:GetFindID

第三个跳转是:GetObjectFieId

第四个跳转是:GetStringUTFChars

第五个是返回一个:NewStringUTF

接着批改参数,如下图所示。

4. 参数批改实现后,右键抉择 copy 将伪代码拷贝到反汇编窗口,也就是 getText 函数的汇编指令,如下图所示。

这就是最终的成果,剖析最终成果,便能够理解这些指令的作用,如下图所示。

小结

本次次要分享了动态剖析的流程:

1、剖析函数,查看 ARM 汇编指令。

2、比照剖析源码、伪代码、汇编指令三者对应关系。

3、查看跳转,理清逻辑。

4、总结逻辑,实现过程。

正文完
 0