各位观众老爷们,大家好!今天咱们聊点刺激的,关于 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:
- 下载对应你手机架构的 Frida server (例如
frida-server-16.0.8-android-arm64
),可以从 Frida 的 GitHub Releases 页面下载。 -
将 Frida server push 到手机的
/data/local/tmp
目录下:adb push frida-server-16.0.8-android-arm64 /data/local/tmp/frida-server
-
修改 Frida server 的权限,使其可执行:
adb shell chmod 755 /data/local/tmp/frida-server
-
运行 Frida server:
adb shell /data/local/tmp/frida-server &
iOS (越狱设备):
- 通过 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。
- 首先,找到你要分析的 App 的包名。 可以通过 ADB 命令
adb shell pm list packages
来查看。 -
然后,使用 Objection 连接到 App:
objection -g <你的 App 的包名> explore
-
进入 Objection 的交互式界面后,执行以下命令:
android sslpinning disable
或者,如果你的目标是 iOS App,则执行:
ios sslpinning disable
如果一切顺利,Objection 会提示 "SSL Pinning disabled"。
- 现在,你就可以使用抓包工具(例如 Charles、Fiddler)来抓取 App 的网络请求了。
进阶技巧:自定义 Frida 脚本
虽然 Objection 提供了很多常用的命令,但是有些时候,你可能需要自定义 Frida 脚本来实现更复杂的功能。 Objection 也支持执行自定义的 Frida 脚本。
-
首先,创建一个 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); } });
-
然后,使用 Objection 执行该脚本:
objection -g <你的 App 的包名> --script script.js explore
高级用法:内存搜索与修改
Objection 的内存搜索功能非常强大,可以帮助我们找到 App 中存储的敏感信息,甚至可以修改内存中的数据。
-
内存搜索: 使用
memory search "<搜索的字符串>"
命令可以在内存中搜索指定的字符串。 例如,搜索字符串 "password":memory search "password"
Objection 会返回所有包含 "password" 字符串的内存地址。
-
内存 Dump: 使用
memory dump <开始地址> <长度> <文件名>
命令可以将指定地址开始的指定长度的内存 dump 到文件中。 例如,将地址0x12345678
开始的 1024 字节的内存 dump 到dump.bin
文件中:memory dump 0x12345678 1024 dump.bin
-
内存修改 (谨慎使用): 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 的代码逻辑。 试试看,也许会有意想不到的收获!