r2frida

star 26

Dynamic instrumentation bridge — radare2 static analysis meets Frida runtime hooking via r2frida:// URI

plurigrid By plurigrid schedule Updated 6/10/2026

name: r2frida description: Dynamic instrumentation bridge — radare2 static analysis meets Frida runtime hooking via r2frida:// URI version: 1.0.0 trit: 0 color: "#E50DA1" seed: 4431712562122273656 invocation: 7

r2frida

Static-to-dynamic bridge: use radare2 commands to drive Frida instrumentation on live processes.

Installation

# r2frida IO plugin (requires radare2 6.0.x)
r2pm -ci r2frida

# Verify
r2 -L | grep frida
# io  frida  Frida io [r2frida://action/link/device/target]

# Companion packages
r2pm -ci r2frida-codeshare   # Frida codeshare browser
r2pm -ci r2frida-objection   # Objection integration
r2pm -ci r2flutch            # iOS app decryption

URI Format

r2 frida://[action]/[link]/[device]/[target]
Component Options
action attach, spawn, launch, list, apps
link local, usb, remote host:port
device device-id (optional)
target PID, process name, or bundle ID

Examples

# Attach to local process
r2 frida://attach/local//1234
r2 frida://attach/local//Safari

# Spawn on USB-connected iOS device
r2 frida://spawn/usb//com.example.app

# List apps on USB device
r2 frida://apps/usb//

# Remote frida-server
r2 frida://attach/remote/192.168.1.10:27042/target

Core Commands (: prefix)

Information & Enumeration

Command Description
:? r2frida help
:i Target info
:il List loaded libraries
:ii List imports
:iE List exports
:is <lib> Symbols of a library
:ic List classes (ObjC/Java)
:ic <class> List methods of class
:ip List protocols (ObjC)

Memory

Command Description
:dm List memory regions
:dm. Current region info
:dmm List modules with base addresses
:/v <value> Search memory for value
:/w <string> Search wide string
:/x <hex> Search hex pattern

Tracing

Command Description
:dt <addr|sym> Trace function
:dt-* Remove all traces
:dtf <addr> <fmt> Trace with format string
:dtSf <addr|sym> Stalker deep trace (follows subcalls)
:dtm Monitor library loads
:dtt Monitor thread lifecycle
:e stalker.in=app Restrict stalking to app code

Format specifiers for :dtf:

  • ^ onEnter (default onExit)
  • + backtrace
  • x hex arg, i int arg
  • z string pointer
  • O ObjC object pointer

Hooking & Interception

Command Description
:di0 <addr> Intercept, return 0 (skip original)
:di1 <addr> Intercept, return 1 (skip original)
:di-1 <addr> Intercept, return -1 (skip original)
:dif0 <addr> Call original, then return 0
:dif1 <addr> Call original, then return 1
:db <addr> Set breakpoint
:db- <addr> Remove breakpoint
:dc Continue execution

Function Calls

Command Description
:dx <addr> [args] Call function
:dxc <addr> [args] Call C function
:dxo <class> <method> [args] Call ObjC method
:dxs <num> [args] Invoke syscall

Process Control

Command Description
:dp PID
:dpt List threads with entrypoints
:dl <path> Load library into target
:env Show environment variables
:fd List file descriptors

JavaScript Evaluation

Command Description
:. <file.js> Load and run Frida script
:eval <js> Evaluate inline JavaScript
r2frida-compile <ts> Compile TypeScript to agent

Workflows

Static-to-Dynamic: Identify Then Hook

# 1. Static analysis — find interesting functions
r2 /path/to/binary
> aaa
> afl~decrypt           # find decrypt functions
> pdf @ sym.decrypt_msg # read disassembly
> q

# 2. Dynamic — hook what we found
r2 frida://attach/local//target_process
> :dt sym.decrypt_msg   # trace it
> :dtf sym.decrypt_msg zx^  # trace with string arg + hex arg + backtrace
> :dc                   # resume
# ... trigger the function, see live args

SSL Pinning Bypass (iOS)

r2 frida://spawn/usb//com.example.app
> :di0 sym.SSLSetSessionOption  # return 0 = success
> :di0 sym.SSLCreateContext
> :dc

ObjC Method Tracing

r2 frida://attach/local//Safari
> :ic NSURLSession              # enumerate methods
> :dt "-[NSURLSession dataTaskWithRequest:completionHandler:]"
> :dc

Memory Forensics

r2 frida://attach/local//target
> :dm                          # list memory regions
> :/w password                 # search for "password" (wide)
> :dmm                         # list modules
> s <addr>; px 256             # seek and hexdump

Android/Dalvik

r2 frida://spawn/usb//com.example.android
> :ic com.example.android.CryptoHelper
> :dt "com.example.android.CryptoHelper.encrypt"
> :dc

MCP Integration Architecture

┌─────────────────────────────────────────────────────────┐
│  Claude / AI Agent                                      │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  radare2 MCP (static)          frida MCP (dynamic)     │
│  ┌─────────────────┐          ┌─────────────────┐      │
│  │ open_file        │          │ spawn            │      │
│  │ analyze          │          │ attach           │      │
│  │ decompile        │◄────────►│ eval_js          │      │
│  │ list_functions   │ r2frida  │ list_apps        │      │
│  │ list_strings     │ bridge   │ get_frontmost    │      │
│  │ xrefs_to         │          │                  │      │
│  │ run_command      │          │                  │      │
│  └─────────────────┘          └─────────────────┘      │
│          │                            │                 │
│          └────────┬───────────────────┘                 │
│                   │                                     │
│          ┌────────▼────────┐                           │
│          │   r2frida://     │                           │
│          │   IO plugin      │                           │
│          │                  │                           │
│          │  : commands      │                           │
│          │  Stalker tracing │                           │
│          │  Interceptor     │                           │
│          └────────┬────────┘                           │
│                   │                                     │
│          ┌────────▼────────┐                           │
│          │  Target Process  │                           │
│          │  (local/usb/tcp) │                           │
│          └─────────────────┘                           │
└─────────────────────────────────────────────────────────┘

Via radare2 MCP run_command

Since run_command passes raw r2 commands, r2frida commands work directly when the session is opened with a frida:// URI:

open_file("frida://attach/local//Safari")
run_command(":il")          # list loaded libraries
run_command(":dt malloc")   # trace malloc
run_command(":dc")          # continue

GF(3) RE Skill Ecosystem

MINUS (-1)                    ERGODIC (0)               PLUS (+1)
─────────────────────────────────────────────────────────────────
radare2-hatchery              r2frida                   blackhat-go
  static analysis               bridge                    offensive
  decompilation                 : commands                techniques
  trit: -1                      trit: 0                   trit: +1

dwarf-expert                                            cantordust-viz
  debug formats                                           binary viz
  trit: -1                                                trit: +1

narya-proofs
  formal verify
  trit: -1

Triads

radare2-hatchery (-1) + r2frida (0) + blackhat-go (+1) = 0 ✓
dwarf-expert (-1)     + r2frida (0) + cantordust-viz (+1) = 0 ✓
narya-proofs (-1)     + r2frida (0) + blackhat-go (+1) = 0 ✓

r2con Speaker Network

Speaker Handle Specialty Trit
pancake @trufae r2 creator, r2frida 0
oleavr @oleavr Frida creator +1
iGio90 @AAndresG90 Dwarf debugger (r2frida GUI) 0
enovella @enovella r2frida wiki, mobile RE 0
hexploitable @hexploitable iOS r2frida -1
cryptax @cryptax Android droidlysis -1
bmorphism @bmorphism r2 Zignatures (2020) 0
as0ler @asoler iOS instrumentation +1

Related Skills

  • radare2-hatchery — Static analysis MCP server
  • reverse-engineering — Multi-tool RE (Ghidra, IDA, r2)
  • dwarf-expert — DWARF debug format analysis
  • cantordust-viz — Binary visualization
  • blackhat-go — Offensive security techniques
  • aflpp — AFL++ fuzzing
  • entry-point-analyzer — Binary entry point analysis
  • harness-writing — Fuzzing harness creation

References

SDF Interleaving

Primary Chapter: 7. Propagators

r2frida propagates constraints bidirectionally between static knowledge (what the binary is) and dynamic observation (what the process does). The : command interface is a propagator network where each trace/hook/intercept is a cell that merges information from both directions.

GF(3) Balanced Triad

r2frida (0) + SDF.Ch7 (0) + [balancer] (0) = 0

Skill Trit: 0 (ERGODIC - the bridge that makes static and dynamic cohere)

Install via CLI
npx skills add https://github.com/plurigrid/asi --skill r2frida
Repository Details
star Stars 26
call_split Forks 8
navigation Branch main
article Path SKILL.md
More from Creator