OBFAU3 (Ofuscador Autoit)

Iniciado por overxfl0w13, Septiembre 05, 2016, 09:36:11 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Septiembre 05, 2016, 09:36:11 PM Ultima modificación: Septiembre 06, 2016, 05:42:20 AM por overxfl0w13
Buenas a todos  ;D

LLevo unos cuantos dias trabajando en un ofuscador de AutoIt en Python. Lo libero porque un proyecto de ofuscadores online que planteamos entre Blau, Sanko y yo ha quedado en nada, espero que os sirva de algo.

Actualmente las características son las siguientes:

Características del proceso:

· Número de iteraciones del proceso de ofuscado.
· Enlazar includes desde otros ficheros del proyecto.
· Eliminar comentarios especificados por tags (comment-start/comment-end y cs/ce)
· Eliminar comentarios especificados por ;
· Eliminar regiones (#Region)
· Añadir nuevas regiones
· Ocultar nombres de variables
· Ocultar nombres de funciones
· Añadir funciones hardcodeadas especificadas en Hardcoded/HardcodedPrograms.py
· Añadir variables
· Añadir comentarios
· Añadir bloques de código generado al inicio
· Añadir bloques de código generado al final
· Añadir bloques de código generado entre lineas del código original.
· Añadir funciones
· Añadir llamadas a funciones
· Ocultar strings con método replace.
· Ocultar strings con método shuffle (genera codigo autoit para desordenar y ordenar las strings).
· Ocultar strings con método cipher  (medio implementado por problemas con la salida de los algoritmos de PyCrypto).
· Ocultar strings con método reverse.
· Ofuscar enteros.
· Añadir directivas,  incluido #pragma compile con datos generados.
· Añadir espacios y tabuladores en el código.
· Añadir símbolos en el EOF.

Características de los bloques de código generados (según una aproximación a la gramática de AutoIt):

· Generación de código y bloques if, for ... to, for ... in, with, switch, func y simple (definiciones de nuevas variables haciendo uso de macros, constantes ofuscadas,  funciones del lenguaje de aridades 0, 1 y 2 y valores de tipos básicos)
· Definición del número mínimo y máximo de bloques a añadir.
· Definición del número mínimo y máximo de sentencias a añadir dentro del bloque (estas sentencias pueden ser a su vez nuevos bloques).
· Definición del número mínimo y máximo de condiciones lógicas a añadir en la guarda de los bloques generados.
· Definición del número mínimo y máximo de ElseIf dentro de un bloque If.
· Definición de la profundidad máxima de anidamiento de bloques generados.
· Definición de los valores mínimo y máximo de los enteros a usar en las definiciones (tiene sentido cuando se combina con la ofuscación de números).
· Posibilidad de añadir bloques al inicio,  al final y entre medias del código original.
· Definición de la probabilidad de generación de nuevos bloques entre medias del código original.
· Definición del número mínimo y máximo de funciones a añadir.
· Definición de la aridad mínima y máxima de las funciones a añadir (define el número de parámetros de una función).
· Es necesario especificar todos estos valores en las tres posibilidades de adición de bloques (inicio, final, medio).

Otras características:

· Definición de la profundidad máxima en el ofuscado de enteros.
· Definición del tamaño en KB de la secuencia de símbolos a añadir tras el EOF.
· Variables declaradas con Local,  Dim y Global.
· Considerado Call en las llamadas a funciones. (Considerar que el usuario pueda desactivarlo)
· Considerado Assign en las definiciones de variables. (Considerar que el usuario pueda desactivarlo)
· Considerado Eval. (Considerar que el usuario pueda desactivarlo)
· Considerada la creación y uso de objetos COM.
· Alterar nombres de las funciones y palabras clave de AutoIt (Considerar que el usuario pueda desactivarlo)
· Posibilidad de combinar los métodos de ofuscado de strings disponibles.
· Todos los parámetros de los procesos son elegidos de forma aleatoria entre los valores límite especificados por el usuario (incrementa la dispersión y permite incrementar la exploración del espacio de soluciones si se emplean algoritmos genéticos para optimizar los parámetros).
· Implementado operador ternario (parece funcionar solo con algunas versiones de AutoIt, dar posibilidad de activarlo)


Además, pretendo llevar adelante el proyecto hasta al menos el 25 de este mes que empiece el máster por lo que intentaré añadir en futuras versiones:

Pendiente de añadir:

· Algoritmo genético para optimizar los parámetros del proceso.
· GUI (Sadfud y Blau)
· Compilar automáticamente con Aut2Exe y variar sus parámetros (compresión,  iconos,  ...)
· Considerar arrays.
· Considerar constantes y enumeraciones (const y enum). (Reparando bugs)
· Arreglar bug al añadir directivas (mismo include dos veces).
· Parametrizar el script principal (standalone)
· Reordenación de código (tengo planteado algo usando grafos para tener en cuenta las dependencias).
· Dar la posibilidad de especificar más parámetros como el tamaño de los identificadores generados (esto se considera en las funciones implementadas pero no se deja al usuario especificarlo,   puede reducir considerablemente el tamaño del código).
· Hardcodear instancias simples de problemas NP.

He podido identificar una serie de errores que tienen solución simplemente usando bien el ofuscador, sin embargo es posible que haya algunos errores permanentes si usáis alguna función que no se comporte correctamente con un script dado, ante ese problema desactivad la función, variad los límites de dicha función o esperad hasta una nueva versión. Algunos de los errores conocidos son:

Código: text
· Duplicate name (function) 
    · Problema: Repetición del nombre de alguna función (al parecer ocurre cuando se añaden directivas include repetidas).
    · Solución: Volver a ejecutar el ofuscador (desactivar la función de añadir directivas).
   
· Error in expresion       
    · Problema: Error en algún Switch generado
    · Solución: Volver a ejecutar el ofuscador.
   
· Error subscripted array   
    · Problema: Error general, fuente desconocida.
    · Solución: Volver a ejecutar el ofuscador, error general, fuente desconocida.

· Undefined variable       
    · Problema: Se hace uso de una variable no definida en alguna evaluación.
Generalmente ocurre cuando se intentan ocultar variables y se hace uso en el código de constantes AutoIt.
    · Solución: Desactivar la función de ocultar variables. (Intentad volviendo a ejecutar el ofuscador)

· Only Object-type variables allowed in a "With" statement
    · Problema: La variable especificada en la guarda del bloque With no es un objeto.
Ocurre por una inicialización incorrecta de es tipo de bloques.
    · Solución: Volver a ejecutar el ofuscador.

· Variable must be of type "Object"
    · Problema: Alguna variable no es del tipo esperado (Object) en alguna expresión. Fuente desconocida.
    · Solución: Volver a ejeutar el ofuscador.
   
· Ante cualquier otro error, volver a ofuscar y variar parámetros. Si se soluciona (o no), publicadlo en el post :).


Si obtenéis un error diferente a los conocidos, intentad variar los parámetros o desactivar las funciones del ofuscador que supongáis que ocasionan el problema. Hay que tener cierta maña para usarlo y darse cuenta de qué funciones y parámetros provocan cada error, no os desaniméis si no funciona a la primera :boxing: . Además, podéis escribir el error en el post para que pueda darle solución en futuras versiones o daros alguna recomendación de uso.

Con respecto al código, podéis descargarlo de mi No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, es ahí donde subiré las actualizaciones (avisaré también por aquí). Para usar esta versión solo tenéis que cambiar los parámetros en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y ejecutar el script.


Además, Sadfud y Blau han colaborado haciendo una GUI cada uno, de momento solo está la de Sadfud y tiene algunos problemas que yo haya podido comprobar (funciona con una versión anterior del código, salta Avira y solo deja ofuscar un fichero en cada ejecución de la interfaz).

Sadfud


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Blau


De momento recomiendo usar directamente el script de mi No tienes permitido ver los links. Registrarse o Entrar a mi cuenta variando los parámetros correctamente para cada script AutoIt, aunque si no es posible tenéis la GUI de Sadfud.

No me hago responsable del uso que le déis a la herramienta :banned: , espero que os sea útil :drinking: .

Actualización 1

Aprovecho para dejar los links de la nueva versión por No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Changelog 1

    · Añadidos bloques For ... In, With, While y Do ... Until.
    · Creación y uso de objetos COM.
    · Operador ternario.
    · Enums y consts (bug).
    · Reparado el bug al ocultar variables no definidas por el usuario.
    · Considerado Step en bucles For ... To.
    · Añadidas cuatro funciones hardcodeadas.
    · Añadido método split para ofuscar strings.
    · Actualizada la lista de errores y soluciones.

Dejo también algunas consideraciones sobre el uso de la herramienta:

    · replace_includes : No activarla a no ser que el script a ofuscar incluya otros scripts desarrollados por el usuario (no de AutoIt). Si se activa y no se da esa situación siempre corrompe.

    · rm_comments_by_tag , rm_comments_by_semicolon y rm_comments_by_hash : Usar el adecuado para el script en función de cómo se definan los comentarios. Hay algunas situaciones que sí lo hacen corromper, en esta situación no vale con volver a ofuscar, hay que desactivar la función.

    · rm_regions , add_regs , hide_func_names , hide_var_names , add_hard_funcs , add_vars , add_comm , add_init_blocks , add_end_blocks , add_mid_blocks , add_user_funcs y add_func_calls : Estas funciones generan código de forma más o menos controlada, todos los errores observados que provocan se solucionan volviendo a ofuscar (al generar código de forma aleatoria entre los límites de los parámetros se pueden dar condiciones concretas que corrompen), por lo que en principio no hay porqué desactivar estas funciones siempre que los valores de los parámetros sean adecuados (evitar bestialidades de poner millones de bloques con profundidades de anidamiento exageradas etc.).

    · hide_strings_replace, hide_strings_flip_two, hide_strings_reverse, hide_strings_split : Ocultan cualquier string que aparezca en el código usando varios métodos, en principio tampoco hay problema en mantenerlas activadas.

    · hide_strings_shuffle : No oculta cualquier string, solo aquellas que se utilizan para dar valor a alguna variable e.g. Local $a = "string". Sí que suele dar problemas, recomiendo no usarla hasta que la depure bien.

    · hide_numbers : Oculta enteros, no genera ningún error.

    · add_directives : Puede generar errores por nombres duplicados si repite includes, el problema se soluciona volviendo a ofuscar hasta que no se de esa condición o desactivando la función(tiene fácil solución lo arreglaré en la siguiente versión).

    · add_tabs, add_to_eof : La primera sustituye espacios del código original por un número aleatorio de tabuladores, la segunda añade símbolos sin sentido (_) al final del script. En algunos scripts provoca errores permanentes y en otros no, posiblemente debido a la versión de AutoIt.


Actualización 2

Se ha realizado otra actualización, esta vez orientada a solucionar problemas y a reducir la complejidad de uso, aunque se han añadido ciertas funciones adicionales ;D.

Changelog 2

· Añadidas condiciones siempre ciertas en el código inicial.

· Expresiones regulares precompiladas.

· Añadidas más funciones hardcodeadas.

· Añadido método rotate para ofuscado de strings.

· Arreglado bug en hide var names.

· Arreglado bug en hide func names.

· Arreglado bug en true guard statements.

· Arreglado Error in expresion.

· Arreglado Only Object-type variables allowed in a "With" statement.

· Arreglado Variable must be of type "Object".

· Detectada la fuente de subscripted array (alguna de las funciones hardcodeadas).

· Mejorada la estabilidad.

Como siempre, los links de la nueva versión por No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y en mi No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Eso es todo, espero que sea de utilidad  ;D

Buenas a todos  ;D


La última versión que publiqué en este foro fue la 0.2, han habido muchos cambios desde entonces y 4 versiones más (las mejoras se mantienen entre versiones), publico los changelogs de todas las versiones y dejaré links a la 0.5 y 0.6. La más estable y la que más se ha testeado es la 0.5, pero la 0.6 supone el inicio de una serie de funcionalidades diferentes como la reordenación de código.


About 0.3

Se han solucionado problemas, mejorado la interfaz y extendido la funcionalidad, además, ahora es posible traducir fácilmente la salida del script modificando System/Kernel/Messages.py, si alguien se ofrece para traducir a varios idiomas no estaría mal  ;D.


Changelog 3


· Arreglados bugs con los ofuscados de strings (replace,reverse,flip_two,split,rotate), shuffle sigue dando problemas.
· Mejorado el ofuscado de strings.
· Arreglados bugs con los ofuscados de nombres de variables.
· Arreglado bug al eliminar comentarios que empiezan por # (hash).
· Arreglado bug al eliminar comentarios que empiezan por ;
· Añadidos snippets de [ Debe registrarse para ver este enlace ] como funciones hardcodeadas.
· Añadida función para llamar a las funciones hardcodeadas.
· Añadido nuevo método de ofuscado de strings, hexify (BinaryToString , StringToBinary). La longitud de las strings, con este método, se duplica, si supera el tamaño máximo de linea (Unterminated string) usar junto método split.
· Arreglados bugs al añadir funciones hardcodeadas.
· Extraídos mensajes para permitir traducciones.
· Cambiado el aspecto de la salida por consola.


About 0.4


Traigo la 4º actualización del ofuscador donde, además de añadir funciones y solucionar algunos problemas, se han hecho cambios en la interfaz y en el modo de uso de la aplicación.

En primer lugar, se ha compilado el código del ofuscador y generado un ejecutable (OBFAU3.exe), ahora solo es necesario lanzar el ejecutable (NO SE REQUIERE Python, probado en Win7/10 64 bits) con los parámetros adecuados. Con respecto a estos parámetros, en la versión actual se deben especificar en el fichero config.ini respetando los tipos de datos que se dan como ejemplo. Además, como se puede ver el fichero config.ini mencionado, ya es posible utilizar las traducciones que se añadan a Languages (de momento español, inglés y portugués)


Changelog 4

· Añadido fichero de configuración del proceso. Todos los parámetros se gestionan ahora desde config.ini.

· Traducción al Español y Portugués (este último no funciona pero está realizada la traducción).

· Posibilidad de cambiar de idioma.

· Ocultados parámetros de funciones.

· Soporte a ByRef y valores por defecto en parámetros de funciones.

· Mejorada la estabilidad en la ofuscación de nombres de variables, funciones y parámetros.

· Generado ejecutable.

· Añadidos todos los snippets AutoIt ([ Debe registrarse para ver este enlace ]) sin dependencias ni efectos visibles (+30).

· Arreglado método shuffle para ocultar strings. Cuidado con las combinaciones, duplica el tamaño de las strings.

· Detectados problemas en algunas funciones hardcodeadas (se depurará en la siguiente versión).


About 0.5

Comento para publicar la nueva versión del proyecto, que, en principio, será la última a no ser que sigan surgiendo ideas. La actualización se ha dedicado a solucionar problemas con las funciones hardcodeadas y los parámetros, además ahora se permite compilar directamente desde el ofuscador sin necesidad de abrir Aut2Exe. Se han realizado pruebas con más scripts y ha funcionando perfectamente en todos con muy buenos resultados, dejo el changelog.


Changelog 5

· Arregladas las funciones hardcodeadas (junto con la adición de bloques aleatorios pueden darse situaciones que corrompan el script, volver a ofuscar o reducir el número de funciones hardcodeadas).

· Error Unable to parse line, se soluciona volviendo a ejecutar el script ofuscado.

· Arreglado bug al ocultar parámetros de funciones hardcodeadas (ahora no se ocultan en estas funciones).

· Algunos problemas se solucionan por la profundidad de ofuscado de números (recomendado entre 1 y 2 o entre 1 y 1).

· Realizadas pruebas con más scripts (los resultados han sido muuy buenos).

· Compilación automática de los scripts con Aut2Exe y posibilidad de cambiar parámetros de compilación en config.ini.

· Mejorado el procesamiento de parámetros.


About 0.6

En este caso los cambios son orientados a incrementar la variabilidad del código generado y del original, complicando aun más los bloques While y Do until, también se han añadido condiciones adicionales en las guardas de los bloques condicionales y bucles así como modificaciones de los objetos creados en los bloques With y bucles For ... In. Además ahora se ofusca más el código original, sustituyendo la parte derecha de las expresiones de asignación por una llamada a Execute, pudiendo ofuscar también estas expresiones con los ocultadores de cadenas ya existentes (esto también es aleatorio, según una distribución uniforme se decide si se ofusca o no, de esta manera, una asignación). Se ha implementado también otro método para ofuscar asignaciones usando Assign, pero no recomiendo su uso porque se ha probado poco y no ha funcionado correctamente. Junto con todo esto, se han añadido también más snippets Autoit como funciones hardcodeadas, que tampoco han sido depuradas y pueden ocasionar problemas por lo que se recomienda, al menos en esta versión, no añadir una gran cantidad de funciones de este tipo (del orden de 1 a 10 está bien.)


Changelog 6

· Añadido icono a ejecutable.

· True statements en ambos lados.

· Completado Whiles y Do Until con más de una expresión .

· Añadidas en bloques with modificaciones de objetos.

· Arreglados While y Do Until.

· Añadidos iconos aleatorios (Requiere PIL [ Debe registrarse para ver este enlace ])

· Añadidas más funciones hardcodeadas (+15 de [ Debe registrarse para ver este enlace ], no se han depurado, pueden no funcionar bien si se añaden muchas!).

· Cambiadas expresiones usando Execute.

· Cambiadas asignaciones usando Assign (no he conseguido que preserve la semántica, puede no funcionar bien).

· Aleatorizado el cambio de expresiones.


Destacar que esta versión es menos estable que la anterior pero puede proporcionar mejores resultados por las modificaciones en el código, además facilita la compilación y la utilización de iconos aleatorios. Puede verse como primera versión de una nueva rama en la que se implementará la reordenación de código y otras mejoras más.


Con ello, dejo las descargas.


Descargas

Versión 0.5, ejecutable: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Versión 0.6, ejecutable por SendSpace: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Versión 0.6, código fuente:  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



Dejo, además, una prueba del funcionamiento de la versión 0.5.

Test v0.5 con indetectables rat

Fragmento inicial de config.ini


Ejecución de OBFAU3.exe


Compilación


Funcionamiento


No me hago responsable del uso que se le dé y se libera con fines educativos, cualquier duda en el código o en el uso, no dudéis en preguntar  :D

creo que la clave esta en el config.ini ¿? ya que al cambiar estos parametros la detecta me varía en los resultados, aún así obviamente el código curradisimo esta muy completo.

te mereces rep por este aporte.

Febrero 27, 2017, 05:57:43 PM #4 Ultima modificación: Febrero 27, 2017, 06:08:27 PM por ragaza
tremendo aporte men  ;D eres un dios!

alguien puede subir el proyecto del ide de sadfud o blau?¿