用Frida+objection玩转Android设置应用:一个完整的动态分析实战案例
Android设置应用动态分析实战Frida与objection的高级应用技巧移动安全分析领域近年来发展迅猛各种工具链的成熟让动态分析变得更加高效。本文将聚焦Android系统设置应用com.android.settings通过一系列实战案例展示如何结合Frida和objection进行深度动态分析。不同于简单的工具介绍我们将从实际分析需求出发构建一套完整的动态分析工作流。1. 环境准备与工具链配置在开始分析之前确保你的工作环境已经正确配置。Kali Linux是许多安全研究人员的首选它预装了大部分基础工具。我们需要配置Python多版本管理工具pyenv因为某些工具对Python版本有特定要求。# 安装pyenv基础依赖 sudo apt update sudo apt install -y build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev \ xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev # 安装pyenv git clone https://github.com/pyenv/pyenv.git ~/.pyenv配置完成后安装特定版本的Python并设置为默认pyenv install 3.10.11 pyenv global 3.10.11接下来安装Frida工具链注意版本兼容性非常重要。objection 1.11.0需要配合Frida 14.2.14使用pip install frida14.2.14 frida-tools9.2.2 objection1.11.0提示在Android设备上部署frida-server时务必选择与设备架构匹配的版本。使用adb shell getprop ro.product.cpu.abi查询设备架构。2. 静态分析与动态分析的结合完整的移动应用分析应该结合静态和动态两种方法。我们使用jadx进行初步的静态分析了解目标应用的基本结构。# 下载并启动jadx wget https://github.com/skylot/jadx/releases/download/v1.4.7/jadx-1.4.7.zip unzip jadx-1.4.7.zip cd jadx/bin ./jadx-gui在jadx中打开Settings.apk后重点关注以下几个包结构com.android.settings.display- 显示设置相关逻辑com.android.settings.bluetooth- 蓝牙功能实现com.android.settings.wifi- WiFi配置管理静态分析可以帮助我们识别关键类和潜在的分析目标而动态分析则能验证这些假设并获取运行时信息。3. objection基础操作与内存漫游objection提供了强大的REPL环境让我们能够交互式地探索目标应用。启动objection连接到运行中的Settings应用objection -g com.android.settings explore进入REPL后我们可以执行各种内存操作命令。例如搜索DisplaySettings类的实例android heap search instances com.android.settings.DisplaySettings找到实例后可以进一步探索其方法和属性android heap execute instance_id getPreferenceScreenResIdobjection的常用命令可以总结为以下几类命令类型功能描述示例内存搜索查找类实例或字符串android heap search instances class方法调用执行对象方法android heap execute id methodHook操作监视类或方法android hooking watch class class信息列举列出activities/services等android hooking list activities4. 深入Hook技术与脚本编写基础的objection命令可以满足简单需求但复杂场景需要编写自定义Frida脚本。objection支持直接注入JavaScript代码这大大扩展了其能力范围。首先我们可以在objection中直接执行JS代码android heap evaluate instance_id然后输入JS代码按EscEnter执行console.log(Class name: clazz.getClass().getName());对于更复杂的Hook需求我们可以生成模板脚本android hooking generate simple com.android.settings.DisplaySettings生成的脚本会包含DisplaySettings类所有方法的Hook点我们可以在此基础上修改添加自定义逻辑。例如监控蓝牙开关状态变化Java.perform(function() { var BluetoothDevice Java.use(android.bluetooth.BluetoothDevice); BluetoothDevice.setPairingConfirmation.overload(boolean).implementation function(confirm) { console.log([*] setPairingConfirmation called with: confirm); return this.setPairingConfirmation(confirm); }; });将脚本保存为bluetooth_hook.js后可以通过objection加载objection -g com.android.settings explore --script bluetooth_hook.js5. 高级技巧与插件应用objection的插件系统可以进一步扩展其功能。Wallbreaker插件特别适合进行内存分析和类结构探索。安装Wallbreakermkdir -p plugins/ git clone https://github.com/hluwa/Wallbreaker plugins/Wallbreaker在objection中加载插件plugin load plugins/Wallbreaker使用Wallbreaker进行类结构分析plugin wallbreaker classdump --fullname android.bluetooth.BluetoothDevice另一个实用插件是frida-dexdump用于动态脱壳pip install frida-dexdump frida-dexdump -U -f com.android.settings对于显示设置的分析我们可以结合多种技术首先用jadx定位DisplaySettings的关键方法使用objection搜索内存中的实例编写Hook脚本监控关键方法调用使用Wallbreaker分析类结构必要时用frida-dexdump提取运行时dex6. 实战案例追踪显示亮度调节逻辑让我们通过一个完整案例展示工作流程。目标是追踪Settings应用中亮度调节的逻辑。首先用jadx静态分析发现亮度调节相关代码主要在DisplaySettings和BrightnessPreferenceController类中。启动objection并搜索DisplaySettings实例android heap search instances com.android.settings.display.DisplaySettings找到实例后Hook关键方法android hooking watch class_method com.android.settings.display.BrightnessPreferenceController.onPreferenceChange操作设备亮度滑块观察控制台输出可以看到方法调用的详细参数和返回值。进一步编写JS脚本获取更多信息Java.perform(function() { var BrightnessController Java.use(com.android.settings.display.BrightnessPreferenceController); BrightnessController.onPreferenceChange.implementation function(preference, newValue) { console.log(Brightness changed to: newValue); var result this.onPreferenceChange(preference, newValue); console.log(Method returned: result); return result; }; });通过这种系统性的分析方法我们可以深入理解Settings应用的内部工作机制为安全研究和功能分析打下基础。