安卓逆向之绕过root检测

admin 2024年2月9日01:22:15评论19 views字数 1989阅读6分37秒阅读模式

如今,root和模拟器检测功能在大多数 Android 应用程序中都很常见,这使得渗透测试人员和逆向工程师更难测试应用程序。所以绕过 root 也成了 Android 和移动应用程序渗透测试的第一步。

本文将更侧重于 Android 应用程序的逆向工程,而不是渗透测试。我将解释从 Playstore 提取 apk 文件、进行逆向工程以查找并删除 apk 内的 root 检测代码并将其重新打包以在已 root 的模拟器设备上启动的步骤。

这里需要用到的工具有:

-   Apktool

-   Jadx-gui

-   jd-gui

-   dex2jar

-   MobSF

-   jarsigner

-   Android studio platform tools and emulator devices(谷歌真机)

安卓逆向之绕过root检测

这是在模拟器中启动应用程序时弹出的root检测警报,按下“确定”按钮后,应用程序会自行退出。许多Android应用程序都是这种情况,以防止黑客对这些应用进行逆向。我们必须绕过这些检查来进一步测试应用程序,我将使用 adb shell 从 Android 模拟器中提取应用程序。

只需打开 adb shell 并使用下面屏幕截图中提供的命令查找其中安装的第三方软件包:

安卓逆向之绕过root检测

列出的包是我试图进行逆向工程的应用。为了将其拉出,我需要找到可以通过运行命令_“pm path package-name”_找到的实际路径。

安卓逆向之绕过root检测

**注意:**在某些应用程序中可能有多个文件而不是一个。在这种情况下,您必须手动将这些文件合并到一个 APK 文件中。有多种工具可用于组合拆分的 APK。SAP(split APKs)是一个可用于合并拆分的APK以进行进一步的测试的工具。

为了拉出apk文件,我使用了adb pull命令和apk文件的路径。我可以将文件导出到系统中并开始分析。

为了分析代码,我将使用 Jadx-GUI。它是一个优秀的java反编译器,非常易于使用,我可以探索整个包中的代码。第一个主要任务是找到启动活动,以便我们可以跟踪root检测代码,然后尝试绕过它。我主要使用mobSF进行 Android APK 的静态分析。它是一个功能强大的自动化静态分析工具,可以通过在单个页面上列出所有重要信息来使我们的工作变得更轻松。它还列出了启动活动和其他重要信息。

安卓逆向之绕过root检测

由上图,每当在模拟器中打开该应用程序时,第一个被调用的是 SplashActivity。在 Jadx-GUI 中,我搜索了 Activity,发现了一些有趣的代码。在 onCreate 方法中,调用一个返回 true 或 false 的特定函数。如果条件为真,则会显示已取得 root 权限的设备错误消息并退出应用程序。但是,如果该函数返回 false 值,则意味着设备未获得 root 权限并且应用程序将继续运行。我将进一步分析该函数的作用。

安卓逆向之绕过root检测

在上面的屏幕截图中,很明显,root检测是在**_m_**类的函数**_i()_**中处理的。在 jadx-GUI 中,我可以双击一个函数,它会自动将我带到源代码,这非常方便,尤其是在逆向高度混淆的应用程序时。

安卓逆向之绕过root检测

函数**_i()_**依次调用其他多个函数来检查设备是否已 root、在模拟器中运行、包含 google api 和更多信息。在这里,就跟踪到了确认设备是否root了的bool原始函数,可以简单地修补它以始终返回 false。为此,我必须更改 smali 中的代码,因为 jadx-GUI 无法修补应用程序。

**注意**:在一些高安全性应用程序中,代码被混淆,jadx-GUI 无法反编译应用程序的一些高度混淆的部分。这就是为什么我还使用**dex2jar**和**jd-gui**来尝试反编译甚至不包含 ascii 字符的高度混淆的代码。

对于修补应用程序,我使用 apktool 首先将 apk 包反编译为 smali 类,然后尝试更改 smali 语法中的代码并再次重新打包应用程序。第一步是反编译该包。使用 apktool 反编译应用程序的命令很简单:

apktool d app_package.apk -o 反编译文件夹名称_**

安卓逆向之绕过root检测

从 jadx-GUI,我可以获得我想要修补的函数的路径。它是 smali 类中的一个文件夹,包名为 q → m.smali。该文件中有一个名为 i() 的方法。

安卓逆向之绕过root检测

我只需要删除所有不必要的代码并简单地在该函数中返回 false 即可。所以我修改了 smali 语法并返回 false,同时删除了文件中所有不必要的东西。

安卓逆向之绕过root检测

到这里应用程序已修补,只需重新打包应用程序,对其进行签名并将其拖放到模拟器中进行安装即可。

安卓逆向之绕过root检测

这里使用 jarsigner 来使用自签名证书来签署应用程序。之所以需要,是因为 Android 不允许应用程序在未签名的情况下运行。然后可以在模拟器上安装并运行该apk,以查看root检测代码是否被绕过。

安卓逆向之绕过root检测

在上面的屏幕截图中,可以看到 Android 应用程序已成功运行,并且初始 root 消息未显示。

原文始发于微信公众号(若水实验室):安卓逆向之绕过root检测

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月9日01:22:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安卓逆向之绕过root检测http://cn-sec.com/archives/2416259.html

发表评论

匿名网友 填写信息