Objection
Android逆向-Objection
安装
1 | pip3 install objection |
启动应用
1 | objection -g 包名 explore |
启动时就注入指令(Spawn时Hook)
从Objection的使用操作中我们可以发现,Obejction采用Attach附加模式进行Hook,这可能会让我们错过较早的Hook时机,可以通过如下的代码启动Objection,引号中的objection命令会在启动时就注入App。
1 | objection -g packageName explore --startup-command 'android hooking watch xxx' |
切换端口
换成net模式了。
1 | objection -N -h 127.0.0.1 -p 11451 -g com.example.a11x256.frida_test explore |
env环境目录
env
用于检查与APP有关的环境目录。
例子:
1 | com.example.hookinunidbg on (google: 13) [usb] # env |
memory
dump 内存dump
all
1 | memory dump all <local destination> |
把整个进程都dump到电脑中。例子:
1 | memory dump all D:// (没试过) |
from_base
1 | memory dump from_base <base_address> <size_to_dump> <local_destination> |
手动指定地址,大小,并dump到电脑中:
1 | memory dump from_base 0xdbbe4000 20480 D://libhookinunidbg.so |
dump出来的是加载到内存后的so,因此大小和排布和原来的so都有区别。
list
modules 枚举所有模块⭐
1 | memory list modules |
打印Android内所有加载的模块。
1 | memory list modules --json D://hookinunidbg.json |
json模式dump,写入电脑中。
exports 模块导出函数⭐
1 | memory list exports libhookinunidbg.so |
执行结果:
1 | Save the output by adding `--json exports.json` to this command |
1 | memory list exports libhookinunidbg.so --json D://libliblib.json |
json模式dump,写入电脑中。
search 查找
–string 搜索字符串
1 | memory search "ABCDEFG" --string |
–offsets-only 只打印地址
1 | memory search "ABCDEFG" --offsets-only --string |
按字节搜索
16进制(可以留??
表明不确定)
1 | memory search "41 42 43 44 45 46 ?? 47 48" |
write 写入内存
谨慎使用,因为容易报错。
1 | memory write "<address>" "<pattern eg: 41 41 41 41>" (--string) |
比如:
1 | memory write 0x70dcfc20 "ABCDE" --string |
android
heap(没搞定)
1 | android heap search instances com.android.settings.DisplaySettings //堆内存中搜索指定类的实例, 可以获取该类的实例id |
root
1 | //尝试关闭app的root检测 |
hooking⭐
list
activities 枚举Activity⭐
最常用的就是枚举Activity
1 | android hooking list activities |
例子:
1 | com.example.hookinunidbg on (google: 13) [usb] # android hooking list activities |
class_methods 枚举方法⭐
枚举到想要的Activities后,再去看类对象里面有什么方法。
1 | android hooking list class_methods <class name> |
比如:
1 | com.example.hookinunidbg on (google: 13) [usb] # android hooking list class_methods com.example.hookinunidbg.MainActivity |
class_loaders
枚举类加载器。这是系统底层的玩意,不是很有用。
classes
枚举所有加载的类。
注意,class的数量会非常多,因此这个功能基本没啥用处。
receivers(报错)
列举广播接收者。但是报错。
services(报错)
列举系统服务。但是报错。
generate
用于快速生成Frida Hook脚本模板。
生成的脚本可以单独在Frida里面运行。
class 生成Frida模板⭐
1 | android hooking generate class |
快速获得一个Hook模板Js脚本。
simple 生成Frida模板⭐
为指定的类中的所有方法生成Hook模板。
1 | android hooking generate simple com.example.hookinunidbg.MainActivity |
get
似乎只有一个current_activity
能用
用于得到现在APP中启动着的Activity。
1 | android hooking get current_activity |
比如:
1 | com.example.hookinunidbg on (google: 13) [usb] # android hooking get current_activity |
search
classes 搜索类⭐
根据字符串搜索类。
1 | android hooking search classes <name> |
比如:
1 | com.example.hookinunidbg on (google: 13) [usb] # android hooking search classes MainActivity |
methods
根据字符串搜索方法。
因为搜索的东西很多,因此很容易让进程崩溃,不建议使用。
set⭐
暂时只有return_value
。能够修改一个返回值为布尔值的方法的值。
1 | android hooking set return_value "<fully qualified class method>" "<optional overload>" (eg: "com.example.test.doLogin") <true/false> |
watch 监视类或方法
用于监视类或者方法的活动。
class⭐
监视一个class内的一切活动。
1 | android hooking watch class <class> (eg: com.example.test) |
比如:
1 | com.example.hookinunidbg on (google: 13) [usb] # android hooking watch class com.example.hookinunidbg.MainActivity --dump-args |
支持的额外参数:
--dump-args
--dump-backtrace
--dump-return
class_method⭐
具体监视一个类方法。
1 | android hooking watch class_method com.example.hookinunidbg.MainActivity.call |
比如:
1 | com.example.hookinunidbg on (google: 13) [usb] # android hooking watch class_method com.example.hookinunidbg.MainActivity.call |
intent⭐
用于启动指定的Activity或者Service。比如:
1 | android intent launch_activity com.example.hookinunidbg.MainActivity |
这样就可以模拟打开一个新的Activity。
keystore
Android KeyStore。不知道干啥的。
1 | android keystore list |
proxy
用于为APP设置proxy的。
1 | android proxy set <ip address> <port> |
ui
截图:
1 | android ui screenshot D://img.png |
有的恶俗APP会有意设置FLAG_SECURE
为true
,禁止用户截图。这里提供了一个修改的功能:
1 | android ui FLAG_SECURE false |
shell_exec
执行shell指令。感觉没啥用处。
sslpinning
Android SSL pinning。可以关闭SSL校验。
1 | android sslpinning disable |
file(不知道干啥的)
1 | file download <remote path> [<local path>] |
import 导入frida脚本
1 | import <local path frida-script> |
jobs 检查现有任务⭐
刚刚的Hook以及监视都会被认为是一个任务,因此会在这里列举出来。
1 | //查看任务列表 |
比如:
1 | com.example.hookinunidbg on (google: 13) [usb] # jobs list |
frida(报错,已修复)
打印frida等环境信息。(Script Filename
那个没信息,不知道为什么)
1 | asvid.github.io.fridaapp on (google: 13) [usb] # frida |
报错指令
1 | android hooking list receivers |
修复
frida指令报错
编辑:
1 | C:\Python310\lib\site-packages\objection\commands\frida_commands.py |
38行:
1 | frida_env = state_connection.get_api().env_frida() |
把这种直接取字典的恶俗行为,改成.get
方法。
修改后:
1 | frida_env = state_connection.get_api().env_frida() |
参考
sensepost/objection: 📱 objection - runtime mobile exploration (github.com)
Objection的安装和简单使用 - 走看看 (zoukankan.com)
ill-intentions - hktk1643 - 博客园 (cnblogs.com)
Objection Tutorial - HackTricks
- 本文作者: Taardis
- 本文链接: https://taardisaa.github.io/2023/09/05/Android逆向-Objection/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!