M/o/Vfuscator o cómo hacer llorar a un reverser

M/o/Vfuscator compila programas en instrucciones "mov"... y sólo "mov". Operaciones aritméticas, comparaciones, saltos, llamadas a funciones y todo lo que necesita un programa se realiza a través de operaciones con mov; No hay código auto-modificado, no hay cálculos TTA (transport triggered architecture) ni nada que se pueda hacer sin mov...


Para que os hagáis una idea del resultado de usar la herramienta, las imágenes siguientes ilustran la compilación de una función sencilla de cálculo de número primo primero con gcc y luego con M/o/Vfuscator.

Ensamblador:

GCC M/o/Vfuscator

Gráficos de control de flujo: 
 
GCC M/o/Vfuscator
Building
 
M/o/Vfuscator utiliza LCC como frontend del compilador. Incluye un script de compilación que descargará automáticamente LCC, lo configurará para el backend de mov, y construirá la herramienta.

Si estás en un sistema de 64 bits, asegúrate de tener disponible una libc de 32 bits (por ejemplo, 'apt-get install libc6-dev-i386' o 'yum install glibc-devel.i686').

git clone https://github.com/xoreaxeaxeax/movfuscator
gd movfuscator
./build.sh
sudo ./install.sh


Si tienes problemas para crear LCC, puedes obtener más detalles sobre el proceso de construcción de LCC en: http://drh.github.io/lcc/current/doc/install.html

El compilador actualmente está orientado al lenguaje de programación C y a la arquitectura de procesador x86, pero es fácilmente adaptable a otros lenguajes y arquitecturas.

Uso:

Compila programas como un compilador C tradicional:

movcc example.c -o example


Por supuesto, como compilador C completo, no se limita a programas simples:


Parámetros:

Los parámetros se pasan al compilador a través de -Wfflag, por ej. -Wf--no-mov-id:

--mov-id
Add reference instructions for each basic block to assist debugging.

--no-mov-id
Do not add reference instructions. This is the default.

--mov-flow
Use mov instructions in implementing control flow. This is the default.

--no-mov-flow
Use jmp instructions in implementing control flow. This will substantially
speed up execution in larger projects.

--mov-extern
Use mov instructions to implement external function calls. This is the
default.

--no-mov-extern
Use jmp instructions to implement external function calls. This is useful for
debugging.

--mov-loop
Use mov instructions to implement the primary execution loop. This is the
default.

--no-mov-loop
Use jmp instructions to implement the primary execution loop. This is useful
for debugging.

--crt0
Build the M/o/Vfuscator crt0 library (_start routines).

--crtf
Build the M/o/Vfuscator crtf library (primary execution loop routines).

--crtd
Build the M/o/Vfuscator crtd library (data tables).

--crt
Same as --crt0 --crtf --crtd.

Más info y proyecto Github: https://github.com/xoreaxeaxeax/movfuscator

Via: www.hackplayers.com
M/o/Vfuscator o cómo hacer llorar a un reverser M/o/Vfuscator o cómo hacer llorar a un reverser Reviewed by Zion3R on 19:20 Rating: 5