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

前言

a78353723e08bb7c7e3de1ab54f5df78.png

这是getText的函数原型。

分析“getText”函数

1.找到getText这个函数,如下图所示。

de5c42e408368d05fbd492353e4d590f.png

2.双击打开该函数,开始分析汇编指令,箭头所指位置是指令的开始处,如下图所示。

99de565292653533bc502c7ec865dc25.png

.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。

c5c861cb07e4c4910d21ad2aea74e3b4.png

已经知道他的操作流程,那么它的这些操作为了实现什么逻辑呢?带着这个疑问继续分析。

对比分析源码、伪代码、汇编指令三者对应关系

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

e947f3b2314220c3c86c99b175cb408a.png

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

c9911e73cb7d4fd166edbf79549d14e4.png

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

e76be03895b05c26da7baa1b5301f09a.png

分析此处的逻辑:

第一个跳转是:Findclass

第二个跳转是:GetFindID

第三个跳转是:GetObjectFieId

第四个跳转是:GetStringUTFChars

第五个是返回一个:NewStringUTF

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

e839ad1bc931786b8351bbd7c594832b.png

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

2378c2a863b9f767a3a013fe7bb80368.png

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

bc8fbdf60bac3342820207c53d4a2ebe.png

小结

本次主要分享了静态分析的流程:

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

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

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

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

如果你也多安卓逆向感兴趣,可以在评论区讨论噢

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值