Objection (Frida 的上层封装):如何利用它自动化执行常见的逆向任务,如绕过 SSL Pinning、内存搜索等?

各位观众老爷们,大家好!今天咱们聊点刺激的,关于 Frida 的上层封装—— Objection。 别看它名字有点“反对”的意思,其实它可是在逆向工程领域里扮演着“拥抱”的角色,拥抱各种自动化任务,让咱们这些逆向工程师也能偷懒耍滑,啊不,是提高效率!

开场白:Objection 是什么?

先来个简单粗暴的定义:Objection 就像是 Frida 的小秘书,帮你把复杂的 Frida 脚本封装成一个个简单的命令,让你不用写一行 Frida 脚本就能完成很多常见的逆向任务。 想象一下,你想绕过一个 App 的 SSL Pinning,用 Frida 你可能要写几十行脚本,调试半天。但是用了 Objection,一条命令就搞定,是不是感觉人生都充满了希望?

Objection 的安装和配置

在开始之前,确保你已经安装了 Python 和 pip。 然后,以管理员身份运行以下命令安装 Objection:

pip install objection

安装完成后,别忘了检查一下是否安装成功:

objection --version

如果看到了 Objection 的版本号,那就说明安装成功了。

接下来,你需要安装 Frida server 到你的手机上。 这步操作会根据你的手机系统有所不同。

Android:

  1. 下载对应你手机架构的 Frida server (例如 frida-server-16.0.8-android-arm64),可以从 Frida 的 GitHub Releases 页面下载。
  2. 将 Frida server push 到手机的 /data/local/tmp 目录下:

    adb push frida-server-16.0.8-android-arm64 /data/local/tmp/frida-server
  3. 修改 Frida server 的权限,使其可执行:

    adb shell chmod 755 /data/local/tmp/frida-server
  4. 运行 Frida server:

    adb shell /data/local/tmp/frida-server &

iOS (越狱设备):

  1. 通过 Cydia 或其他越狱应用商店安装 Frida。

iOS (非越狱设备,需要砸壳):

这个过程比较复杂,涉及到砸壳、重签名等操作,这里不详细展开,可以参考一些相关的教程。

连接到设备

安装好 Frida server 之后,就可以使用 Objection 连接到设备了。 首先,确保你的手机通过 USB 连接到电脑,并且 ADB 已经配置好。 然后,运行以下命令:

objection -g <你的 App 的包名> explore

例如,如果你的 App 的包名是 com.example.app,那么命令就是:

objection -g com.example.app explore

如果一切顺利,你将会进入 Objection 的交互式界面。

Objection 的常用命令和技巧

Objection 提供了很多常用的命令,可以帮助我们完成各种逆向任务。 下面是一些常用的命令:

命令 功能
android sslpinning disable 禁用 SSL Pinning。 这是最常用的命令之一,可以绕过 App 的 SSL Pinning 机制,让你能够抓包分析 App 的网络请求。
android hooking list activities 列出 App 中所有的 Activity。 可以帮助你了解 App 的界面结构。
android hooking list services 列出 App 中所有的 Service。 可以帮助你了解 App 的后台服务。
android hooking list receivers 列出 App 中所有的 Broadcast Receiver。 可以帮助你了解 App 的广播机制。
android hooking list classes 列出 App 中所有的 Class。 可以帮助你了解 App 的代码结构。
android hooking watch class_method 监控指定 Class 的指定 Method 的调用。 可以帮助你了解 App 的代码逻辑。 例如:android hooking watch class_method com.example.app.MainActivity.onCreate
memory search "<搜索的字符串>" 在内存中搜索指定的字符串。 可以帮助你找到 App 中存储的敏感信息,例如密钥、用户名、密码等。
memory dump <开始地址> <长度> <文件名> 将指定地址开始的指定长度的内存 dump 到文件中。 可以帮助你分析 App 的内存结构。 例如:memory dump 0x12345678 1024 dump.bin
ios sslpinning disable 禁用 iOS App 的 SSL Pinning。 和 Android 的类似。
ios hooking list class_methods 列出 iOS App 中指定 Class 的所有 Method。 例如:ios hooking list class_methods NSString
ios hooking watch class_method 监控 iOS App 中指定 Class 的指定 Method 的调用。 例如:ios hooking watch class_method NSString initWithString:

实战演练:绕过 SSL Pinning

接下来,咱们来个实战演练,演示如何使用 Objection 绕过 SSL Pinning。

  1. 首先,找到你要分析的 App 的包名。 可以通过 ADB 命令 adb shell pm list packages 来查看。
  2. 然后,使用 Objection 连接到 App:

    objection -g <你的 App 的包名> explore
  3. 进入 Objection 的交互式界面后,执行以下命令:

    android sslpinning disable

    或者,如果你的目标是 iOS App,则执行:

    ios sslpinning disable

    如果一切顺利,Objection 会提示 "SSL Pinning disabled"。

  4. 现在,你就可以使用抓包工具(例如 Charles、Fiddler)来抓取 App 的网络请求了。

进阶技巧:自定义 Frida 脚本

虽然 Objection 提供了很多常用的命令,但是有些时候,你可能需要自定义 Frida 脚本来实现更复杂的功能。 Objection 也支持执行自定义的 Frida 脚本。

  1. 首先,创建一个 Frida 脚本文件 (例如 script.js)。 例如,以下脚本可以打印 App 的所有 Activity:

    Java.perform(function() {
      var ActivityThread = Java.use("android.app.ActivityThread");
      var currentActivityThread = ActivityThread.currentActivityThread();
      var activities = currentActivityThread.mActivities.value;
    
      for (var activity in activities) {
        var record = activities[activity].value;
        var activityName = record.activity.value.getClass().getName();
        console.log("Activity: " + activityName);
      }
    });
  2. 然后,使用 Objection 执行该脚本:

    objection -g <你的 App 的包名> --script script.js explore

高级用法:内存搜索与修改

Objection 的内存搜索功能非常强大,可以帮助我们找到 App 中存储的敏感信息,甚至可以修改内存中的数据。

  1. 内存搜索: 使用 memory search "<搜索的字符串>" 命令可以在内存中搜索指定的字符串。 例如,搜索字符串 "password":

    memory search "password"

    Objection 会返回所有包含 "password" 字符串的内存地址。

  2. 内存 Dump: 使用 memory dump <开始地址> <长度> <文件名> 命令可以将指定地址开始的指定长度的内存 dump 到文件中。 例如,将地址 0x12345678 开始的 1024 字节的内存 dump 到 dump.bin 文件中:

    memory dump 0x12345678 1024 dump.bin
  3. 内存修改 (谨慎使用): Objection 也可以修改内存中的数据,但是这个操作非常危险,可能会导致 App 崩溃或者出现其他不可预测的问题。 如果你确定要修改内存中的数据,可以使用 memory write <地址> <值> 命令。 例如,将地址 0x12345678 的值修改为 0x41414141

    memory write 0x12345678 0x41414141

    注意: 在进行内存修改操作之前,一定要做好备份,并且确保你知道自己在做什么。

与其他工具的集成

Objection 可以与其他逆向工具集成,例如:

  • Burp Suite/Charles: Objection 绕过 SSL Pinning 后,可以配合 Burp Suite 或 Charles 进行抓包分析。
  • IDA Pro/Ghidra: Objection 可以帮助你找到 App 中的关键函数,然后你可以使用 IDA Pro 或 Ghidra 进行更深入的分析。

一些坑和注意事项

  • Frida server 版本: 确保你使用的 Frida server 版本与 Frida Python 模块的版本兼容。
  • Root 权限: 某些功能需要 Root 权限才能使用。
  • 动态加载代码: Objection 可能无法 hook 动态加载的代码。
  • 混淆代码: 混淆代码会增加逆向的难度。

Objection 的优点和缺点

优点:

  • 简单易用,无需编写复杂的 Frida 脚本。
  • 提供了很多常用的命令,可以快速完成各种逆向任务。
  • 支持自定义 Frida 脚本,可以实现更复杂的功能。
  • 可以与其他逆向工具集成。

缺点:

  • 功能相对有限,无法满足所有逆向需求。
  • 对动态加载代码的支持有限。
  • 依赖 Frida,需要安装 Frida server。

总结

Objection 是一个非常强大的 Frida 上层封装,可以帮助我们自动化执行常见的逆向任务,提高逆向效率。 无论是绕过 SSL Pinning,还是内存搜索,Objection 都能轻松搞定。 但是,Objection 并不是万能的,有些时候你可能需要编写自定义的 Frida 脚本来实现更复杂的功能。

希望今天的讲座能帮助大家更好地理解和使用 Objection。 记住,逆向工程是一个不断学习和探索的过程,祝大家在逆向的道路上越走越远!

最后的最后:彩蛋

给大家分享一个我常用的 Objection 命令组合:

objection -g <你的 App 的包名> explore
android sslpinning disable
android hooking list classes
android hooking watch class_method <你想监控的 Class>.<你想监控的 Method>

这个组合可以快速绕过 SSL Pinning,然后监控 App 中指定 Class 的指定 Method 的调用,可以帮助你快速了解 App 的代码逻辑。 试试看,也许会有意想不到的收获!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注