Buenas a todos y Feliz navidad lo primero.
Entre mantecado y mantecado, y motivado por el curso de Ricardo Narvaja (CrackLatinos), me he decidido a publicar una entrada que es mas para mí que para el resto. Pero supongo que puede ser útil para otras personas, de ahí que lo ponga lo mas bonito posible en la web.
Vamos a ver un "cheatsheet" con comandos útiles de Radare2 y su funcionalidad, todo esto puede extraerse del --help de las herramientas, pero para los que como yo le gusta ir al grano y ahorrar el mayor tiempo posible, tienen esta entrada.
RABIN2:
- rabin2 -I file_.exe --> Nos proporciona información básica del binario, como arquitectura, y las protecciones del binario como (nx,dep,aslr...)
- rabin2 -i file_.exe --> Nos muestra los imports del binario.
- rabin2 -e file_.exe --> Dirección del Entry point. (Dirección virtual y raw offset en el executable)
- rabin2 -zz file_.exe --> Muestra las strings
- rabin2 -g file_.exe --> Este comando nos muestra una gran cantidad de información como secciones,segmentos,entrypoint,constructores, main, import,simbolos, strings, estructura del header, Realocaciones, etc
- rabin2 -S file_.exe --> Muestra las secciones del ejecutable, incluidos los permisos que tiene.
- rahash2 -a all file_.exe --> Muestra la función resumen con todos los algoritmos disponibles en la herramienta
- rahash2 -B -b 512 -a md5 file_.exe --> Por cada bloque de 512 bytes del ejecutable nos saca el md5.
- rahash2 -B -b 512 -a entropy file_.exe --> calcula la entropía para cada bloque de 512 bytes.
- rahash2 -a md5 -s string --> saca el md5 de una cadena
- rax2 10 ó rax2 0xa --> Convertir de decimal a hexadecimal y viceversa
- rax2 -s 41424344 --> Pasa de hexadecimal a ASCII
- rax2 -S ADB --> pasamos de carácter ASCII a hexadecimal.
- rax2 4+8 --> Permite el uso de operaciones aritméticas siempre que no haya espacios entre ellas.
- rax2 -k 0x3+0x2 --> Hace la operacion aritmética y mantiene la misma base(hexadecimal).
- rasm2 -d 4141 --> Desensambla en 32 bit dando lugar a inc ecx
inc ecx - rasm2 -a x86 -b 32 "mov eax, 33" -> Ensambla en 32 bits la instrucción "mov eax,33"
- rasm2 -a x86 -b 64 "mov rax,33" --> Ensambla en 64 bits la isntruccion "mov rax,33"
- rasm2 -L --> Listado de plugin disponibles para el ensamblado/desensamblado.
RADIFF2: Herramienta para hacer "diffing" entre binarios, y encontrar las modificaciones hechas entre versiones.
- radiff2 exe_.exe exe_modified.exe ---> Nos da en la dirección física (raw offset del fichero) donde esta la diferencia entre ambos binarios.
Localización en la memoria virtual de un valor en el fichero ejecutable, para ello podemos aplicar la siguiente fórmula:
(target virtual address) = (target raw offset) - (raw offset of section) + (virtual address of section) + (image base)
Target virtual address--> Dirección virtual que queremos conocer.
Target raw offset --> Direccion en nuestro fichero ejecutable.
raw offset of section --> Inicio de la seccion donde esta el dato modificado que queremos mirar.
virtual addres of section + imagen base --> En este caso es sacar el valor de la imagen Base y la imagen virtual de la seccion.
Para hacer esto con radare2 debemos de ejecutar los siguientes comandos:
- r2 exe_.exe --> Abrimos el binario.
- idp file_exe.pdb --> Cargamos los símbolos del binario si los tenemos.
- aaa --> analizamos el programa
- afl --> listamos las funciones del binario, donde la información que nos muestra está organizada de la siguiente manera:
- 1ra columna : dirección virtual
- 2da columna: Numero de basic blocks (bloques) en la función
- 3ra columna: tamaño de la función (en bytes)
- 4ta columna: Nombre de la función.
- /x ffd0 --> Buscamos esa cadena de bytes en el binario y nos indica la posicion donde tenemos esa sequencia de bytes, usado con rasm2 podemos buscar instrucciones dentro del binario.
- s 0x401342 --> nos vamos a la dirección de la memoria virtual que estamos indicando (0x401342 )
- pdf--> desensamblamos esa función completa y podemos ver si el valor de la dirección virtual y que instrucción en ensamblador representa.
- Ps nombre_proyecto --> creamos un proyecto para no perder el avance de lo que vamos haciendo. Podemos guardar con distinto nombre, para así poder volver a distintos puntos del programa.
- Po nombre_proyecto --> Para cargar un proyecto guardado de un binario que estamos analizando, es necesario, abrir el binario en otra terminal (r2 exe_.exe) y posteriormente cargar la sesión con el comando Po + el nombre del proyecto.
- V!--> Accedemos al Modo PANELS:
- Apretamos la letra "m" --> Nos vamos al menú y con las flechas/Enter nos podemos desplazar por el mismo hasta seleccionar la opción que queramos.
- En View/Hexdump--> Para ver en hexadecimal esa parte del código ensamblador que estamos viendo. (Con TAB nos podemos ir desplazando para ir poniendo el foco en la ventana que queramos, si pulsamos ENTER entramos en modo ZOOM y con Q volvemos otra vez al modo PANELS).
- V--> Accedemos al modo visual y con p vamos cambiando la vista seleccionada, llegando por ejemplo al Hex-view.
- Barra espaciadora-->Vemos en el modo árbol las funciones de nuestro programa. Dentro de esta vista si volvemos a pulsar la barra espaciadora salimos de la misma.
- : --> Su queremos ejecutar algún comando nos aparece abajo una especie de shell para introducir el comando, q para quitarla.
- afn nombre_nuevo nombre_antiguo --> Lo usamos para renombrar las funciones de nuestro binario
- afvn nombre_nuevo nombre_antiguo --> Lo usamos para renombrar variables de la función que estamos analizando
- afvf --> Mapa estático del stack nos muestra la siguiente información de cada variable
- 1ra columna : Distancia respecto al horizonte en la función (EBP guardado)
- 2da columna: Nombre de la variable
- 3ra columna: Tipo de la variable
- afvt nombre_variable nuevo_tipo_variable --> Nos permite cambiar el tipo de la variable, para ello debemos indicarle el nombre de la variable a cambiar y el tipo que queremos asignarle.
Comentarios
Publicar un comentario