安卓逆向,阻⽌app对root权限的检测⼀、smali基本语法
本次实战需要⽤到smali语⾔的知识,下⾯讲⼀下smali语⾔的基本语法吧
.field private isFlag:z  定义变量
.method  ⽅法
.parameter  ⽅法参数
.prologue  ⽅法开始
.line 12  此⽅法位于第12⾏
invoke-super  调⽤⽗函数
const/high16 v0, 0x7fo3  把0x7fo3赋值给v0
invoke-direct  调⽤函数
return-void  函数返回void
.
end method  函数结束
new-instance  创建实例
iput-object  对象赋值
iget-object  调⽤对象
invoke-static  调⽤静态函数
条件跳转分⽀:
"if-eq vA, vB, :cond_" 如果vA等于vB则跳转到:cond_
"if-ne vA, vB, :cond_" 如果vA不等于vB则跳转到:cond_
"if-lt vA, vB, :cond_" 如果vA⼩于vB则跳转到:cond_
"if-ge vA, vB, :cond_" 如果vA⼤于等于vB则跳转到:cond_
"if-gt vA, vB, :cond_" 如果vA⼤于vB则跳转到:cond_
"if-le vA, vB, :cond_" 如果vA⼩于等于vB则跳转到:cond_
"if-eqz vA, :cond_" 如果vA等于0则跳转到:cond_
"if-nez vA, :cond_" 如果vA不等于0则跳转到:cond_
简易安卓app开发"if-ltz vA, :cond_" 如果vA⼩于0则跳转到:cond_
"if-gez vA, :cond_" 如果vA⼤于等于0则跳转到:cond_
"if-gtz vA, :cond_" 如果vA⼤于0则跳转到:cond_
"if-lez vA, :cond_" 如果vA⼩于等于0则跳转到:cond_
⼆、root检测分析
app检测root⽆⾮就以下⼏种⽅式
1.检测系统版本是否为开发版
2.检测⼿机上是否安装了root管理器(Magisk,supersu,superuser等)
3.检测⼿机上是否安装了需要root的软件(xposed,lucky patcher等)
4.检测⼿机是否存在⼆进制su⽂件
5.检测⼿机是否存在busybox
三、实战开始
本次实战就⽤⼿机端的MT管理器,⽤apktool的话感觉有点⼤材⼩⽤了
实战对象是某公司的⾦融类app
⾸先打开app会发现⽆法使⽤,因为⼿机已经被root了
然后我们进⾏第⼀步修改,查root⼯具的包名
我的⼿机是使⽤magisk管理root的,所以我就直接搜索magisk
通过查到了⼀个有很多包名的类,可以看出这是⼀个⽤来保存字符串变量的类
将⾥⾯的包名全部替换掉,随便替换成什么字符串都⾏,⽬的就是让它不能匹配
然后还要替换⾥⾯的路径,路径不能随便替换,不然会导致应⽤⽆法打开的
我是⽤的root管理⼯具是magisk,magisk会在你的⼿机根⽬录创建⼀个名为sbin的⽂件夹
⾥⾯存放着su和busybox,所以我只要替换掉sbin这个⽂件夹就可以了
替换掉之后就保存编译
再次运⾏错误代码变成了R008
使⽤R008继续查dex⽂件
然后到了错误码所在的类
这条语句是⼀个Lambda表达式,写成java就是bVar.f() ? "R008"
就是说当bVar.f()是真的时候就显⽰R008
我查了⼀下,这个bVar是b类new的⼀个对象,⽽这个b类是在beer.b这个包下⾯
我打开了这个包下⾯的b类,到 f ⽅法,发现这⾥是执⾏了su命令以及which命令,于是我把这两条命令也替换了,再次保存编译。最后打开app查看结果
完美解决root⼿机不能使⽤的问题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。