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

Comentarios