1. objection的安装
- objection对frida做了进一步的封装,通过输入一系列的命令即可完成hook。忘记命令时还可以按空格弹出对应提示信息,大大降低了hook框架的使用门槛
- 安装objection之前,先安装frida和frida-tools
- 为了有更好的兼容性,objection的版本,最好选择当前frida版本之后更新 objection更新时间查看地址 pypi.org/project/obj… frida更新时间查看地址
- 教程使用的各版本号
pip install frida==14.2.18
pip install frida-tools==9.2.5
pip install objection==1.11.0
常见报错:
pkg_resources.ContextualVersionConflict: (Pygments 2.11.2 (d:\soft\python386\lib\site-packages), Requirement.parse('Pygments<=2.11.1,>=1.6'), {'litecli'}) 降级Pygments库到2.11.1即可
2. objection的使用
注入进程,如果objection没有找到进程,会以spwan方式启动进程
objection --help
objection -g <进程名> explore
objetion log 文件位置 C:\Users\Administrator\.objection
3 objection hook
启动objection
objection -g "com.ss.android.ugc.aweme" explore
列出所有已加载的类
android hooking list classes
在所有已加载的类中搜索包含特定关键字的类
android hooking search classes <pattern>
列出类的所有方法
android hooking list class_methods <路径.类名>
hook类的所有方法(不包括构造方法)
android hooking watch class <路径.类名>
hook类的构造方法
android hooking watch class_method <路径.类名.$init>
默认是hook方法的所有重载
android hooking watch class_method <路径.类名.方法名>
hook方法的参数、返回值和调用栈
android hooking watch class_method <路径.类名.方法名> --dump-args --dump-return --dump-backtrace
hook单个重载函数,需要指定参数类型,多个参数用逗号分隔
android hooking watch class_method <路径.类名.方法名> "<参数类型>"
查看与取消hook
jobs list
jobs kill <jobId>
指定ip和端口连接
objection -N -h <ip> -p <port> -g <进程名> explore
启动前就hook
objection -N -h <ip> -p <port> -g <进程名> explore --startup-command "android hooking watch class <路径.类名>"
启动前就hook打印参数、返回值、函数调用栈
objection -N -h <ip> -p <port> -g <进程名> explore -s "android hooking watch class_method <路径.类名.方法名> --dump-args --dump-return --dump-backtrace"
如果启动前需要运行多条命令,可以写到一个文件中,使用-c选项
objection -g <进程名> explore -c "路径"
关闭ssl校验 android sslpinning disable
关闭root检测 android root disable
搜索堆中的实例
android heap search instances <类名>
通过实例调用静态和实例方法
调用 android heap execute <handle> <方法名>
调用打印返回值 android heap execute <handle> <方法名> --return-string
调用带参数方法,进入编辑器环境
android heap evaluate <handle>
console.log(clazz.getCalc(100, 200));
查看当前app的activity
android hooking list activities
尝试跳转到对应activiy
android intent launch_activity <activiyName>
枚举内存中所有模块
memory list modules
枚举模块中所有导出函数
memory list exports <so库名>
当结果太多,可以将结果导出到本地文件中
memory list exports <so库名> --json <路径.文件名>
4 Wallbreaker
git地址 github.com/hluwa/Wallb…
如何使用
objection
安装 objection: pip3 install objection
下载 wallbreaker 到自己的插件目录: git clone https://github.com/hluwa/Wallbreaker ~/.objection/plugins/Wallbreaker
启动frida-server,使用 -P 参数带着插件启动 objection: objection -g com.app.name explore -P ~/.objection/plugins
然后就可以愉快的使用 wallbreaker 的几个命令了:
搜索类
plugin wallbreaker classsearch <pattern>
根据给的 pattern 对所有类名进行匹配,列出匹配到的所有类名。
搜索对象
plugin wallbreaker objectsearch <classname>
根据类名搜索内存中已经被创建的实例,列出 handle 和 toString() 的结果。
ClassDump
plugin wallbreaker classdump <classname> [--fullname]
输出类的结构, 若加了 --fullname 参数,打印的数据中类名会带着完整的包名。
ObjectDump
plugin wallbreaker objectdump <handle> [--fullname]
在 ClassDump 的基础上,输出指定对象中的每个字段的数据。
在kali下的demo
objection -g com.android.phone explore -P ~/objection/plugins
image.png
plugin wallbreaker classsearch com.android.phone.Caller
plugin wallbreaker classdump com.android.phone. CallerInfoCache
plugin wallbreaker objectsearch com.android.pho ne.CallerInfoCache
plugin wallbreaker objectdump 0x29f2
5 frida.exe的使用
1. frida.exe的选项介绍
frida attach
包名、pid、前端进程注入
frida spawn
frida.exe的的选项介绍
-U 连接远程USB设备(-U和-H只能选一个)
-H 通过ip和端口连接,可以连接多台设备(netstat -nltp查看端口)
-F 附加到最前的这个app
-l 后面指明需要加载的JS脚本
-o 把信息输出到指定文件中
2. frida-server的选项介绍
-l 可以修改监听的地址端口,与frida.exe的-H选项配合使用
电脑和手机的ip需要互通
6 脱离pc使用Frida
1. 脱离PC使用Frida的几种方式
a) 在手机上使用Termux终端
b) frida-inject
c) frida-gadget.so
优点:可以免root使用frida、frida-gadget比较稳定
缺点:需要重打包app,局限性较大。但是我们可以通过魔改系统,让系统帮我们注入so,免去重打包的繁琐
2. frida-inject的配置、选项和使用
-f、-p、-n、-s、-e
3. 脱离pc后,如何判断hook是否生效
a) 写文件,然后查看文件内容
b) 主动调用Log的方法输出信息,然后使用logcat查看
c) 修改某些方法逻辑
7 免root使用Frida
1. objection的选项:-N、-h、-p、-g
2. objection explore的选项:-s、-c
3. objection patchapk的介绍
a) https://github.com/sensepost/objection/wiki
b) 环境的准备
aapt、jarsigner、apktool、adb
c) objection patchapk的选项介绍
-s:指明目标文件
-a:指明so平台
-V:指明gadget.so的版本
-D:反编译是跳过资源
-c:指定gadget的config文件路径
4. Android系统对应so平台的选择
Android系统是32位,那么app的so都走32位的
Android系统是64位,那么app里面如果有64位的so,就只走64位的so
Android系统是64位,那么app里面如果只有32位的so,就走32位的so
5. objection patchapk的gadget默认存放路径
C:\Users\Administrator\.objection\android\arm64-v8a\libfrida-gadget.so
6. 重打包后的app,安装运行,会在启动界面等待frida连接,之后的与frida-server一致
frida -U <packageName> -l <scriptFileName>
7. 重打包存在的缺陷
有些app反编译和回编译可能会出错
有些app存在签名校验、文件校验
8. 免root使用frida的改进方法
魔改系统,启动app时,自动加载gadget.so
8 Frida自吐算法演示
1. Frida自吐算法演示
HookDemo、dodonew
vsf2f、m1905: 加固的app
z酷:标准算法加密后的数据,又进行了别的处理
0715quan:登录不一定一条数据包完成,注意登录之前的数据包
指宝玩:提交数据乱码、非标准算法
2. Frida自吐算法的应用场景
加密在Java层,并且调用了标准加密库的
加密在Java层,但是使用反射调用标准加密库的
加密在so层,但是用jni调用了Java标准加密库的
app被加固,但是调用了标准加密库的
通过打印函数栈辅助定位加密代码所在类
3. Frida自吐算法的局限性
加密在Java层,自写的标准算法或非标准算法
加密在so层,C/C++写的算法
加密在Java层,并且调用了标准加密库,但是加密前和加密后的数据都做了其他处理
4. 掌握好最基本的逆向手段,还是很重要的