姿势源自肉丝

如果没有基础,请看前传

连接免 Root 设备

关于免Root使用Frida,业内也有一些方案,大致有以下几种:

  1. 使用 Apktool 反编译 Apk,修改 smali 文件和 manifest 文件,实现Firda的加载。本质就是将 frida-gadget.so 放到反编译后的 apk so 目录下,并修改反编译后的 smali 文件,插入 System.loadLibrary("frida-gadget") 对应的 smali 代码,从而实现frida 的加载。
  2. 使用开源工具Objection
    源码地址其原理跟方法1类似,也是使用 Apktool 反编译 apk 然后植入代码,只是它将这个流程封装成一个工具,使用起来更方便。
  3. 使用LIEF工具修改原 so 文件,实现对 frida-gadget.so 的加载。LIEF 工具的官方文档对此有详细的介绍:源码地址
    也可参考本文对应的中文翻译文档这种方法的基本原理是,利用LIEF工具将frida-gadget.so 与原 Apk 中的某个 so 文件链接起来,使得加载原 so 时,同时也加载了 frida-gadget.so 文件,从而实现 Frida 工具。这种方法有以下几个缺点:

    • 需要向 APK 里添加文件
    • 需要程序有至少一个 native 库
    • 注入进去的库的加载顺序不能控制

半手动注入

objection 的 patchapk 需要:

  • aapt(android-studio中)
  • adb(android-studio中)
  • jarsigner(android-studio中)
  • apktool (官网下载)

挂载软连接(具体路径根据自己情况来):

ln -s /root/Desktop/android-studio/jre/bin/jarsigner /usr/bin
ln -s /root/Android/Sdk/build-tools/30.0.1/aapt /usr/bin
ln -s /root/Android/Sdk/build-tools/30.0.1/aapt2 /usr/bin
ln -s /root/Android/Sdk/platform-tools/adb /usr/bin

然后就是解压apk看下它里面的lib是哪个架构的,按架构来运行:

objection  patchapk  --architecture armeabi-v7a --use-aapt2  --source yourAPK.apk

app启动后用objection/frida直接连上即可。

全自动注入

objtction 的官方示例代码

API 介绍

root

//尝试关闭app的root检测
android root disable

//尝试模拟root环境
android root simulate

ui

//截图
android ui screenshot [image.png]

//设置FLAG_SECURE权限
android ui FLAG_SECURE false

Memory 指令

memory list modules //枚举当前进程模块
memory list exports [lib_name] //查看指定模块的导出函数
memory list exports libart.so --json /root/libart.json //将结果保存到json文件中
memory search --string --offsets-only //搜索内存

android heap

//堆内存中搜索指定类的实例, 可以获取该类的实例id
search instances search instances com.xx.xx.class

//直接调用指定实例下的方法
android heap execute [ins_id] [func_name]

//自定义frida脚本, 执行实例的方法
android heap execute [ins_id]

内存漫游

//列出内存中所有的类
android hooking list classes

//在内存中所有已加载的类中搜索包含特定关键词的类
android hooking search classes [search_name] 

//在内存中所有已加载的方法中搜索包含特定关键词的方法
android hooking search methods [search_name] 

//直接生成hook代码
android hooking generate simple [class_name]

hook 方式

/*
hook指定方法, 如果有重载会hook所有重载,如果有疑问可以看
--dump-args : 打印参数
--dump-backtrace : 打印调用栈
--dump-return : 打印返回值
*/
android hooking watch class_method com.xxx.xxx.methodName --dump-args --dump-backtrace --dump-return

//hook指定类, 会打印该类下的所以调用
android hooking watch class com.xxx.xxx

//设置返回值(只支持bool类型)
android hooking set return_value com.xxx.xxx.methodName false

spawn 方式 hook

objection -g packageName explore --startup-command '[obejection_command]'

activity 和 service

//枚举activity
android hooking list activities

//启动activity
android intent launch_activity [activity_class]

//枚举services
android hooking list services

//启动services
android intent launch_service [services_class]

任务管理

//查看任务列表
jobs list

//关闭任务
jobs kill [task_id]

关闭app的ssl校验

android sslpinning disable

安装插件

使用插件:

  1. 开启 frida-server
  2. 使用 -P 参数带着插件启动 objection
objection -g com.xx.xx explore -P ~/Documents/android/objection/plugins

(路径得填你自己的下载插件目录)

Last modification:September 29th, 2020 at 04:58 pm
如果觉得我的文章对你有用,请随意赞赏