sábado, 20 de diciembre de 2014

Buguear MessageBoxA

Bueno, hoy les traigo un interesante truco con la API MessageBox que encontré mientras testeaba un código.

Se puede modificar la visualización del texto establecido en la API modificando su bandera con un valor mayor o menor (Max: 5 Min: 5) a 2737476.

Por ejemplo.

MessageBoxA(0,"Título","Texto",2737476)

Supongamos que tenemos un mensaje tipico, un "Hola Mundo" por ejemplo.

Mensaje("Hola Mundo",,48)


Con el valor 2737476 se ve asi

Lo interesante de este bug (y que me acabo de enterar) no es el cambio de visualización, Si No que no puede ser capturado por el capturador de imágenes FastStone Capture en modo Capture Window / Object, lo que sugiere una vulnerabilidad en captura de ventana.

Esto puede ser irrelevante para muchos, pero tal bug bien utilizado puede ser una buena herramienta para hackear de alguna u otra manera el ordenador de alguien.

Probado en Windows 7 Ultimate - Sp 1 - 32 Bits.

Un saludo!

jueves, 6 de noviembre de 2014

Manual de Pauscal

Bueno, como bien dice el titulo, hice un manual para aprender a programar en Pauscal desde 0, si quieres leer este manual que es gratis solamente has clic en el siguiente enlace.


Si tienes alguna pregunta, por favor no dudes en comentar o simplemente entrar al foro oficial del lenguaje en español.


¡Saludos!

viernes, 24 de octubre de 2014

Simular VarPtr con Autoit

Como sabemos, AutoitScript es un lenguaje cuyas variables son de tipo Variante, no tienen un tipo de dato especifico, son representadas por el interprete, así que seria algo difícil obtener de alguna manera un puntero constante.

Yo no se como funcione el interprete de Autoit, pero puedo imaginar que:

1_ Son analizadas por primera vez como tipo de dato Cadena (Texto plano).
2_ Si son de tipo numerico (Entero por ejemplo), Son almacenadas en una variable de tipo entero.
3_ Vuelve al paso 1
4_ Si sus valores cambian de tipo numerico a cadena, son almacenadas en otra variable de tipo cadena.

esto puede ser complicado y hasta creo que me estoy llendo del tema principal, Asi que ire directo a la simulación de VarPtr.

Con lo explicado anteriormente puedo decir, que no es muy posible obtener un puntero de una variable variante de Autoit, por lo que hay que utilizar estructuras.

Se pueden declarar variables de tipos de datos nativos utilizando estructuras en Autoit (DllStructCreate).

Observen el siguiente codigo.

$Estructura = DllStructCreate("int")

Acabamos de declarar una variable, esta dentro de una estructura pero puede ser utilizada de manera indiferente a cualquier otra variable.

Modificaremos el código un poco ...

$Estructura = DllStructCreate("int;char[128]")

Ahora tenemos 2 variables de distintos tipos de datos nativos, Entero y Cadena. Podemos obtener el puntero individual de cada variable creada utilizando "DllStructGetPtr".

$Estructura = DllStructCreate("int;char[128]")
$Ptr = DllStructGetPtr($Estructura,1)
MsgBox(0,0,$Ptr)


¡Atención! El puntero obtenido es únicamente valido para Autoit (Formato binario: 0x000FFD3), pero puede ser convertido utilizando la función "Int".

$Estructura = DllStructCreate("int;char[128]")
$Ptr = DllStructGetPtr($Estructura,1)
MsgBox(0,0,Int($Ptr))