Root检测是移动应用安全中的一个重要方面,特别是在安卓平台上。当一个设备被“Root”时,用户可以获得对设备操作系统最高级别的访问权限,这通常用于破解、修改系统设置或者安装未经授权的应用。对于开发者来说,检测设备是否已经被Root可以帮助他们:
保护应用安全:通过检测Root环境,开发者可以阻止一些恶意行为,比如绕过正常的权限验证、修改敏感数据等。
优化用户体验:某些功能可能只在非Root环境中更稳定或更安全,因此开发者可以提供更优化的用户体验。
法律和合规性:在一些行业中,如金融或医疗,确保应用在非Root环境中运行是合规性要求的一部分。
以某新闻应用为例,在已经Root的手机上打开应用,出现应用对手机进行Root检测后应用直接退出的问题:

一、APK逆向分析
1、查壳
使用PKiD对apk进行查壳分析:

PKiD查壳结果为:《360》加固。因此,不能直接对apk文件进行反编译,需要先经过脱壳处理。
2、脱壳
由于"《360》加固"属于一代壳,可使用 frdia-dexdump 来脱壳:

脱壳过程一切正常,没有任何报错,脱壳结束后将在电脑当前目录下生成脱壳后的dex文件:

3、反编译
将脱壳出来的dex文件所在目录整个拖入到jadx-gui中进行反编译:

反编译完成后,就可以对源码进行逆向分析了。
4、源码分析
回到最初我们遇到的问题:

在已经Root的手机上运行该APP,出现"安全提示"弹窗:
您的手机已经Root,存在安全风险!
在接触Root之前,您将无法使用XXX!
知道了
根据弹窗中的"您的手机已经Root"文本信息在jadx-gui中进行搜索,搜索出唯一结果:

我们点击这条记录跳转到代码处:

从截图中可以看到弹窗信息是通过showRootDialog这个方法创建的:
private void showRootDialog() {
new AlertDialog.a(this).setTitle("安全提示").d("您的手机已经Root,存在安全风险!\n在解除Root之前,您将无法使用XXX!").f("知道了", new d()).create().show();
}
然后查看对showRootDialog的调用位置,发现全局就两个地方使用到了:

第一处使用showRootDialog的位置:

第二处使用showRootDialog的位置:

从这两处调用位置可以看到一个共同点,showRootDialog调用之前都是先调用下面这个方法
cn.thecover.www.covermedia.util.s.b()
之后,如果返回true则调用showRootDialog(),否则便不会调用showRootDialog()。现在我们看看cn.thecover.www.covermedia.util.s.b这个方法的实现细节:

从这个方法可以看出, cn.thecover.www.covermedia.util.s.b的功能是检测环境中是否存在su可执行文件,如果存在su可执行文件,则返回true,代表手机被Root,反之,则返回false。
至此,我们对APP中的Root检测功能完成了逆向分析,只要想办法让cn.thecover.www.covermedia.util.s.b方法在调用时返回false,就可以绕过Root检测了。
二、Root检测绕过
1、Frida Hook手动绕过
基于上述对Root检测功能的逆向分析可知,只需对cn.thecover.www.covermedia.util.s.b这个方法进行Hook,让其返回False则可绕过Root检测,具体代码如下:
function hook_root() {
let s = Java.use("cn.thecover.www.covermedia.util.s");
s["b"].implementation = function () {
console.log(`s.b is called`);
let result = this["b"]();
console.log(`s.b result=${result}`);
return false;
};
}
Java.perform(function () {
console.log('hook 注入')
hook_root();
})
在手机上启动Frida-Server,客户端通过Frida客户端注入上述Hook脚本,以Spawn模式运行就可以绕过Root检测了。
2、编写Xposed模块绕过
除了Frida Hook注入脚本外,还可以自己编写Xposed脚本进行Hook:

配合LSPosed框架,使用Xposed模块的好处是可以长久且稳定地在手机上运行,操作也更方便。
3、BypassRootCheckPro绕过
除了自己编写Xposed模块以外,还有一种更通用的方案,使用开源的Xposed模块:Bypass Root Check Pro。
Bypass Root Check Pro是一款基于LSPosed现代Xposed框架构建的模块,旨在以专业的方式绕过各种root检查机制。它的独特之处在于结合了Java和原生(C/C++)级别的钩子技术,针对现代应用环境下的复杂检测逻辑提供了全方位的解决方案。
BypassRootCheckPro模块下载地址
https://github.com/gauravssnl/BypassRootCheckPro/releases使用上需要配合LSPosed框架,选择BypassRootCheckPro这个模块和目标应用,亦可绕过Root检测。
1262

被折叠的 条评论
为什么被折叠?



