一: 分析“getText”函数ide
1.首先任意打开一个函数,以getText函数为例,以下图所示。函数
2.双击打开该函数,开始分析汇编指令,箭头所指位置是指令的开始处,以下图所示。3d
.text:00001148 STMFD SP!,{R3-R5,LR}blog
压栈操做,把R3-R5,LR分别压到栈顶。get
.text:0000114C MOV R5, R1源码
把R1赋值给R5。it
.text:00001150 LDR R3, [R0]class
将R0的地址给R3。im
.text:00001154 MOV R4, R0d3
将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函数的汇编指令,以下图所示。
这就是最终的效果,分析最终效果,即可以了解这些指令的做用,以下图所示。
小结
本次主要分享了静态分析的流程:
一、分析函数,查看ARM汇编指令。
二、对比分析源码、伪代码、汇编指令三者对应关系。
三、查看跳转,理清逻辑。
四、总结逻辑,实现过程。