Radare2 - physics-sec/pwnable GitHub Wiki
Abrir el binario
r2 <binario> - abrir le binario con radare2
aaaa --------- analizar al mismo
s sym.main --- ir a main
VV ----------- entrar en modo gráfico
Información del binario (i?)
iI -- info sobre el binario, arquitectura, stripped, nx etc
ir -- funciones que se cargan en runtime
is -- símbolos del binario (debugeando)
iz -- strings en la sección data
izz - strings en todo el binario
il -- librerías cargadas dinamicamente
Información sobre referencias (a?)
axt @@ str.* ------- referencia a los strings
axt @@c:iz --------- idem anterior
axt [addr] --------- encontrar referencias a esta dirección (de datos o código)
axt sym.imp.printf - muestra las llamadas a printf
afi ---------------- info sobre la función actual
Moverse en el binario (s?)
afl ------------- listar las funciones
s <dirección> --- ir a dirección
sr <registro> --- ir a dirección en el registro
s sym.<función> - ir a función
Modo visual
V ----------- pasar a modo visual
pp ---------- pasar distintos formatos
j ----------- abajo
k ----------- arriba
[enter] ----- seguir jump o el call
: ----------- entrar un comando
Modo gráfico
VV --------- pasar a modo gráfico
pp --------- pasar distintos formatos
h ---------- izquierda
l ---------- derecha
j ---------- abajo
k ---------- arriba
g[a,b,c..] - seguir el jump o el call
Modo paneles
V!
Comentarios
c -------- seleccionar una linea
; coment - agregar un comentario
;- ------- quitar un comentario
Flags
c --------------- seleccionar una linea
f flag_name ----- agregar una flag
f-flag_name ----- quitar una flag
fs -------------- listar tipos de flags
fs flag-type; f - listar flags del tipo flag-type
Agregar o quitar instrucciones (r?)
r-num - quitar num bytes
r+num - agregar num bytes
Renombrar
afvn <old> <new> (variables)
afn <new> (funciones)
Leer memoria (p?)
px <len> @ <registro | addr> - Print heXadecimal
ps <len> @ <direccion> ------- muestra string
Escribir memoria (w?)
w <string> [@addr] -- escribe un string en addr o en posición actual
wz <string> [@addr] - escribe un string agregando un null-byte al final
wa <assembler> ------ separar instucciones con ';' y usar '"' alrededor del comando
w0 <len> [@addr] ---- escribe 'len' null bytes
dr <registro> = <hex>
Parchear binario
oo+ ----------- reabrir binario en modo lectura-escritura
[ir a address]
[usar wx o wa]
oo ------------ reabrir binario en modo lectura
Usar proyectos (P?)
Ps [file] ---- guarda proyecto actual
Pl ----------- lista los proyectos
Po <proyect> - abre proyecto
Macros
(nombre, accion1, accion2,..) - crear una macro
(-nombre) --------------------- borrar macro
.(nombre) --------------------- ejecutar una macro
(* ---------------------------- listar macros
"(foo x y,pd $0; s +$1)" ------ crear una macro con parámetros (los '"' son por el ';')
.(foo 5 6) -------------------- ejecutar una macro con parámetros
Pasar valor a distintas bases y formatos
? 0x88
? 123
Ejecutar comando
! <comando>
Abrir radare2 en modo debug
r2 -d <bin> arg1 arg2 - debugear bin con params
r2 -d <pid> ----------- debug proceso existente
aaaa ------------------ analizar
dcu main -------------- avanzar hasta main
Variables de configuración
e??dbg ------------------ listar las configuraciones existentes
e dbg.<conf> ------------ ver valor asignado a la configuración
e dbg.<conf>=true|false - asignar el valor de true o false
Software break points
db ------------- listar break points
db <addr> (F2) - agregar break point
db - <addr> ---- quitar break point
s (F7) -------- single-step
S (F8) -------- step-over
dc (F9) -------- continuar
dcu <fun|addr> - continuar hasta <fun|addr>
Hardware break points (no modifican el código)
drx? --------------------------- Hardware breakpoints commands
drx ---------------------------- listar debugging registers
drx <num> <addr> <len> <r|w|x> - break point al leer|escribir|ejecutar entre addr y addr+len
dc (F9) ------------------------ continuar
Información de debug
dbt - mostrar backtrace
dm -- mostrar mapeo de memoria
dr -- muestra los registros
drr - muestra los registros con más info
Modificar registros
dr rip = 0x123
r2 -d ./binary -e dbg.profile=foo.rr2
Donde foo.rr2 es del estilo:
#!/usr/bin/rarun2
program=./bin
arg1=algo
arg2=algo2
stdin=./somefile1.txt
stdout=./somefile2.txt
preload=libc.so
listen=<port> -> socat TCP-LISTEN:<port>,reuseaddr,fork EXEC:"./bin"
Comandos útiles:
f foo = 1024 - le pones un alias
s rsp -------- te vas al stack
ds ----------- step
dso ---------- step over
dm ----------- memory maps
dd ----------- file descriptors
sr rip ------- actualiza la current address de radare
pd n --------- imprime el dessamsemble the n instrucciones
dr zf=1 ------ hace que el flag zero sea 1
Informacion sobre el binario
rabin2 -<char> <binario>
I: info gnral
i: funciones de librerias externas
l: librerias linkeadas
S: secciones
qz: strings
Ensamblar
rasm2 -L -> muestra las arquitecturas soportadas
rasm2 -a x86 -b 32 'assembler' -> arquitectura de ejemplo
rasm2 'assembler'
Desensamblar
rasm2 -d <opcodes>
-z: string terminados en null byte
rafind2 [-zZXnrhv] [-b size] [-f from] [-t to] [-[m|s|e] str] [-x hex] file
Buscar un string
rafind2 -s <string> file
Buscar una exprecion regular
rafind2 -e <regex> file
Buscar hexadecimal
rafind2 -x <hex> file
De hexa a decimal
rax2 <0x...>
De decimal a hexa
rax2 <decimal>
De binario a caracter
rax2 -b <binario>
De binario a hexa
rax2 ...b
Bytes de un string
rax2 -S <string>
Obtener string
ragg2 -P <num> -r > pattern.txt
Crear profile.rr2
#!/usr/bin/rarun2
stdin=./pattern.txt
Ejecutar binario
r2 -R profile.rr2 -d <binario>
dc
wopO rip
Gathering information
$ rabin2 -I ./program - Binary info (same as i from radare2 shell)
ii [q] ---------------- Imports
?v sym.imp.func_name -- Get address of func_name@PLT
?v reloc.func_name ---- Get address of func_name@GOT
ie [q] ---------------- Get address of Entrypoint
iS -------------------- Show sections with permissions (r/x/w)
i~canary -------------- Check canaries
i~pic ----------------- Check if Position Independent Code
i~nx ------------------ Check if compiled with NX
Memory
dm --------------------------- Show memory maps
dmm -------------------------- List modules (libraries, binaries loaded in memory)
dmi [addr|libname] [symname] - List symbols of target lib
Searching (e search.in=??)
e search.* - Edit searching configuration
/? --------- List search subcommands
/ string --- Search string in memory/binary
/x hex ----- Search hex pairs in memory/binary
/R [?] ----- Search for ROP gadgets
/R/ -------- Search for ROP gadgets with a regular expressions
Debugging
dc --------- Continue execution
dcu addr --- Continue execution until address
dcr -------- Continue until ret (uses step over)
dbt [?] ---- Display backtrace based on dbg.btdepth and dbg.btalgo
doo [args] - Reopen in debugger mode with args
ds --------- Step one instruction
dso -------- Step over
Visual Modes
pdf @ addr - Print the assembly of a function in the given offset
V ---------- Visual mode, use p/P to toggle between different modes
VV --------- Visual Graph mode, navigating through ASCII graphs
V! --------- Visual panels mode. Very useful for exploitation