安卓逆向,阻止app对root权限的检测

我的CSDN地址:https://blog.csdn.net/zenglintao/article/details/106029499

一、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_
"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

img

首先打开app会发现无法使用,因为手机已经被root了

然后我们进行第一步修改,查找root工具的包名

img

我的手机是使用magisk管理root的,所以我就直接搜索magisk

img

通过查找找到了一个有很多包名的类,可以看出这是一个用来保存字符串变量的类

img

将里面的包名全部替换掉,随便替换成什么字符串都行,目的就是让它不能匹配

然后还要替换里面的路径,路径不能随便替换,不然会导致应用无法打开的

我是用的root管理工具是magisk,magisk会在你的手机根目录创建一个名为sbin的文件夹

里面存放着su和busybox,所以我只要替换掉sbin这个文件夹就可以了

替换掉之后就保存编译

img

再次运行错误代码变成了R008

使用R008继续查找dex文件

img

然后找到了错误码所在的类

这条语句是一个Lambda表达式,写成java就是bVar.f() ? "R008"

就是说当bVar.f()是真的时候就显示R008

我查了一下,这个bVar是b类new的一个对象,而这个b类是在com.scottyab.rootbeer.b这个包下面

我打开了这个包下面的b类,找到 f 方法,发现这里是执行了su命令以及which命令,于是我把这两条命令也替换了,再次保存编译。

img

最后打开app查看结果

img

完美解决root手机不能使用的问题

posted @ 2020-05-09 23:13  zenglintao(雪落)  阅读(14097)  评论(1编辑  收藏  举报