首页
社区
课程
招聘
[原创]IDA静态分析so文件
发表于: 2020-10-27 17:33 9934

[原创]IDA静态分析so文件

2020-10-27 17:33
9934

前言


这是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函数的汇编指令,如下图所示。

这就是最终的效果,分析最终效果,便可以了解这些指令的作用,如下图所示。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (4)
雪    币: 135
活跃值: (410)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以 分析的很棒
2020-11-1 16:23
0
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
重点还是F5插件
2020-11-2 11:11
0
雪    币: 12725
活跃值: (3700)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
F5很给力
2022-3-2 21:48
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
F5 yyds
2022-3-5 00:56
0
游客
登录 | 注册 方可回帖
返回
//