Root检测绕过技术
通过FRIDA绕过检测
[TOC]
介绍 此文章翻译出处8ksed.io
Android设备上的Root检测相关的技术以及绕过它的方法。主要重点将放在应用开发者采用的策略上,以保护他们的应用程序并防止其在受损设备上运行。为了学习目的,我们将使用一个名为Root Detector的示例Root检测应用程序 下载地址
示例应用程序已安装在我们的Root设备上,正如我们所看到的,它表明设备已经Root。
通过使用jadx-gui来反编译apk文件,以了解Root Detector应用程序在设备上安装后的操作。AndroidManifest.xml是所有Android应用程序的入口点,其中定义了应用程序的不同组件和服务。
jadx-gui 查看XML Permissions 权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <permission android:name="com.8ksec.inappprotections.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" android:protectionLevel="signature"/> <uses-permission android:name="com.8ksec.inappprotections.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"/> 从权限的角度来看,似乎没有什么有趣的东西。主要使用存储权限。
除了这些定义的权限之外,看看这个应用程序中还有哪些其他组件。
<activity android:exported="true" android:name="com.8ksec.inappprotections.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> 可以看到它只有一个活动,即MainActivity,它会被启动。
看看在这个MainActivity.java文件中有什么。
可以看到jadx无法反编译大部分代码。这是因为代码混淆。但让我们尽量从我们已经反编译的代码中找出一些信息吧!
似乎MainActivity有一个静态块,在其中调用 System.loadLibrary("inappprotections") ,负责将本地库加载到内存中。
static { String str = "ۧ۠ۧۤ۬۠ۗۛۙۡۦۚۙۡۧۢۛۡۘ۟ۛۥۢ۬۠۬ۨ۬۟ۤۙۙۢۘ۠ۡۛۤۨۨۨۙۜ۟۬ۜۜۙۦۘۤ۠ۨۨ۟ۡ"; while (true) { switch ((((str.hashCode() ^ 436) ^ 234) ^ 912) ^ (-1907612566)) { case -1083933248: return; case 1567145872: System.