frida介绍

GitHub: https://github.com/frida/frida

官方文档:https://frida.re/docs/home/

Frida是一款基于PythonJavaScriptHook与调试框架,Java 层到 Native 层的 Hook 无所不能,主要使用动态二进制插桩技术,可以插入代码到原生App的内存空间中,动态地去监视和修改行为,可以运行在Android、iOS、Linux、Windows、OSX等各个平台上。

  • 静态二进制插桩(Static Binary Instrumentation):在程序执行前插入额外的代码和数据,生成一个永久改变的可执行文件。
  • 动态二进制插桩(Dynamic Binary Instrumentation):在程序运行时实时地插入额外代码和数据,对可执行文件没有任何永久改变。

优点和特性:

  1. 跨平台:Frida 支持多个操作系统和架构,包括 Windows、macOS、Linux、Android、iOS 和 ARM、x86、x86-64 等。
  2. 易于使用:Frida 的 API 简单易用,开发者可以使用 Python、JavaScript 等脚本语言编写自己的插件或脚本,并快速进行动态分析和修改应用程序。
  3. 动态分析:Frida 可以在应用程序运行时对代码进行动态分析和修改,包括函数调用拦截、参数修改、数据读写等操作。
  4. 内存访问:Frida 可以直接访问应用程序的内存空间,可以读取和修改内存中的数据,可以对加密算法等进行动态修改。
  5. 模块注入:Frida 可以在运行中的应用程序中注入自己的代码,可以对应用程序进行动态修改,例如修改应用程序行为、跳过授权检查等。
  6. 反调试:Frida 可以对应用程序进行反调试,保护应用程序免受调试和分析。

安装PC端(客户控制端)

# 更新证书
sudo /Applications/Python\ 3.7/Install\ Certificates.command
# 安装frida
pip3 install frida
# 安装frida工具包
pip3 install frida-tools

安装服务端(手机设备端)

https://github.com/frida/frida/releases/latest 下载符合架构的版本,可以通过adb shell getprop ro.product.cpu.abi查看系统架构。

我这里网易mumu是x64的(注意:需要下载的是server版本)

# 下载
wget https://github.com/frida/frida/releases/download/16.0.11/frida-server-16.0.11-android-x86_64.xz
# 解压到当前目录
xz -d frida-server-16.0.11-android-x86_64.xz
# 传到设备中
adb push frida-server-16.0.11-android-x86_64 /data/local/tmp/frida-server
# 添加可执行权限并执行
adb shell 'chmod +x /data/local/tmp/frida-server'

启动&&连接

# 转发frida服务端口
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
# 启动frida server 【不能直接 adb shell xxx,不然设备内部会卡】
adb shell
/data/local/tmp/frida-server

验证是否连接成功,可通过如下命令来确认

# 列出设备
   frida-ls-devices
Id             Type    Name                   OS
-------------  ------  ---------------------  --------------
local          local   d4m1tsdeMBP            Mac OS X 10.16
emulator-5554  usb     Android Emulator 5554  Android 6.0.1
socket         remote  Local Socket           Android 6.0.1

# 列出进程
## -U 连接usb设备
frida-ps -U

## -D 通过设备ID连接
frida-ps -D emulator-5554

附录

frida参数说明

usage: frida [options] target

-h, --help 显示帮助信息并退出
-D ID, --device ID 连接到具有给定 ID 的设备
-U, --usb 连接到 USB 设备
-R, --remote 连接到远程 frida-server
-H HOST, --host HOST 连接到 HOST 上的远程 frida-server
--certificate CERTIFICATE 与 HOST 使用 TLS 通信,期望 CERTIFICATE
--origin ORIGIN 连接到设置了“Origin”头的远程服务器
--token TOKEN 使用 TOKEN 对 HOST 进行身份验证
--keepalive-interval INTERVAL 设置保持连接的间隔时间(以秒为单位),或者设置为 0 表示禁用(默认值为 -1,根据传输自动选择)
--p2p 建立与目标的对等连接
--stun-server ADDRESS 设置 STUN 服务器 ADDRESS 以用于 --p2p
--relay address,username,password,turn-{udp,tcp,tls} 添加用于 --p2p 的中继
-f TARGET, --file TARGET 派生FILE
-F, --attach-frontmost 附加到前台应用程序
-n NAME, --attach-name NAME 附加到 NAME
-N IDENTIFIER, --attach-identifier IDENTIFIER 附加到 IDENTIFIER
-p PID, --attach-pid PID 附加到 PID
-W PATTERN, --await PATTERN 等待生成匹配 PATTERN 的进程
--stdio {inherit,pipe} 生成时的 stdio 行为(默认为“inherit”)
--aux option 在生成时设置 aux 选项,例如“uid=(int)42”(支持的类型为:string、bool、int)
--realm {native,emulated} 要附加的领域
--runtime {qjs,v8} 要使用的脚本运行时
--debug 启用与 Node.js 兼容的脚本调试器
--squelch-crash 如果启用,将不会将崩溃报告转储到控制台
-O FILE, --options-file FILE 包含其他命令行选项的文本文件
--version 显示程序的版本号并退出
-l SCRIPT, --load SCRIPT 加载 SCRIPT
-P PARAMETERS_JSON, --parameters PARAMETERS_JSON JSON 格式的参数,与 Gadget 相同
-C USER_CMODULE, --cmodule USER_CMODULE 加载 CMODULE
--toolchain {any,internal,external} 编译源代码时要使用的 CModule 工具链
-c CODESHARE_URI, --codeshare CODESHARE_URI 加载 CODESHARE_URI
-e CODE, --eval CODE 评估 CODE
-q:安静模式(无提示符)并在-l和-e后退出
-t TIMEOUT,--timeout TIMEOUT:在安静模式下等待终止的秒数
--pause:在生成程序后保留主线程暂停
-o LOGFILE,--output LOGFILE:输出到日志文件
--eternalize:退出前使脚本永久存在
--exit-on-error:遇到脚本中任何异常后以代码1退出
--kill-on-exit:当Frida退出时杀死生成的程序
--auto-perform:将输入的代码用Java.perform包装
--auto-reload:启用提供的脚本和C模块的自动重新加载(默认情况下打开,将来可能需要)
--no-auto-reload:禁用提供的脚本和C模块的自动重新加载

frida-tools

frida

加载js脚本
$ frida -U -l dump_dex.js -f <packagename>

启动后,会有一个交互界面,这个交互界面是可以直接编写javascript脚本的,如console.log(1);

输入%会提示一些自带的命令,如resume、help等。

frida-ls-devices

列举出连接的设备列表
$ frida-ls-devices

frida-ps

这是一个用于列出进程的命令行工具,在与远程系统交互时非常有用。

通过USB将Frida连接到iPad并列出正在运行的进程
$ frida-ps -U

列出正在运行的应用程序
$ frida-ps -Ua

列出已安装的应用程序
$ frida-ps -Uai

将Frida连接到特定设备
$ frida-ps -D 0216027d1d6d3a03

frida-trace

frida trace是一种用于动态跟踪函数调用的工具。

$ frida-trace -U  -f <packagename> -i "*decrypt*" --decorate

attach和spawn的区别

spawn 适用于启动新进程并注入Frida代码,而 attach 适用于在已经运行的进程上注入Frida代码。此外,spawn 不需要目标进程的 PID,而 attach 则需要目标进程的 PID。

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2023-03-19 09:09:02

results matching ""

    No results matching ""