5、动态分析工具入门:Frida环境搭建、Objection使用、Xposed框架基础

动态分析,说白了就是让App真正跑起来,我们在旁边盯着它的一举一动。静态分析能看到代码结构,但很多逻辑——比如网络请求、加密解密、运行时校验——只有运行起来才能抓到。今天我要带你入门三个最常用的动态分析工具:Frida、Objection和Xposed。

我个人习惯把动态分析比作「手术」。Frida是那把最锋利的手术刀,Objection是带导航的手术机器人,而Xposed则是给系统打补丁的改造手术。各有各的用处,我们一个一个来看。

5.1 Frida环境搭建

Frida是目前最流行的动态插桩框架。它支持Windows、macOS、Linux,还能跨平台调试Android和iOS。我当年第一次用Frida时,被它的「注入即用」特性惊艳到了——不需要重启应用,不需要修改APK,直接就能Hook函数。

5.1.1 安装Frida工具链

Frida分为两部分:电脑端工具和手机端服务。电脑端用pip安装:

pip install frida-tools

安装完成后,验证一下:

frida --version
# 输出类似 16.0.1

嗯,这里要注意版本号。Frida的版本必须和手机端的frida-server版本一致,否则连不上。我曾经因为版本不匹配,折腾了整整一个下午才发现问题。

5.1.2 连接Android设备

手机端需要先root,然后推送frida-server。步骤如下:

  1. 从GitHub下载对应架构的frida-server(arm64或arm)
  2. 解压后推送到手机:
adb push frida-server-16.0.1-android-arm64 /data/local/tmp/
adb shell chmod 755 /data/local/tmp/frida-server-16.0.1-android-arm64
  1. 启动frida-server:
adb shell
su
/data/local/tmp/frida-server-16.0.1-android-arm64 &

启动后,电脑端用frida-ps -U命令检查连接:

frida-ps -U
# 如果看到进程列表,说明连接成功
注意: 如果手机没有root,可以用frida-gadget模式。把libfrida-gadget.so注入到APK中重新打包。不过这种方式更复杂,我建议初学者先搞一台root手机。

5.2 Frida基础使用

连接成功后,就可以写Hook脚本了。Frida使用JavaScript编写Hook逻辑。来看一个最简单的例子——Hook一个Java方法:

// hook.js
Java.perform(function() {
    var MainActivity = Java.use('com.example.app.MainActivity');
    MainActivity.secretMethod.implementation = function() {
        console.log('secretMethod被调用了!');
        return this.secretMethod();
    };
});

运行脚本:

frida -U -l hook.js com.example.app

你想想看,这有多方便?不需要反编译,不需要改代码,直接就能拦截方法调用。我在分析一个金融App时,就是用这种方式抓到了它的加密密钥——它把密钥放在一个native方法里,但Frida直接Hook了Java层的调用,密钥就原形毕露了。

5.2.1 常用Frida API

API 用途 示例
Java.use() 获取Java类 Java.use('java.lang.String')
Java.perform() 在Java线程中执行 Java.perform(function(){...})
Interceptor.attach() Hook native函数 Interceptor.attach(targetAddr, {...})
setTimeout() 延迟执行 setTimeout(function(){...}, 1000)
小技巧: 调试时可以用console.log()输出日志,配合frida的--no-pause参数,避免脚本卡住。

5.3 Objection使用

Objection是Frida的「豪华版」——它把常用的Hook操作封装成了命令行工具。说白了,你不需要写JavaScript脚本,直接敲命令就能完成很多操作。

安装Objection:

pip install objection

启动Objection并附加到App:

objection -g com.example.app explore

进入交互模式后,你可以:

  • android hooking list classes —— 列出所有类
  • android hooking list class_methods com.example.app.MainActivity —— 列出类的方法
  • android hooking watch class_method com.example.app.MainActivity.secretMethod —— 监控方法调用
  • android sslpinning disable —— 关闭SSL证书校验

我最常用的是sslpinning disable。很多App会做证书校验,抓包工具抓不到HTTPS流量。Objection一行命令就能绕过,省去了手动Hook的麻烦。

5.4 Xposed框架基础

Xposed和Frida的思路不太一样。Frida是运行时注入,Xposed是修改系统框架——它替换了Android的Zygote进程,在App启动前就加载了你的模块。

Xposed的优势是持久化。你写一个模块,安装后重启手机,Hook就永久生效了。Frida每次都要重新注入,适合调试阶段。Xposed适合做长期使用的功能,比如去广告、改机型、自动抢红包。

5.4.1 Xposed模块开发

一个最简单的Xposed模块:

public class MainHook implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
        if (!lpparam.packageName.equals("com.example.app"))
            return;
        
        findAndHookMethod("com.example.app.MainActivity", 
            lpparam.classLoader,
            "secretMethod", 
            new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) {
                    XposedBridge.log("secretMethod被调用了!");
                }
            });
    }
}

开发Xposed模块需要:

  1. 创建一个Android项目
  2. 引入Xposed Framework API
  3. 在AndroidManifest.xml中声明xposed模块
  4. 编译安装,在Xposed Installer中启用模块
注意: Xposed框架需要root权限,而且对Android版本有要求。Android 7.0以上需要刷入EdXposed或LSPosed。我建议初学者先玩Frida,Xposed的坑更多一些。

5.5 知识体系总览

下面这张图帮你理清三个工具的关系和适用场景:

动态分析工具知识体系 Frida Objection Xposed 运行时注入 JS脚本Hook 命令行操作 SSL绕过 系统框架修改 持久化Hook 适用场景对比 Frida: 快速调试、逆向分析、一次性Hook Objection: 快速绕过SSL、内存搜索、自动化操作 Xposed: 长期模块、去广告、改系统行为、定制功能

5.6 避坑指南

最后分享几个我踩过的坑:

  • Frida版本不匹配:电脑端和手机端的frida-server版本必须完全一致。我曾经用16.0.1的电脑端连16.0.0的手机端,报错信息很隐晦,查了半天才发现。
  • Objection卡死:如果Objection附加后没反应,试试用--gadget参数,或者先启动frida-server再运行Objection。
  • Xposed模块不生效:检查Xposed Installer里是否启用了模块,以及模块的API版本是否匹配。Android 8.0以上建议用EdXposed。
  • SSL绕过失败:有些App用了双向证书校验,Objection的sslpinning disable可能不够。这时候需要结合Frida手动Hook证书验证逻辑。

嗯,动态分析工具就讲到这里。这三个工具各有千秋,Frida灵活、Objection方便、Xposed持久。我建议你先从Frida入手,把基础打牢,再慢慢接触其他工具。动手试试吧,光看是学不会的。

公众号:蓝海资料掘金营,微信deep3321