0% found this document useful (0 votes)
86 views17 pages

Primeros Pasos Con Ponce El Plugin de Ida Pro

This document provides an introduction and tutorial on using the PONCE plugin for IDA Pro. It begins with definitions of taint analysis and symbolic execution. It then walks through installing PONCE and using it on a simple crackme binary to perform symbolic execution and find the input that causes execution to follow the "win" path. Key steps include configuring PONCE, marking the program input for symbolic analysis, viewing the path constraints, and getting the solution for the required input. The tutorial demonstrates the basic functionality of PONCE on a small example to familiarize users with how the plugin works.

Uploaded by

Eduardo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
86 views17 pages

Primeros Pasos Con Ponce El Plugin de Ida Pro

This document provides an introduction and tutorial on using the PONCE plugin for IDA Pro. It begins with definitions of taint analysis and symbolic execution. It then walks through installing PONCE and using it on a simple crackme binary to perform symbolic execution and find the input that causes execution to follow the "win" path. Key steps include configuring PONCE, marking the program input for symbolic analysis, viewing the path constraints, and getting the solution for the required input. The tutorial demonstrates the basic functionality of PONCE on a small example to familiarize users with how the plugin works.

Uploaded by

Eduardo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 17

PRIMEROS PASOS CON PONCE EL

PLUGIN DE IDA PRO

Vamos paso a paso a tratar de familiarizarnos con este plugin, vamos a repetir algunos tutes que
están en la página al principio y luego veremos de extendernos una vez que veamos cómo se usa,
a otros ejemplos más complejos.

Que es PONCE?

La página del plugin dice esto

Definition

Ponce (pronounced [ 'poN θe ] pon-they ) is an IDA Pro plugin that provides users
the ability to perform taint analysis and symbolic execution over binaries in an easy
and intuitive fashion. With Ponce you are one click away from getting all the power
from cutting edge symbolic execution. Entirely written in C/C++.

Que es Taint análisis?

Taint Analysis
Taint Analysis attempts to identify variables that have been 'tainted' with user controllable input
and traces them to possible vulnerable functions also known as a 'sink'. If the tainted variable
gets passed to a sink without first being sanitized it is flagged as a vulnerability.
Some programming languages such as Perl and Ruby have Taint Checking built into them and
enabled in certain situations such as accepting data via CGI.
The concept behind taint checking is that any variable that can be modified by an outside user
(for example a variable set by a field in a web form) poses a potential security risk. If
that variable is used in an expression that sets a second variable, that second variable is now
also suspicious. The taint checking tool proceeds variable by variable until it has a complete
list[citation needed] of all variables which are potentially influenced by outside input. If any of these
variables is used to execute dangerous commands (such as direct commands to a SQL
database or the host computer operating system), the taint checker warns that the program is
using a potentially dangerous tainted variable. The computer programmer can then redesign
the program to erect a safe wall around the dangerous input.

Bueno traducido a idioma fácil parece que analiza las entradas del programa y sigue
marcando en cuales podemos influir y en que termina toda esa influencia.

Ahí está la definición y limitaciones de symbolic execution

https://en.wikipedia.org/wiki/Symbolic_execution

En concreto esto último es marcar la entrada que queremos que el programa siga y el mismo va
guardando las operaciones que le va realizando y armando supongo una formula, la cual al llegar a
cierto punto del programa, le podes pedir que evalúe que valor de dicha entrada logra que el
programa vaya por un camino u otro.

https://www.hex-rays.com/contests/2016/ponce/ponce.zip

De allí se bajan y se copian a la carpeta plugin de IDA.

Y el crackme de ejemplo que usa en el tute es este aunque esta compilado con visual studio
cambia apenas, pero para el tutorial sirve.

https://drive.google.com/file/d/0B13TW0I0f8O2WldNeVFjdnhKWVE/view?usp=sharing
Al arrancar el IDA y tratar de cargar el ejecutable sale

Te toma un snapshot o una instantánea de como estaba antes de hacer cambios, se sabe que ida
tiene la posibilidad de manejar instantáneas del estado del database.

Este plugin te lo puede hacer automático, pero sabemos que manualmente yendo a FILE-TAKE
DATABASE SNAPSHOT también podemos hacerlo cuando queremos y guardara el snapshot con
fecha y hora.

En VIEW-DATABASE SNAPHOT MANAGER está el manejador de databases para no tener que


buscarlas a mano podemos ir cambiando entre una u otra al punto que queremos, y vemos que
está hecha la que el plugin anuncio antes de correr el script para guardar el análisis original.
Vemos que el programa es muy simple hay una función CHECK que me devuelve un valor en EAX
que si es igual a la constante 0xAD6D, iría a WIN y sino a FAIL.

Vemos que los argumentos de main son solo argc y argv, y el puntero a las environments.
Y como argc es la cantidad de argumentos que se le pasan, inclusive el nombre del ejecutable,
sabemos que necesita un argumento más para que no te tire afuera, ahí en la comparación de argc
con 2.

Configuremos el debugger elijamos LOCAL WIN32 DEBUGGER en DEBUGGER-SELECT DEBUGGER.


Y en DEBUGGER-PROCESS OPTIONS le ponemos un argumento tentativo.

Y ponemos un breakpoint en el main en la primera instrucción.

Damos RUN con F9 para que pare en el BREAKPOINT.

Traceamos un par de líneas hasta que se setee EBP para poder leer los valores de los argumentos
que son relativos a EBP.
Por supuesto en la tercera línea luego del PUSH EBP, MOV EBP, ESP, ya tendremos seteado el
puntero base EBP y podremos ver los valores de cada argumento sin tener que ir buscando por el
stack jeje.

Poniendo el mouse por encima de la variable ac vale 2, por los dos argumentos que tiene.

Y pasando por encima de av en mi caso vale 0x33abc8 eso apunta a los argumentos, a ese valor le
sumo cuatro y veo el contenido que pasa como argumento por ECX.
Bueno apunta al segundo argumento ya que 0x3aabc8 apuntaba al array de punteros, el primero
la string del nombre del ejecutable, al sumarle cuatro es un puntero al nombre del siguiente
argumento.

Los vemos alli en el hex dump

Y si uno quiere verlo mejor hace click derecho-DATA FORMAT-ADDRESSES WITH NAMES

Ahí se ven los dos punteros el de 0x3aac11 es el que me importa ya que apunta a las AES que pase
como argumento.
Ahí vamos a la dirección donde está guardado el argumento ingresado, antes hay que volver a
data format-1 byte integer y hexadecimal y en columns 16.

Y en columns
Bueno ya tenemos a la vista la entrada de datos en la memoria, así que la marcamos y hacemos
click derecho-
Flushing buffers, please wait...ok
Command "JumpAsk" failed
Command "MakeData" failed
[+] Symbolizing memory from 0x3aac11 to 0x3aac15. Total: 5 bytes

Con eso ya le dimos el dato para que trabaje con esa entrada ahora vamos a configurar el plugin,
en EDIT-PONCE-SHOW CONFIGURACION.

Para este caso lo configuramos así, solo para que haga uso de SYMBOLIC ENGINE.
Le damos RUN y termina el programa y nos queda marcado con gris el camino que siguió, en verde
claro cuando usa valores que dependen de nuestra entrada y en verde oscuro cuando con nuestro
valor podemos afectar una condición.

Vemos los bloques grises por donde paso, el verde claro ya que EAX tiene un valor dependiente de
nuestra entrada y en verde oscuro donde toma una decisión que depende de lo que ingresamos.

Vemos que en ningún momento entramos a ver qué hace la función check.
Le cambio en OPTIONS-DEMANGLE NAMES para que se vea más claro el nombre de las funciones y
los argumentos.

Vemos que la función check tampoco es un lecho de rosas


También tiene en gris por donde paso, en verde claro donde hay valores afectados y en verde
oscuro donde podríamos tener una decisión que afectamos con nuestro valor.

Si nos paramos en el main en el punto de la decisión a FAIL o WIN


Ahí en la línea verde le decimos que resuelva la formula y nos dice cuál es la entrada que
deberíamos poner en esos 5 bytes para que siga por WIN.

[+] Solution found! Values:


- SymVar_0 (Mem 0x3aac11-0x3aac16 at address: 0x3aac15):0x5f (_)
- SymVar_1 (Mem 0x3aac11-0x3aac16 at address: 0x3aac15):0x11 ()
- SymVar_2 (Mem 0x3aac11-0x3aac16 at address: 0x3aac15):0x6c (l)
- SymVar_3 (Mem 0x3aac11-0x3aac16 at address: 0x3aac15):0x43 (C)
- SymVar_4 (Mem 0x3aac11-0x3aac16 at address: 0x3aac15):0x7c (|)

O sea que con 5f 11 6c 43 7c en vez de las Aes tendríamos la solución, podemos probar con
un script de Python, o arrancarlo de nuevo cambiar las Aes por esos bytes y ver si va a WIN
hare eso.

Volví a arrancarlo encontrar las Aes en memoria como hice antes


Ahora hago CLICK DERECHO-EDIT

Y una vez que lo cambio para que quede, tengo que hacer click derecho-APPLY CHANGES sino no
cambia.
Pongo breakpoints en WIN y FAIL para ver dónde va sino se cerrara y no sabré.

Doy run y paro en WIN con EAX el valor correcto para comparar y sin hacer ninguna operación me
resolvió el crackme.

Este es un caso muy sencillo y aún hay muchos diferentes usos, este tute es similar al de la página
web solo que ese es un GIF animado y es casi imposible de parar y seguirlo, así que por ser el
primero a medida que iba viendo como era, lo iba escribiendo por ahí a alguien le sirve.

Habrá más capítulos con más cosas de PONCE, aún hay varios tutes mas en la web y hay que tomar
ejemplos distintos a esos más adelante y ver cómo se comporta.

Por ahora espero que a alguien le empiece a picar el bichito por este gran plugin.

Saludos a todos los crackslatinos.

Ricardo Narvaja

You might also like