Está en la página 1de 62

Herramientas

de pentesting de
software
PID_00277621

Josep Vañó Chic


© FUOC • PID_00277621 Herramientas de pentesting de software

Josep Vañó Chic

La revisión de este recurso de aprendizaje UOC ha sido coordinada


por el profesor: Jordi Serra Ruiz

Primera edición: septiembre 2021


© de esta edición, Fundació Universitat Oberta de Catalunya (FUOC)
Av. Tibidabo, 39-43, 08035 Barcelona
Autoría: Josep Vañó Chic
Producción: FUOC
Todos los derechos reservados

Ninguna parte de esta publicación, incluido el diseño general y la cubierta, puede ser copiada,
reproducida, almacenada o transmitida de ninguna forma, ni por ningún medio, sea este eléctrico,
mecánico, óptico, grabación, fotocopia, o cualquier otro, sin la previa autorización escrita
del titular de los derechos.
© FUOC • PID_00277621 Herramientas de pentesting de software

Índice

Introducción............................................................................................... 5

1. Kali Linux............................................................................................ 7
1.1. Reverse Engineering......................................................................... 7
1.2. Web Application Analysis ........................................................... 8
1.3. Exploitation Tools ....................................................................... 11

2. Decompilers........................................................................................ 13
2.1. Boomerang .................................................................................. 13
2.2. Rec Studio .................................................................................... 15

3. Disassemblers....................................................................................... 17
3.1. GDB ............................................................................................. 17
3.2. Radare .......................................................................................... 19

4. Debuggers............................................................................................. 22
4.1. GDB ............................................................................................. 22
4.2. OllyDbg ....................................................................................... 31
4.3. Immunity Debugger .................................................................... 42
4.4. IDA Pro ........................................................................................ 45
4.5. Ghidra .......................................................................................... 50

5. Radare2 reversing framework....................................................... 55

6. Android Studio................................................................................... 60
© FUOC • PID_00277621 5 Herramientas de pentesting de software

Introducción

Para poder analizar vulnerabilidades o exploits es necesario el uso de herra-


mientas para poder desarrollar la tarea, de forma que se necesitan conocimien-
tos básicos de varias herramientas que nos ayuden a realizar muchas de las
tareas que también podríamos hacer a mano, pero con mucha más dedicación
de tiempo.

Existe un gran número de herramientas en el mercado para todas las platafor-


mas, ya sea para 32 o 64 bits; aunque hay herramientas software que tienen
algunas características en común con otras, casi siempre tienen alguna utili-
dad que las diferencian entre ellas.

Entre las herramientas más habituales existen los debuggers, decompilers, disas-
semblers, framewoks, etc., todos ellos en diversas plataformas; en este módulo
se ha recogido un resumen de algunas de las herramientas existentes, aunque
obviamente en el mercado hay disponibles una amplia diversidad.
© FUOC • PID_00277621 7 Herramientas de pentesting de software

1. Kali Linux

Kali Linux es una distribución de Linux basada en Debian que está totalmente
orientada a la realización de pruebas de penetración (pentesting) y auditorías
de seguridad, informática forense e ingeniería inversa.

Se trata de un conjunto de herramientas para hacer evaluaciones, para tareas


de informática forense y para hacer pruebas de penetración: recopilación de
información, identificación de vulnerabilidades, explotación y escalada de pri-
vilegios, etc.

A continuación, se muestran algunas de las opciones de menú de las utilidades


disponibles en esta herramienta:

1.1. Reverse Engineering

Las herramientas que nos ofrece Kali Linux para Reverse Enginering son Clang,
Clang++, NASM Shell y Radare2.

Clang es un compilador para los lenguajes de programación C, C++, Objecti-


ve-C y Objective-C++. Usa LLVM en su back-end y ha sido parte del ciclo de
lanzamiento de LLVM desde la versión 2.6.
© FUOC • PID_00277621 8 Herramientas de pentesting de software

Netwide�Assembler (NASM) es un ensamblador que permite realizar progra-


mas de 16, 32 y 64 bits. Este paquete también incluye el desensamblador,
NDISASM.

1.2. Web Application Analysis

En el conjunto de herramientas para el análisis de aplicaciones web se incluyen


Burpsuite, Commix, Skipfish, Sqlmap, Wpscan y Zap.

• La herramienta BurpSuite permite realizar pruebas de exploración y esca-


neo de forma manual y automatizada de las comunicaciones con la apli-
cación web.

• Commix es una herramienta para comprobar si una aplicación web es


segura, buscando vulnerabilidades de inyección de comandos a través de
ciertos parámetros y cadenas vulnerables que puedan residir en un servidor
web.

• Skipfish es una herramienta de reconocimiento de seguridad de aplica-


ciones web. Prepara un mapa del sitio interactivo para el sitio de destino
mediante la realización de un rastreo recursivo y sondeos basados en dic-
cionarios; además, genera un informe destinado a servir como base para
evaluaciones profesionales de seguridad de aplicaciones web.

• Sqlmap es una herramienta para realizar pruebas de penetración automa-


tizas para el proceso de detección y explotación de la vulnerabilidad de
© FUOC • PID_00277621 9 Herramientas de pentesting de software

inyección SQL y la toma de control de los servidores de bases de datos. Las


principales características de esta herramienta son:
– Soporta la realización de ataques sobre distintas tecnologías de base
de datos: MySQL, Oracle, PostgreSQL, MS SQL, MS Access, IBM DB2,
SQLite, Firebird, Sybase, SAP MaxDB, HSQLDB y Informix.

– Capacidad de explotación con diferentes técnicas de SQLi: boolean-ba-


sed blind, time-based blind, error-based, UNION query-based, stackedque-
ries y out-of-band.

– Posee funcionalidad de uso como cliente de base de datos tradicional.

– Entre las posibilidades de explotación, permite la enumeración de


usuarios, contraseñas o hashes, privilegios, roles, bases de datos, tablas
y columnas.

– Es capaz de reconocer automáticamente formatos de hashes y realizar


un ataque de cracking basado en diccionario sobre los mismos.

– Soporta el volcado completo de tablas y de columnas específicas.

– Soporta la búsqueda de nombres de tablas y de columnas específicos


dentro de toda la base de datos.

– Permite la descarga y subida de ficheros a la base de datos para las


tecnologías MySQL, PostgreSQL y MS SQL.

– Posee un módulo para la ejecución de comandos del sistema operativo


para las tecnologías MySQL, PostgreSQL y MS SQL.

– Posee un módulo para establecer una conexión TCP entre el atacante


y el servidor de base de datos, permitiendo de esta manera el estable-
cimiento de una shell, la ejecución de Meterpreter o incluso una sesión
VNC.

– Soporta el escalado de privilegios en la base de datos a través de la


funcionalidad getsystem de Meterpreter.

• WPScan es un escáner de vulnerabilidades de WordPress de caja negra


que se puede usar para escanear instalaciones remotas de WordPress para
encontrar problemas de seguridad.

• OWASP�ZAP es una herramienta de código abierto para realizar pruebas de


penetración. Se trata de una aplicación cuya función principal es encontrar
código malicioso en aplicaciones web. Por ejemplo, JavaScript que realice
© FUOC • PID_00277621 10 Herramientas de pentesting de software

acciones maliciosas. Además, realiza un escáner manual de la red o en


segundo plano cada vez que se accede a una web.

Algunas de sus principales opciones son:

• Intercepting Proxy: Permite visualizar las solicitudes/respuestas realizadas


con el navegador web; además, permite utilizar un modo depuración.

• Spider y Ajax: Permite descubrir automáticamente nuevos recursos URL de


una web.

• Realiza escaneo de activos y pasivos para detectar vulnerabilidades y con-


figurar distintos parámetros para cada escaneo (por ejemplo, el número de
hosts analizados).

• Fuerza bruta: Permite descubrir directorios, así como configurar el número


de ejecuciones por host, recursividad y añadir archivos personalizados que
realicen mecanismos de fuerza bruta.

• Permite realizar reportes en formato HTML y XML con los elementos de-
tectados.

• Permite generar una única autoridad de certificación reconocida como


confiable para el navegador web. Es de gran utilidad si la aplicación usa
tarjetas inteligentes tokens para la autenticación

• Soporta una amplia gama de lenguajes.

• Soporte para autenticación y sesiones.


© FUOC • PID_00277621 11 Herramientas de pentesting de software

1.3. Exploitation Tools

En el conjunto de herramientas de explotación se incluyen metasploitframe-


work, msfpayload, searchsploit, social enginnering toolkit.

Metasploit es una herramienta que ofrece información de vulnerabilidades y


permite desarrollar y ejecutar exploits en máquinas remotas, así como escanear
en busca de vulnerabilidades.

La funcionalidad de Metasploit se encuentra en sus módulos:

• Auxiliary: nos proporciona la capacidad de interacción con herramientas


externas (scanners de vulnerabilidades, sniffers...)

• Encoders: nos proporciona la capacidad de codificar y ofuscar los payloads


para que nos sean detectados por los antivirus.

• Exploits: lugar donde se encuentran los exploits disponibles en el frame-


work.

• Payloads: lugar donde se encuentran los payloads (que se ejecutan una vez
tenga éxito el exploit).
© FUOC • PID_00277621 12 Herramientas de pentesting de software

• Post: nos proporciona un paquete de funcionalidades para la fase de post


explotación durante una prueba de penetración.

• NOPS: nos proporciona la capacidad de mantener a los payloads consis-


tentes mediante la inclusión de instrucciones nop.

El proceso general que realiza Metasploit para realizar una explotación es el


siguiente:

• Elegir y configurar el exploit: para ello disponemos de las siguientes ins-


trucciones:
– search XXX: búsqueda de exploits.
– use <nombre_exploit>: para seleccionar el exploit indicado.
– showinfo: muestra toda la información del exploit.
– showoptions: muestra todos los parámetros de configuración del exploit.
– set <nombre_propiedad> <valor>: establece el valor de una propiedad.

• Confirmar si el objetivo es susceptible al exploit seleccionado en el paso


anterior.

• Elegir y configurar el payload: para ello disponemos de las siguientes ins-


trucciones:
– show payloads advanced: muestra todos los payloads disponibles para el
exploit.
– use <nombre_payload>: para seleccionar el payload indicado.
– show options: muestra todos los parámetros de configuración del pay-
load.
– set <nombre_propiedad> <valor>: establece el valor de una propiedad.

• Elegir el encode del exploit y así no ser detectado por los antivirus del equi-
po.

• Ejecutar el exploit
– Mediante el comando exploit

Msfpc facilita el uso de herramientas como msfvenom para generar de una for-
ma simple un shellcode o un payload concreto.

Searchsploit permite buscar a través de los exploits almacenados en Exploit-DB


utilizando uno o más términos de búsqueda.
© FUOC • PID_00277621 13 Herramientas de pentesting de software

2. Decompilers

Un descompilador es una herramienta fundamental en Reverse Engineering ya


que permite obtener el código fuente de un programa a partir de una apli-
cación compilada. Este proceso de descompilación no implica que el código
fuente obtenido sea exactamente igual al código fuente original; aun así, el
código fuente obtenido puede ser modificado y volverlo a compilar para ser
funcional.

Existen diversos descompiladores para diversos lenguajes de programación,


por ejemplo, C#, Java. C, C++, entre otros.

A continuación, se presentan algunos ejemplos de descompiladores de len-


guaje C; para ello se ha creado el programa en C siguiente; se ha compilado
en entorno Windows 10.

2.1. Boomerang

El descompilador Boomerang está disponible para Windows y Linux, pero en Boomerang


la versión actual Alpha-0.3.1 solo permite descompilar ejecutables de 32 bits.
Disponible en: <http://
boomerang.sourceforge.net/
Ejemplo de la línea de comandos de ejecución: index.php>

f:\boomerang\boomerang.exe f:\c\ejemplo.exe
© FUOC • PID_00277621 14 Herramientas de pentesting de software

Como se puede observar en el código obtenido de la descompilación que se


muestra parcialmente a continuación, gran parte de los métodos son princi-
palmente código ensamblador, de forma que boomerang no realiza equivalen-
cia con el lenguaje C.

// address: 0x402580
void proc2(unsigned int param1) {
unsigned int eax_1; // r24{32}
void *ecx; // r25
__size32 esp; // r28
ecx = (esp + 4);
if (param1 >= 0x1000) {
do {
eax_1 = param1;
ecx = ecx - 0x1000;
param1 = eax_1 - 0x1000;
} while ((unsigned int)(eax_1 - 0x1000) > 0x1000);
}
return;
}
// address: 0x4014e0
void _start() {
__size32 ebp; // r29
__size32 ebx; // r27
__size32 ecx; // r25
__size32 edi; // r31
union { __size32 * x7; int x8; } edi_1; // r31
union { int x3; __size32 * x4; } edi_2; // r31
union { int x3; __size32 * x4; } edi_3; // r31
__size32 esi; // r30
int esp; // r28
union { int * x5; int x6; union { __size32 * x9; int x10; } * x11;
union { __size32 * x9; int x10; } * x12;
union { __size32 * x9; int x10; } * x13;
union { __size32 * x9; int x10; } * x14;
union { __size32 * x9; int x10; } * x15;
union { __size32 * x9; int x10; } * x16;
union { __size32 * x9; int x10; } * x17;
union { __size32 * x9; int x10; } * x18;
union { __size32 * x9; int x10; } * x19;
union { __size32 * x9; int x10; } * x20;
union { __size32 * x9; int x10; } * x21;
union { __size32 * x9; int x10; } * x22;
union { __size32 * x9; int x10; } * x23;
union { __size32 * x9; int x10; } * x24;
union { __size32 * x9; int x10; } * x25;
union { __size32 * x9; int x10; } * x26;
© FUOC • PID_00277621 15 Herramientas de pentesting de software

union { __size32 * x9; int x10; } * x27;


union { __size32 * x9; int x10; } * x28;
union { __size32 * x9; int x10; } * x29; } esp_1; // r28
int local0; // m[esp - 64]
__size32 local1; // m[esp - 40]
__size32 local2; // m[esp - 36]
union { int x3; __size32 * x4; } local3; // edi_2{76}
L-1:
global11 = 0;
esi = proc1(local0, local1, local2, ebx, ebp, esi, edi);
/* Warning: also results in ebx, esp, ebp, edi */
L-1:
L-1:
*(__size32*)(esp + 8) = ebp;
ecx = 17;
*(__size32*)(esp + 4) = edi;
*(__size32*)esp = esi;
*(__size32*)(esp - 4) = ebx;
edi_1 = esp - 84;
local3 = edi_1;
L-1:
edi_2 = local3;
if (ecx == 0) {
L-1:
proc2(0 >> 8 & 0xffffff | 48);
L-1:

2.2. Rec Studio

REC Studio es un descompilador que puede leer archivos ejecutables de Win- Rec Studio.
dows, Linux, Mac OS X, ya sean de 32 o de 64 bits, e intenta producir una
Disponible en: <http://
representación similar a la del código C. www.backerstreet.com/rec/
rec.htm>

Ejemplo de la línea de comandos de ejecución:

f:\RecStudioWin\bin\RecCLI ejemplo.exe
f:\output\ejemploReversing.c

En el código obtenido con la descompilación se pueden identificar los métodos


main y función, así como algunas funciones de lenguaje C.
© FUOC • PID_00277621 16 Herramientas de pentesting de software
© FUOC • PID_00277621 17 Herramientas de pentesting de software

3. Disassemblers

El desensamblador es una herramienta que traduce el lenguaje máquina de un


programa ejecutable a lenguaje ensamblador.

Hay que tener en cuenta que algunas herramientas debugguers también inclu-
yen esta función de desensamblado, como veremos en el apartado destinado
a debuggers.

En el mercado hay una gran diversidad de herramientas de desensambladores


o que incluyen esta opción; algunos de los desensambladores ampliamente
difundidos son nasm, ndisasm, objdump, radare, ida, etc.

A continuación, se presentan algunos ejemplos de desensambladores C; para


ello se ha creado el programa en C siguiente, se ha compilado en entorno
Linux, concretamente en Kali Linux, usando el comando de ejecución:

gcc ejemplo.c -o ejemplo

3.1. GDB

GDB es un debugador que trataremos de forma más amplia posteriormente


que incluye la función de desensamblador.

Para su instalación en Kali Linux es necesario ejecutar previamente los siguien-


tes comandos:

root@kali:#sudo apt-get update


root@kali:#sudo apt-get install gdb

Una vez instalado gdb para su ejecución ejecutaremos de la forma siguiente:


© FUOC • PID_00277621 18 Herramientas de pentesting de software

El comando info functions muestra las funciones del ejecutable y se pue-


den reconocer las funciones main y funcion que se han implementado en el
código fuente.

A continuación, realizamos el desensamblado del método main, el cual pode-


mos observar en la imagen siguiente:
© FUOC • PID_00277621 19 Herramientas de pentesting de software

A continuación, se muestra el desensamblado del método funcion.

3.2. Radare Enlaces de interés

Radare <https://
El desensamblador de Radare forma parte de un framework en el que se incluye www.radare.org/r/>
una amplia gama de herramientas para reverse engineering. Radare2: reversing framekork:
<https://medium.com/@wi-
lliamkhepri/radare-2-reversing-
framework-4211d7e35920>
Está disponible para Linux, Windows, OSX, Android, iOS, Solaris y Haiku; el
ejemplo mostrado se ha ejecutado bajo Kali Linux, ya que también forma parte
de las herramientas incluidas en este entorno.

Las principales funcionalidades que proporciona son las siguientes:

• Ensamblador y desensamblador para múltiples arquitecturas.


• Depuración soportando varios depuradores nativos.
• Análisis forense, soportando varios sistemas de ficheros.
• Soporta el trabajo colaborativo.
• Soporta la visualización de la estructura de varios formatos.
• Proporciona análisis de código.
© FUOC • PID_00277621 20 Herramientas de pentesting de software

• Soporta la automatización a través de varios lenguajes de scripting, como


Python.

Radare2 está diseñado siguiendo el concepto de Unix según el cual «todo es un


fichero». De esta forma, Radare2 es capaz de abrir diferentes tipos de fuentes,
a las que se pueden acceder como si fuesen ficheros. Entre estas fuentes se
pueden destacar diferentes formatos de ficheros ejecutables, procesos, discos,
etc.

• Dentro del apartado de los ficheros ejecutables, reconoce entre otros el for-
mato PE, MZ, ELF, ejecutables de la máquina virtual Dalvik, ficheros .class
de Java.

• En lo que se refiere a las plataformas, soporta las plataformas x86, inclu-


yendo x64, ARM, PowerPC, Mips, SPARC, Java Bytecode, etc.

• Soporta sistemas de ficheros como ReiserFS, NTFS, Extended, etc.

Radare2 está compuesto de varias aplicaciones, cada una de las cuales propor-
ciona una serie de utilidades concretas, y cuyas capacidades se pueden combi-
nar fácilmente. Las aplicaciones que componen Radare2 son las siguientes:

• radare2: Es el componente central del framework, que da acceso al editor


hexadecimal, a un depurador, y que proporciona una interfaz que permite
analizar código, desensamblar, aplicar parches, realizar búsquedas y com-
paraciones, etc.

• rabin2: Esta utilidad permite obtener información de varios formatos fi-


cheros ejecutables. Es usada por radare2 para gestionar símbolos, extraer
información de los ficheros binarios tal como tablas de símbolos importa-
dos y exportados.

• rasm2: Esta utilidad proporciona las funcionalidades básicas de ensambla-


dor y desensamblado, soportando, como ya se ha mencionado, diversas
arquitecturas.

• rahash2: Esta utilidad permite calcular varios tipos diferentes de hashes


sobre bloques de datos, como por ejemplo MD5, SHA1, o CRC32.

• radiff2: Esta utilidad permite llevar a cabo comparaciones binarias, e im-


plementa varios algoritmos diferentes.

• rafind2: Esta utilidad proporciona la funcionalidad necesaria para poder


llevar a cabo búsqueda de patrones dentro de ficheros o bloques de datos.

• rarun2: Esta utilidad permite ejecutar aplicaciones manteniendo de for-


ma sencilla un gran control sobre el proceso creado. Por ejemplo, permi-
© FUOC • PID_00277621 21 Herramientas de pentesting de software

te redirigir la entrada y salida estándar, modificar permisos, variables de


entorno, etc.

• rax2: Esta utilidad es un pequeño evaluador de expresiones aritméticas. Es


especialmente útil para llevar a cabo cambios de base.

A continuación, se muestra su ejecución parte del código desensamblado en


el cual se pueden identificar las funciones main y función del ejemplo.

A continuación, se muestra el desensamblado del método main.

Se muestra ahora el desensamblado del método función.


© FUOC • PID_00277621 22 Herramientas de pentesting de software

4. Debuggers

Un debugger es una herramienta que permite probar y depurar los posibles


errores de los programas, pero también se puede tratar de un depurador a bajo
nivel o de lenguaje máquina o ensamblador; en este caso, se muestra el códi-
go de un programa ejecutable en forma de desensamblado en código de en-
samblador permitiendo controlar la ejecución de procesos a bajo nivel (código
máquina y lenguaje ensamblador).

Existen diversos debuggers en el mercado. Los hay que están muy extendidos,
y otros que son populares. Bajo Linux el debugger más potente es el GDB1 (The
GNU Project Debugger). También se puede ejecutar en los sistemas UNIX más
populares y en Microsoft Windows.

En plataformas Windows existe una amplia gama de opciones en cuanto a


debuggers, por ejemplo, OllyDbg, WinDbg, Immunity, IDA Pro, aunque para
introducirnos en el debugging en ensamblador, en un apartado posterior utili-
zaremos OllyDbg. Una vez adquiridos los conocimientos básicos con OllyDbg,
pueden utilizarse fácilmente con otras herramientas como WinDbg,Immunity,
IDA Pro, etc.

En este apartado se verá cómo usar estas herramientas para controlar la ejecu-
ción de procesos a bajo nivel (código máquina y lenguaje ensamblador). En
los ejemplos que se muestran no se ejecutan exploits, sino que se eligen peque-
ñas aplicaciones para ser modificadas en tiempo de ejecución directamente
desde el debugger. Muchos exploits modifican las aplicaciones que atacan en
tiempo de ejecución para conseguir ejecutar su propio código. Los ejemplos
no son exploits en sí mismos, pero introducen el concepto de cambiar el com-
portamiento de las aplicaciones durante la ejecución de estas. El concepto es
usado en muchos exploits que, utilizando vulnerabilidades de las aplicaciones,
cambian su comportamiento para que hagan lo que el atacante desea.

4.1. GDB

Este es el debugger usado en plataformas GNU/Linux, aunque también está


disponible para Windows. Tiene una interfaz de comandos muy potente que
permite realizar un conjunto muy extenso de operaciones. El modo de trabajo
normal de gdb es bajo el intérprete de comandos. Existen varias aplicaciones
que, comunicándose directamente con gdb, añaden una interfaz gráfica al de-
bugger para hacerlo más manejable. Aunque estas interfaces son muy prácticas,
la potencia de gdb reside en el intérprete de comandos.
© FUOC • PID_00277621 23 Herramientas de pentesting de software

Se presentan aquí las operaciones básicas para poder trazar la ejecución de OllyDbg
aplicaciones con esta herramienta. Muchos lenguajes de alto nivel son sopor-
Disponible en:
tados por esta herramienta, permitiendo el seguimiento a alto nivel de las apli- <www.ollydbg.de/>
caciones si el código fuente está disponible. Aun así, tanto si el código fuente Immunity: <http://
immunityinc.com/pro-
está disponible como si no, gdb puede hacer el seguimiento de la aplicación ducts/debugger/index.html>
a bajo nivel (ensamblador).

GDB. The GNU Project Debugger. Disponible en: http:// www.gnu.org/software/gdb/

Para poder usar gdb como debugador en lugar de desensamblador debemos


compilar el programa con la opción -ggdb, por ejemplo

gcc -ggdb -/media/sf_shared/ejemplo.c -o ejemplo

Y luego ejecutar gdb:

gdb -/media/sf_shared/ejemplo

Este debugger cuenta con una ayuda en línea muy completa. El comando help
ofrece en todo momento información sobre los comandos disponibles. Ejecu-
tando help sin ningún parámetro se obtendrá una ayuda general, donde se
muestran las diferentes secciones en las que están divididos los comandos:
© FUOC • PID_00277621 24 Herramientas de pentesting de software

Escribiendo help seguido de la sección en la que se está interesado, se propor-


cionará una lista de los comandos disponibles en esa sección. Se puede tener
información de cada comando escribiendo el comando help más la instruc-
ción:

help break

En la imagen siguiente podemos observar un ejemplo del uso de la ayuda help


stack:
© FUOC • PID_00277621 25 Herramientas de pentesting de software

El entorno ofrece la capacidad de autocompletado de comandos mediante el


uso de la tecla TAB. Así pues, presionando esta tecla mientras se está escribien-
do un comando, el sistema intentará completarlo. Si no es capaz, ofrecerá una
lista de opciones para que el usuario pueda elegir.

• run: ejecución del programa. Este comando ejecuta el programa cargado


en memoria. También se puede ejecutar con r solamente. Se le pueden
pasar parámetros, como se le pasarían al programa que se está analizando,
desde el intérprete de comandos.

• start: ejecución del programa y parada. Este comando ejecuta el coman-


do cargado en memoria y detiene su ejecución al principio de la ejecución
del código principal del programa. En el caso de tratarse de un programa
escrito en C, se detendría al principio de la función main. Esto solo es vá-
lido si el ejecutable cuenta con la tabla de símbolos. En caso contrario, la
ejecución del programa continuará hasta el final, devolviendo mensajes
de que no se encuentra la tabla de símbolos.

• continue: reanudación de ejecución. Este comando reanuda la ejecución


del programa después de que esta haya sido detenida con alguno de los
métodos que permite gdb. También se puede ejecutar con c solamente.

• step: ejecuta una instrucción del programa. Ejecuta la instrucción entran-


do en las llamadas a funciones si es necesario. Este comando está asociado
a la ejecución de una instrucción escrita en un lenguaje de alto nivel. Si
tan solo se dispone de código ensamblador, no debe utilizarse, pues el re-
sultado puede ser impredecible. También se puede ejecutar este comando
con s.

• stepi: ejecuta una instrucción del programa (asm). Ejecuta la instrucción


a bajo nivel, entrando en las llamadas a funciones si es necesario. Este co-
mando está asociado a la ejecución de instrucciones en lenguaje máquina.
© FUOC • PID_00277621 26 Herramientas de pentesting de software

Es el comando recomendado si no se dispone del código fuente del pro-


grama. También se puede ejecutar con el comando si.

• next: ejecuta una instrucción del programa. Ejecuta la instrucción sin en-
trar en las llamadas a funciones. Este comando está asociado a la ejecución
de una instrucción escrita en un lenguaje de alto nivel. Si tan solo se dis-
pone de código ensamblador, no debe utilizarse, pues el resultado puede
ser impredecible. También se puede ejecutar este comando con n.

• nexti. Ejecuta una instrucción del programa a bajo nivel, entrando en


las llamadas a funciones si es necesario. Este comando está asociado a la
ejecución de instrucciones en lenguaje máquina. Es el comando recomen-
dado si no se dispone del código fuente del programa. También se puede
ejecutar con ni.

• break: definición de breakpoints. Una de las instrucciones más interesan-


tes es break. Se utiliza para definir puntos (breakpoints) en la línea de eje-
cución del programa donde se interrumpe la ejecución, dando el control
del proceso al usuario del gdb. Una vez se tiene el control se pueden ver/
cambiar datos de memoria y registros y después reanudar la ejecución nor-
mal del programa hasta otro breakpoint o hasta su finalización. También
se pueden ejecutar instrucciones paso a paso, para poder ver cómo evolu-
ciona la ejecución del programa.
En el siguiente ejemplo, en primer lugar, cargamos el fichero con el co-
mando file.
En segundo lugar, con el comando list, podemos observar el código fuente.

En la siguiente imagen, establecemos dos breakpoints; el primer breakpoint lo


establecemos indicando el nombre del método, y el segundo indicando el nú-
mero de línea; otra posible opción también disponible sería indicando la di-
rección de memoria.
© FUOC • PID_00277621 27 Herramientas de pentesting de software

• info break: información sobre los breakpoints definidos. Este comando


devuelve una lista con los breakpoints definidos hasta el momento.

• tbreak: breakpoint temporal. Este comando realiza la misma función que


break, pero de manera temporal, de tal manera que cuando el breakpoint
ha sido utilizado una vez, se desactiva automáticamente.

En el listado aparecen dos breakpoints, uno que es permanente (keep) y otro


que es temporal (del). Keep indica que una vez que se haya alcanzado el
breakpoint, este debe conservarse para posteriores usos. Del indica que cuando
se alcance el breakpoint, este sea borrado.

• watch: definición de watchpoints. Detiene la ejecución del programa (al


igual que los breakpoints) cuando el valor apuntado por la expresión defi-
nida por el parámetro cambia (escritura de valores). En ese momento, el
control del programa es devuelto al usuario mostrándole el valor antiguo
y el nuevo valor:
Existe un par de variantes de watch:
– rwatch: detiene la ejecución del programa si el valor apuntado es leí-
do.

– awatch: detiene la ejecución del programa si el valor apuntado es leído


o escrito.

• delete: borra un breakpoint. Elimina un breakpoint de manera definitiva.


Hay que indicar el número de breakpoints a eliminar, teniendo en cuenta
la lista provista por info break.

• enable/disable: activa o desactiva temporalmente un breakpoint. Al


contrario que la instrucción delete, la activación/desactivación de los
breakpoints es temporal.

• ignore: ignora un número determinado de pasadas sobre un breakpoint.


© FUOC • PID_00277621 28 Herramientas de pentesting de software

Este tipo de breakpoint es útil para avanzar, de manera controlada, en la


ejecución de bucles.

• finish: continúa la ejecución hasta la finalización de la función actual.

Si el debugger se encuentra en una función que puede reconocer y se ejecuta


esta instrucción, la ejecución del programa continúa hasta que la función fi-
naliza, devolviendo la ejecución a la línea siguiente de la llamada a la función.

• x: examinar. Este comando es muy parecido al comando display en cuan-


to a su sintaxis. Consta también de dos parámetros. El primero es el for-
mato y el segundo es el valor a mostrar. En este caso se muestran las po-
siciones de memoria especificadas y no hay reiteración automática. Este
comando se usa para explorar posiciones de memoria.

• print: muestra un dato especificado. Este comando se utiliza para mos-


trar datos concretos de manera puntual. El comando x es muy útil para
explorar la memoria, pero para mostrar un dato concreto es más práctico
utilizar este comando.

• info registers: muestra los registros del procesador.


© FUOC • PID_00277621 29 Herramientas de pentesting de software

También se puede acceder al valor de los registros utilizando alguno de los


comandos anteriores de mostrar información. Se puede hacer referencia a los
registros utilizando su nombre genérico y ubicando un $ al principio. Obser-
vemos los siguientes ejemplos:

• info all-registers: muestra todos los registros. El comando anterior


muestra los registros generales, pero el procesador tiene más registros. Se
puede ver la lista completa de registros usando este comando.

• disassemble: desensambla el código máquina. Este comando desensam-


bla el código en ejecución. Ejecutado sin parámetros, desensambla la fun-
ción que en ese momento se encuentra en ejecución y es capaz de identifi-
carla. Para que la pueda identificar es necesario que el programa contenga
la tabla de símbolos. En el caso de que esta no esté presente, se le pueden
indicar un par de direcciones de memoria para que lo desensamble.
© FUOC • PID_00277621 30 Herramientas de pentesting de software

• info target: da información sobre el programa cargado. Una de las in-


formaciones más relevantes es el entry point o start address.
© FUOC • PID_00277621 31 Herramientas de pentesting de software

En un programa que no contenga la tabla de símbolos, esta información es


importante para poder empezar el debugging del programa. El método habi-
tualmente usado es definir un breakpoint en la dirección del entry point y
empezar la sesión de debugging a partir de ese punto.

• set: cambia el valor de un elemento. Con este comando se puede cambiar


el valor de un elemento dado. Cualquier posición de memoria o registro
puede ser cambiado de valor.

4.2. OllyDbg

OllyDbg es un debugger muy utilizado en entornos Windows, aunque no es


el único. Microsoft tiene su propia herramienta, WinDbg, e incluso gdb tiene
una versión para los sistemas operativos de Microsoft. Conviene señalar que
los conceptos para seguir la ejecución de programas a bajo nivel no cambian,
ya que tan solo se está cambiando el software, no el hardware. Por consiguien-
te, se siguen teniendo los mismos registros, la inspección de memoria sigue
siendo un punto interesante y el desensamblado de las diferentes instruccio-
nes de código máquina será equivalente. La única manera de que hubiera un
cambio grande en la manera de realizar el análisis sería que se tuviera un cam-
bio de arquitectura hardware.

OllyDbg es una aplicación que tiene una ventana principal en la que se van
abriendo otras subventanas que dan acceso a diferentes opciones o funciona-
lidades de la aplicación. Si se abre el debugger sin cargar ninguna aplicación,
tan solo se obtendrá una ventana vacía, con el menú y unos iconos para po-
der utilizar. Si en ese momento se abre una aplicación aparecerá una ventana
como la del ejemplo:
© FUOC • PID_00277621 32 Herramientas de pentesting de software

OllyDbg: Ventana principal

Esta es la ventana principal para el análisis de aplicaciones de OllyDbg. Tam-


bién se denomina CPU Window. Se puede llamar también con la combinación
de teclas Alt+C. En esta ventana se observan 5 secciones:

Desensamblado

En esta zona aparece la dirección de memoria de cada instrucción, el código


máquina correspondiente, su traducción a lenguaje ensamblador y una última
parte en la que se encuentra el análisis que OllyDbg ha realizado de la apli-
cación cargada. Se puede ver el análisis del código hecho por OllyDbg en la
siguiente figura.
© FUOC • PID_00277621 33 Herramientas de pentesting de software

OllyBdg – Sección de desensamblado de código

Registros

Es esta sección se puede observar el estado de los registros en cada paso de la


ejecución del programa. Cada vez que el programa avanza en la ejecución de
una o varias líneas de código, el estado de los registros se actualiza.

OllyDbg - Sección de registros


© FUOC • PID_00277621 34 Herramientas de pentesting de software

Pila

Al igual que el resto de secciones, esta también se actualiza a cada paso de la


ejecución. En esta sección se muestra el contenido de la pila. Habitualmente, se
muestra también un análisis del contenido de la pila en una columna situada
a la derecha. En ella se pueden ver fácilmente las direcciones de retorno de las
llamadas a funciones hechas con call.

OllyDbg - Sección de contenido de la pila

Volcado�de�memoria

En esta sección se puede ver un volcado del contenido de la memoria. Es po-


sible desplazarse por el volcado e incluso fijar el punto de la memoria que
quiere observarse.

OllyDbg – Sección de volcado de memoria

Área�de�ayuda

En esta sección se ofrece información sobre lo que los comandos en ensambla-


dor realizan. Datos sobre los operandos del comando a ejecutar son mostrados
siempre que sea posible. Esto facilita la localización de la información en un
punto de la ejecución, ya que no tienen que buscarse cada uno de los operan-
dos en las diferentes ventanas de información. Los datos más relevantes en
un momento concreto pueden verse aquí, y si se requiere más información,
se puede observar el contenido de las otras ventanas.
© FUOC • PID_00277621 35 Herramientas de pentesting de software

OllyDbg - Desensamblado más información

En la figura anterior puede observarse que se muestra información sobre los


registros que van a intervenir en la ejecución de la siguiente instrucción en
ensamblador. La instrucción es MOV EBP,ESP y en la parte inferior se puede
ver el contenido de ambos registros justo antes de ejecutarse la instrucción.

Opciones

Esta aplicación es muy configurable. Es posible cambiar el tamaño de todas las


secciones, además del tipo de letra y coloreado de código.

Por ejemplo, una de las configuraciones de coloreado de código que existen es la de


marcar las instrucciones relacionadas con llamadas a funciones y saltos. De esta manera,
la lectura del código se vuelve más visual.
© FUOC • PID_00277621 36 Herramientas de pentesting de software

OllyDbg - Opciones de la sección de código (coloreado)

En la figura anterior se puede observar cómo se pueden configurar las opcio-


nes para mostrar datos o código. Se puede apreciar que la ventana del código
ensamblador tiene muchas opciones. De hecho, se abre un menú contextual
haciendo clic con el botón derecho del ratón en las diferentes secciones de la
aplicación. Cada sección cuenta con sus propias opciones y las opciones mos-
tradas dependen en todo momento del elemento seleccionado de la sección.
Entre las opciones más interesantes que se pueden encontrar en cada sección
hay:

• Desensamblado
– Modificación del código máquina.
– Ensamblado de instrucciones a código máquina.
– Gestión de breakpoints.
– Mostrar datos de una dirección de memoria seleccionada en la sección
de volcado de memoria.
– Ir a un punto de la ejecución del programa.
– Ver el árbol de llamadas.
– Buscar un dato concreto.

• Registros
– Posibilidad de modificar el contenido de todos los registros.
– Visualización del grupo de registros deseado.

• Pila
– Posibilidad de modificar los datos de la pila.
– Alterar la pila introduciendo o sacando elementos (PUSH/POP).
– Mostrar datos de una dirección de memoria seleccionada en la sección
de volcado de memoria o en la pila.
© FUOC • PID_00277621 37 Herramientas de pentesting de software

• Volcado de memoria
– Desensamblado de posiciones de memoria.
– Buscar referencias a datos.
– Gestión de breakpoints asociados al acceso a datos.
– Mostrar los datos en diferentes formatos (hexadecimal, ASCII, tamaño
de los datos que se visualizan...).

Estas no son todas las opciones, pero son algunas de las más interesantes.

El desensamblado de posiciones de memoria permite comprobar si un código


malicioso se ha introducido en memoria de manera correcta para que el exploit
tenga éxito.

Se dispone también de operaciones para controlar la ejecución del proceso que


se está analizando. De la misma manera que GBD contaba con una instruc-
ción run para arrancar el programa y stepi para ejecutar una instrucción en
ensamblador, en OllyDbg existen opciones parecidas.

OllyDbg - Iconos

Teniendo en cuenta los iconos que aparecen de izquierda a derecha:

• Abrir archivo (F3).


• Reanudar el programa (Ctrl+F2).
• Cerrar el programa (Alt+F2).
• Ejecutar (F9).
• Pausa en la ejecución (F12).
• Ejecutar una instrucción (F7).
• Ejecutar una instrucción sin entrar en las llamadas (F8).
• Ejecutar automáticamente las instrucciones (animación) entrando en las
llamadas (Ctrl+F11).
• Ejecutar automáticamente las instrucciones (animación) sin entrar en las
llamadas (Ctrl+F12).
• Ejecutar hasta salida de función (Ctrl+F9).
• Ir a una instrucción en el desensamblador.
• Mostrar la ventana de Log (Alt+L).
• Mostrar la ventana de módulos cargados (Alt+E).
• Mostrar la ventana de memoria (Alt+M).
• Mostrar la ventana de threads.
• Mostrar la ventana de «ventanas».
• Mostrar la ventana de CPU (Alt+C).
• Mostrar la ventana de patches (Ctrl+P).
• Mostrar la ventana de llamadas (Alt+K).
• Mostrar la ventana de breakpoints (Alt+B).
© FUOC • PID_00277621 38 Herramientas de pentesting de software

• Mostrar la ventana de referencias.


• Mostrar la ventana de ejecución de un trace.
• Mostrar la ventana del código fuente.
• Configuración de opciones de debug (Alt+O).
• Opciones de apariencia.
• Ayuda.

Se puede ver que la cantidad de opciones es muy grande. En cada caso se


utilizará tan solo un subconjunto de todas las herramientas disponibles.

Modificar�un�programa�en�ejecución

Se procede a continuación a alterar el programa ejemplo1 en tiempo de ejecu-


ción, de la misma manera que se ha hecho anteriormente, para que se muestre
un valor distinto (123) por pantalla al final de la ejecución. La primera acción
que tomar es cargar el programa en memoria para poder proceder a su análisis.

OllyDbg - Ejemplo1 cargado

El siguiente paso consiste en localizar el punto en el cual se quiere actuar. Del


programa ejecutado se conoce la salida que da tras su ejecución:

OllyDbg - Resultado ejemplo1

La cadena de caracteres Resultado de... es devuelta por el programa como


salida. Esta información proporciona una idea del punto en el cual se puede
actuar para modificar el resultado. Una opción posible es buscar la cadena de
© FUOC • PID_00277621 39 Herramientas de pentesting de software

caracteres en la memoria del programa. Se procede a hacer clic con el botón


derecho del ratón sobre la sección de memoria, seleccionando la opción Search
for y del submenú Binary string (se puede conseguir el mismo resultado con la
combinación de teclas Ctrl+B; aparece una ventana en la que se puede espe-
cificar el texto a buscar).

OllyDbg - Buscar texto

La ejecución de esta sentencia localiza en la memoria de la aplicación el texto.


El resultado aparece en la sección de volcado de memoria.

OllyDbg - Resultado de la búsqueda de texto en memoria

Ahora se necesita saber en qué punto de la aplicación se accede (o se hace


referencia) a este dato. Muy probablemente, en alguno de esos puntos estará
la sentencia que muestre por pantalla la información que se desea alterar. Para
conseguirlo se hace clic con el botón derecho del ratón sobre el primer carácter
de la cadena buscada y se selecciona la opción Find references. También se puede
presionar Ctrl+R.

OllyGbd - Ventana de referencias

El resultado muestra una línea de código que introduce en la pila una referen-
cia a la cadena. Haciendo clic con el botón derecho del ratón se puede elegir la
opción Follow in disassembler para abrir la ventana de CPU y mostrar la línea
de código de interés.
© FUOC • PID_00277621 40 Herramientas de pentesting de software

OllyDbg - Código que hace referencia a la cadena buscada

Se puede observar que hay una llamada a una función (de la que no se conocen
más datos que su dirección), a la que se le pasan dos parámetros en la pila.
Un entero y una cadena de caracteres, que tiene un formato muy parecido al
que usa la instrucción printf para mostrar texto por pantalla. La cadena de
caracteres contiene el texto %d que en printf se interpreta como el comodín
para mostrar un número entero. Este número podría ser el segundo parámetro.
Teniendo esto en cuenta, se procede a marcar la línea con un breakpoint y a
ejecutar el programa. Un breakpoint se puede crear haciendo doble clic en el
código máquina de la línea deseada. La ejecución se consigue presionando F9.

OllyDbg - Breakpoint antes de la llamada a una supuesta función printf

En la imagen se observa cómo se ha detenido la ejecución en el punto selec-


cionado. El valor de EAX es 7, cosa que concuerda con la salida del programa.
Para alterar su ejecución hay que cambiar su valor al nuevo valor deseado.
Como ya se ha introducido este valor en la pila, deberá cambiarse también
© FUOC • PID_00277621 41 Herramientas de pentesting de software

allí. Si se hubiera puesto el breakpoint antes de introducir el valor de EAX en


la pila, el trabajo de cambiar el valor de la pila no habría sido necesario. Se
procede a cambiar el valor del registro EAX haciendo doble clic sobre él:

OllyDbg - Cambiar EAX

En la figura se le asigna el nuevo valor 123. Se procede ahora a cambiar el valor


introducido en la pila, como resultado de haber ejecutado un push del registro
EAX. Se hace clic con el botón derecho del ratón sobre el dato de la pila que
se quiere cambiar y se selecciona la opción Edit (Ctrl+E).

OllyDbg - Editar un dato de la pila

En este caso es necesario hacer el cambio en hexadecimal. Se cambia el valor


y se guarda. El resultado mostraría la siguiente información en pantalla:
© FUOC • PID_00277621 42 Herramientas de pentesting de software

OllyDbg - Resultado modificado

Una vez que ya están acabados todos los detalles del cambio que se quiere
realizar, se puede proceder a la ejecución del código y ver si así se ha obtenido el
resultado deseado. Se presiona dos veces F8 (step over) para ejecutar la función
que «probablemente» muestre la información de interés por pantalla.

OllyDbg - Resultado final

Como se puede observar, se ha conseguido el resultado deseado, porque ahora


el programa no ha mostrado el 7 esperado, sino el 123 deseado.

4.3. Immunity Debugger

Immunity Debugger incluye una interfaz gráfica del estilo de OllyDbg, pero
incluye además una línea de comandos. La línea de comandos siempre está
disponible en la parte inferior de la GUI. Permite al usuario escribir accesos
directos como si estuvieran en un depurador típico basado en comandos.

Los comandos también se pueden extender en Python o ejecutarse desde la


barra de menús.
© FUOC • PID_00277621 43 Herramientas de pentesting de software

Entre las opciones que dispone esta herramienta también está la de mostrar
los valores de los registros, tal y como se muestra en la imagen siguiente.
© FUOC • PID_00277621 44 Herramientas de pentesting de software

Immunity Debugger también puede ser ejecutado usando comandos a través


del Immunity Debugger Python Shell.

Uno de los aspectos relevantes de Immunity es la herramienta de vista en forma


de diagrama que facilita el seguimiento del flujo de la lógica del programa:
© FUOC • PID_00277621 45 Herramientas de pentesting de software

4.4. IDA Pro Enlaces de interés

Web: <https://www.hex-
Se trata de un desensamblador y depurador interactivo, programable y exten- rays.com/products>
sible. IDA Pro se ejecuta en Windows, Linux y Mac OS X y puede depurar una Los Pluggin Hex-Rays se pue-
den encontrar en: <https://
gran variedad de plataformas (Windows 32/64-bit, Linux 32/64-bit, OS X x86/ www.hex-rays.com/about/>
x64, iOS, Android, etc.).

IDA Pro también es un entorno de desarrollo integrado. Consiste en un ma-


cro-like language que se puede utilizar para automatizar tareas; además, la ar-
quitectura de open plugins permite a los desarrolladores externos implementar
nuevas funcionalidades.

Uno de los puntos destacables es la facilidad de uso; por ejemplo, entre las
diversas ventanas, podemos observar un panel con la lista de funciones, lo que
nos permite acceder rápidamente a las secciones del código que nos interese.
© FUOC • PID_00277621 46 Herramientas de pentesting de software

También se puede analizar el código en ventanas aislando una función del


resto del código ensamblador, como se puede observar en la imagen siguiente:
© FUOC • PID_00277621 47 Herramientas de pentesting de software

Al igual que el resto de debugadores, permite la edición del código, modificar


funciones, direcciones, etc., como se puede observar en la siguiente imagen:
© FUOC • PID_00277621 48 Herramientas de pentesting de software

Como se puede observar en las imágenes siguientes, se trata de una herramien-


ta intuitiva que incluye todas las opciones de un desensamblador y depurador
de fácil acceso.
© FUOC • PID_00277621 49 Herramientas de pentesting de software

Esta herramienta también permite visualizar el desensamblado en una vista


forma de diagrama que facilita el seguimiento del flujo de la lógica del progra-
ma; además, en el menú contextual permite marcar breakpoints, editar funcio-
nes, comentarios, etc.
© FUOC • PID_00277621 50 Herramientas de pentesting de software

4.5. Ghidra

Ghidra es una herramienta de ingeniería inversa libre y de código abierto desa-


rrollada por la Agencia de Seguridad Nacional (NSA). Es considerado un com-
petidor o alternativa de IDA Pro.

Soporta las plataformas en 32 y 64 bits en Windows, Linux y OS X, y los plugins


Ghidra se pueden desarrollar en Java o en Python. Por ejemplo, a la instalación
de Ghidra hay que añadirle la instalación del plugin dex2jar para poder trabajar
con archivos Android.
© FUOC • PID_00277621 51 Herramientas de pentesting de software

Una vez elegido el archivo se abre con la herramienta por defecto CodeBrowser,
en el cual se puede observar su aspecto general.

Entre las ventanas disponibles, se puede observar el árbol de símbolos en el


que se pueden identificar, entre otras, las funciones que se han desarrollado.
© FUOC • PID_00277621 52 Herramientas de pentesting de software

Al seleccionar la función se puede observar el desensamblado de la misma.


© FUOC • PID_00277621 53 Herramientas de pentesting de software

Además, también está disponible la herramienta de Decomplie mostrando el


código descompilado en una ventana para este propósito.

En las imágenes anteriores hemos podido observar el método función del pro-
grama ejemplo.exe.

Vista parcial del árbol de símbolos:


© FUOC • PID_00277621 54 Herramientas de pentesting de software

A continuación, se muestra el desensamblado del método main.


© FUOC • PID_00277621 55 Herramientas de pentesting de software

5. Radare2 reversing framework

Radare2 (también conocido como r2) es un framework para la ingeniería in-


versa y el análisis de binarios, compuesto por un conjunto de utilidades que
se pueden utilizar a través de la línea de comandos. Estas herramientas son
complementarias al propio desensamblador r2 que ya hemos tratado anterior-
mente y que estas herramientas utilizan como base.

rax2: Se trata de un conversor de base y evaluador de expresiones, con el que


se pueden realizar conversiones de base entre valores enteros, decimales, he-
xadecimales, cadenas de caracteres, ASCII; soporta también Endiannes.

rabin2:�Herramienta que permite manejar archivos binarios, para obtener in-


formación sobre importaciones, secciones, encabezados, etc. Es capaz de ma-
nejar diversos tipos de archivos como Java Class, ELF, PE, etc.; también permite
obtener importaciones y exportaciones de símbolos, dependencias de biblio-
tecas, secciones de cadenas de datos, etc.

En la siguiente imagen se muestran algunas de las opciones disponibles en


rabin2.
© FUOC • PID_00277621 56 Herramientas de pentesting de software

Una de las opciones es la posibilidad de obtener los símbolos, como se muestra


a continuación:

En la siguiente ilustración podemos observar los métodos de la aplicación main


y función, así como la función vulnerable del lenguaje C strcpy.
© FUOC • PID_00277621 57 Herramientas de pentesting de software

Rasm2: A continuación, podemos observar las opciones disponibles del en-


samblador / desensamblador Rasm2.

radiff2:�Esta herramienta permite visualizar gráficamente las diferencias entre


dos binarios.
© FUOC • PID_00277621 58 Herramientas de pentesting de software

rafind2:�Editor hexadecimal de línea de comando, que permite filtrar por va-


rias opciones y buscar patrones de bytes en un fichero binario.

rahash2:�Utilidad de hashing basada en bloques, permite calcular, verificar y


mostrar los valores hash de cada bloque de un archivo.
© FUOC • PID_00277621 59 Herramientas de pentesting de software
© FUOC • PID_00277621 60 Herramientas de pentesting de software

6. Android Studio

Android Studio es el IDE oficial para el desarrollo de Android e incluye todo


lo necesario para compilar apps para Android. Algunas de sus principales ca-
racterísticas incluidas son:

• Sistema de compilación basado en Gradle.


• Emulador.
• Entorno unificado de desarrollo para todos los dispositivos Android.
• Integración con GitHub.
• Variedad de marcos de trabajo y herramientas de prueba.
• Herramientas de Lint para identificar problemas de rendimiento, usabili-
dad y compatibilidad.
• Compatibilidad con C++ y NDK.

En el próximo ejemplo de un desensamblado de un archivo apk, disponemos


de la opción Profile or debug APK y elegimos el archivo apk.

En este ejemplo de desensamblado se ha buscado la clase que se desea modi-


ficar o visualizar; en este caso, com.example.loginapp.MainActivity.
© FUOC • PID_00277621 61 Herramientas de pentesting de software

También podría gustarte