04 objection和Frida边缘化操作

1,916 阅读6分钟

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. 掌握好最基本的逆向手段,还是很重要的

note.youdao.com/s/DqNfNoKw