在 Android 安全中,root 检测是应用程序用来限制访问和保护核心功能的常见防御机制。不过,在继续深入研究绕过 root 检测的过程中,我们将把重点转移到 Smali 代码上--这是 Android 内部结构的一个强大方面,一旦被篡改,就能揭示绕过 root 检查的路径。本教程以之前的方法为基础,采用技术方法探索 Smali 代码篡改。通过实际操作示例,您将深入了解如何在字节码级别修改应用程序行为,从而掌握导航和反击 Android root 保护策略的高级技术。
篡改 Smali 代码:-
篡改 Smali 代码涉及直接修改 Android 应用程序的字节码,这需要反编译 APK 文件,修改 Smali 代码,然后重新编译成 APK。
工具:-
使用 JADX、Apktool 或 jadx-gui 等工具将 APK 文件反编译为 Smali 代码。这些工具将生成一个包含 Smali 文件的目录结构,Smali 文件代表应用程序的字节码指令。
步骤 1:- 确定相关的 Smali 代码
首先,我们需要打开 Apkttol 以解码应用程序。
打开 Apktool 反编译 APK 的目录。
导航至 smali 目录,其中包含按软件包结构编排的 Smali 代码文件。
图 1:用 apktool 反编译 APK。
图 2:Apktool 反编译 APK 的目录。
步骤 2:- 在 jadx-gui 中分析 Smali 代码文件
使用编辑器中的文本搜索功能搜索与根检测相关的关键字(如 isRooted、checkRoot、rootDetection)。
查找调用 root 检测库或与 root 用户经常利用的系统级功能交互的方法。
如上图所示,我们找到了 rootbeer 的主文件
在 RootBeer(com.scottyab.rootbeer.RootBeer)类中,存在一个名为 isRooted() 的函数,顾名思义,它负责识别设备是否已被 root。
图 3:使用 jadx-gui 分析 apk 代码
步骤 3 :- 验证并理解代码:
查看已确定的代码段,了解如何实施根检测。
分析用于根检测检查的逻辑和条件。
该类的等效 smali 代码位于 /decompiled/smali/com/scottyab/rootber/RootBeer.smali。在这段 smali 代码中,isRooted() 函数位于第 1268 行(如下所示):
图 4:Apktool 反编译 APK 的目录。
在第 1351 行,我们可以看到 isRooted() 函数返回的是
变量 v0 保持不变。要强制该函数返回 false 值,只需将变量 v0 的值从 0x1 改为 0x0(如第 1347 行所示)
图 5:强制 is rooted () 函数返回 false。
要强制此函数返回 false 值,只需将变量 v0 的值从 0x1 改为 0x0(如第 1425 行所示)
图 6:强制 is rooted () 函数返回 false。
要强制该函数返回 false 值,只需将第 1357 行和第 1425 行的变量 v0 的值从 0x1 改为 0x0 即可
我们可以进入 Apktool 反编译 APK 的目录,找到 rootbeer 文件夹并
找到文件名 RootBeer.smali,将第 1357 行和第 1425 行的 v0 值从 0x1 改为 0x0
图 7:更改数值并保存文件
步骤 4 :- 重新编译:
修改后,将更改保存到 Smali 文件中。
使用 Apktool 将修改后的 Smali 文件重新编译成 APK 格式
然后在 nox 模拟器中安装编译应用程序,这样我们就成功地通过篡改 Smali 代码实现了 root 绕过。
修改前
修改后
结论
在本指南中,我们展示了 Smali 代码篡改如何通过直接修改 Android 应用程序的字节码来绕过 root 检测。通过反编译 APK、识别关键 root 检查函数并修改其返回值,我们成功绕过了 root 限制,使应用程序能够在 root 环境中无缝运行。
这种技术突出了 Android 结构的深度和灵活性,同时强调了在字节码层面了解应用程序防御的重要性。在应用这些方法时,请记住篡改应始终以负责任和道德的方式进行。敬请关注更多 Android 五重测试见解,我们将继续揭示移动应用程序安全的新层次!
原文始发于微信公众号(Ots安全):Android 检测:高级 Root 检测绕过 - Smali 代码篡改
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论