xAnalyzer es un complemento para el depurador x86/x64 x64dbg de @mrexodia. Este complemento se basa en el complemento APIInfo de @mrfearless, aunque se han realizado algunas mejoras y adiciones. xAnalyzer es capaz de realizar varios tipos de análisis sobre el código estático de la aplicación depurada para brindar más información adicional al usuario. Este complemento realizará una extensa API de detecciones de llamadas de funciones para agregar definiciones de funciones, argumentos y tipos de datos, así como cualquier otra información complementaria, algo parecido a lo que se obtiene con el motor de análisis OllyDbg, para hacerlo aún más comprensible para el usuario. usuario justo antes de iniciar la tarea de depuración.
Algunas de las principales características y mejoras incluyen:
Análisis de llamadas de funciones extendidas (más de 13.000 definiciones de API de casi 200 DLL)
Funciones definidas y genéricas, argumentos, tipos de datos y reconocimiento de información de depuración adicional.
Detección automática de bucles.
Archivos de definición mantenidos por el usuario
Antes de xAnalyzer
Después de xAnalyzer
Descarga AQUÍ la última versión de los binarios
Descargue la última versión de x64dbg
Extraer apis_def.zip
Copie xAnalyzer.dp32/xAnalyzer.dp64 y la carpeta apis_def en los directorios de complementos respectivos en x64dbg
Busque en el menú " Complementos " en la ventana principal de x64dbg o también en el menú secundario en la ventana de Disasm una entrada " xAnalyzer ".
xAnalyzer tiene algunas opciones para elegir para personalizar aún más la experiencia con él, para usarlo justo cuando lo necesites y de la forma que quieras. Las opciones del complemento son las siguientes:
Análisis automático : cuando esta opción está activada, el complemento iniciará un análisis automático completo sobre el código ejecutable cada vez que llegue al punto de entrada cuando se cargue en el depurador. Al utilizar esta opción, obtendrá un comportamiento de análisis inicial más cercano de OllyDbg en x64dbg.
Análisis extendido : esta opción obligará a xAnalyzer a realizar un análisis extendido de toda la sección de código del ejecutable depurado. ¡¡¡ADVERTENCIA!!! Al habilitar esta opción, el proceso de análisis puede tardar mucho más tiempo y recursos en completarse, además, x64dbg puede utilizar una gran cantidad de memoria RAM dependiendo del tamaño de la sección y la cantidad de datos adicionales agregados al desmontaje estático ejecutable depurado.
Analizar funciones no definidas : al seleccionar esta opción, xAnalyzer utilizará análisis genéricos y tipos de argumentos para todas aquellas llamadas/funciones API que no están definidas en los archivos de definición de API y también llamadas como:
CALL {REGISTER}
CALL {REGISTER + DISPLACEMENT}
CALL {DYNAMIC_POINTER}
xAnalyzer tiene algunos comandos y opciones de menú para elegir cuando se trabaja con un ejecutable:
Haciendo una selección de varias instrucciones en las ventanas de desmontaje de x64dbg y seleccionando este menú, se realizará un análisis rápido sobre las líneas seleccionadas. También puede usar el comando selección xanal para iniciar esta opción o incluso configurar sus propias teclas de acceso rápido en la interfaz gráfica de usuario x64dbg.
Si está en medio de alguna función, puede usar esta entrada del menú para analizar esa función completa y solo esa función. Tomando su única instrucción seleccionada como referencia, xAnalyzer procesará desde allí todas las líneas dentro de un bloque de código. También puede usar la función de comando xanal para iniciar este tipo de análisis o incluso configurar sus propias teclas de acceso rápido en la interfaz gráfica de usuario de x64dbg.
Este comando iniciará un análisis completo de todo el módulo. Esta característica tiene en cuenta la opción Análisis extendido para la profundidad del análisis que se utilizará. También puede usar el módulo de comando xanal para ejecutarlo o incluso configurar sus propias teclas de acceso rápido en la interfaz gráfica de usuario x64dbg.
En estos casos, todos estos menús harán lo contrario de lo que hicieron los comandos anteriores. En caso de querer deshacerse del análisis información extra en algunas partes del código o en todo el ejecutable si así lo desea. También puedes usar los comandos: xanalremove selección/función/módulo
xAnalyzer tiene un sistema ampliable de archivos de definición API, estos archivos están presentes en las carpetas "api_def" y "api_def/headers" que deben contener todos los archivos con estructura .ini y con la norma de:
" nombre de archivo ": este es el nombre del módulo en el que se encuentra la función API.
" nombre de archivo.h ": este es el encabezado que contiene información relacionada con los datos de tipo (banderas y enumeraciones)
Extensión " .api ": Especifica que es un archivo de definición, no se reconocerá ninguna otra extensión (kernel32.api, shell32.api, etc.)
Todos estos archivos ini contienen información importante para el complemento, como los prototipos de funciones, tipos de argumentos, etc. xAnalyzer utiliza toda esta información para configurar la información adicional en el código estático. Una sola entrada en cualquiera de estos archivos sería como:
Archivo usuario32.api
[MessageBox]
1=HANDLE hWnd
2=LPCTSTR lpText
3=LPCTSTR lpCaption
4=[MessageBoxType] uType
ParamCount=4
Header=shell.h.api;
@=MessageBox
Archivo shell.h.api
[MessageBoxType]
TypeDisplay=UINT
Base=UINT
Type=Flag
Const1=MB_ABORTRETRYIGNORE
Value1=0x00000002
Const2=MB_CANCELTRYCONTINUE
Value2=0x00000006
Const3=MB_HELP
Value3=0x00004000
Const4=MB_OK
Value4=0x00000000
Const5=MB_OKCANCEL
...
Cualquier argumento entre corchetes significa que se trata de un tipo de datos específico (enumeración o indicadores binarios) y que se definirá en el archivo de encabezado .h adecuado especificado en la clave " Encabezado ".
En cuanto al archivo de encabezado, el esquema es prácticamente el mismo, solo un par de teclas, como " TypeDisplay ". Esto especifica el tipo de datos adecuado para mostrar en el comentario de dbg, luego viene " Base ", y apuntará al tipo de datos base utilizado por la entrada principal, en caso de que haya un tipo de datos vinculado, esto podría estar entre paréntesis como Bueno. La clave " Tipo " es el tipo de estructura de datos que es y puede ser "Flag" o "Enum". Finalmente aparecen todos los nombres y valores de las variables.
Si descubre que xAnalyzer no detecta una determinada definición de llamada API o no la detecta correctamente, podría significar que no está presente en los archivos de definición o que está definida incorrectamente, por lo que en este caso se podría realizar una adición o modificación para incluir cualquier función o argumento faltante, siempre que se siga la misma estructura, puede ser 100% personalizable.
La primera llamada indefinida con argumentos genéricos en una función no se procesará, a menos que esté precedida por un salto, ya que no hay forma de saber cuántos argumentos usar sin usar ilegalmente las instrucciones del prólogo de la función. Sólo se procesarán llamadas documentadas al inicio de una función o de una función no definida que haya estado presidida por un salto.
Algunas funciones "poco comunes" tienen argumentos entre saltos, por lo que de acuerdo con el diseño real del complemento (sin saltos entre argumentos de funciones) estas llamadas no serán procesadas, ya que cada vez que se encuentra un salto se limpian las instrucciones en la pila.
Las llamadas anidadas funcionarán correctamente sólo cuando:
1-) Se define la llamada interna
2-) Si la llamada interna indefinida no toma más argumentos de la pila que los argumentos necesarios para la llamada externa
Solo detecta bucles dentro de funciones (límites de función Prólogos/RET). Si una función contiene un RET en medio de su código, se detectará como fin de función y se borrará la pila de bucles.
El análisis podría fallar si el ejecutable que se está depurando tiene varios puntos en su nombre
Detección de bucle incorrecta para una sección con un salto no condicional en su interior (Ver #7)
Líneas de argumentos anidados (xAnalyzer admite argumentos anidados pero x64dbg por el momento no)
Agregar análisis de entropía
Escaneo de análisis de flujo en lugar de lineal (emulación de traza)
Detección de cambio de caso
xAnalizador 2.5.4
- Proyecto actualizado a VS2017
- Se corrigieron problemas al procesar instrucciones de argumentos que involucraban el puntero de la pila (versión x64).
- Se corrigió el orden incorrecto de los argumentos relacionados con el puntero de la pila (versión x64).
- Se corrigió un error en el reconocimiento de argumentos de funciones no definidas que duplicaba registros como argumentos diferentes (versión x64)
- Se modificó el reconocimiento de argumentos de llamadas indefinidas, solo predecirá hasta 4 argumentos indefinidos de forma predeterminada (versión x86)
- Algo de refactorización de código.
xAnalizador 2.5.3
-Se corrigió la detección de nombres de funciones en versiones más nuevas de x64dbg.
xAnalizador 2.5.2
-Se utilizó la línea de desarme actual seleccionada para el análisis del módulo en lugar de cip
-Se modificó algo de escritura en las entradas del complemento.
-Algunas refactorizaciones de código.
-Comando modificado "xanal/xanalremove exe" a "xanal/xanalremove module"
xAnalizador 2.5.1
-Se corrigió el fallo en las variaciones de las instrucciones mov.
xAnalizador 2.5.0
-Se eliminaron las instrucciones [EBP+/-] como posibles argumentos de la persona que llama a la función.
-Se eliminó el prefijo "0x" de todos los valores de argumentos de función ya que se infiere hexadecimal.
-Se corrigieron argumentos donde las variables de puntero no se mostraban correctamente como punteros sino como tipo de datos base.
-Se agregó reconocimiento del uso del puntero de pila (ESP) como posible argumento para llamadas a funciones (x86)
-Se agregó el uso de un nombre de tipo de datos preciso en los argumentos en lugar de un nombre de tipo de datos genérico/base.
-Función agregada de seguimiento inteligente (Predicción inteligente y reconocimiento de llamadas de funciones indirectas como: LLAMADA {REGISTRAR}, LLAMADA {PUNTO})
-Se agregó el nombre de los punteros de función como parámetros (se usará el nombre completo de la función, si se detecta, en lugar de solo la dirección)
xAnalizador 2.4.3
- Se agregó reconocimiento de instrucciones MOV en x86.
- Se agregó reconocimiento de funciones con el sufijo "Stub"
- Se corrigió el error en el "análisis automático" (se agregaron más condiciones de verificación de EP)
- Borrar las opciones de Comentarios automáticos/Etiquetas automáticas marcadas ahora de forma predeterminada
xAnalizador 2.4.2
- Se corrigió BoF cuando el argumento marcaba el comentario sobrepasaba MAX_COMMENT_SIZE
- Se corrigió el error de búsqueda de nombre de función cuando la definición se encuentra en un segundo archivo .api
xAnalizador 2.4.1
- Se agregó un nuevo esquema de teclas de acceso rápido.
- Se agregaron nuevas opciones para controlar qué datos de análisis anteriores deben borrarse. (Esto brinda la posibilidad de trabajar sin problemas con complementos del cargador de mapas como SwissArmyKnife, etc.).
- Se agregaron nuevos comandos (los antiguos han quedado obsoletos)
selección xanal: Realiza un análisis de selección
Función xanal: Realiza un análisis de función.
xanal exe: realiza un análisis ejecutable completo
selección xanalremove: elimina un análisis de selección anterior
Función xanalremove: elimina un análisis de función anterior.
xanalremove exe: elimina un análisis ejecutable completo anterior
Ayuda xanal: muestra un texto de ayuda en la ventana de registro.
- Se corrigió el análisis automático que no se iniciaba al inicio (Cierra #18)
- Se corrigieron varios archivos de definición de API (Cierra #17)
xAnalizador 2.4
- Archivos de definición de API nuevos y mejorados con un esquema ligeramente modificado (13.000 API de casi 200 DLL)
- Sistema de reconocimiento de símbolos para cada argumento de definición de API utilizado (más de 1000 tipos de datos de enumeración y más de 800 indicadores)
- Reconocimiento de tipos de datos de parámetros (BOOL, NUMÉRICOS, NO NUMÉRICOS)
- Detección de códigos auxiliares de VB "DllFunctionCall"
- Las cadenas pasadas como argumentos ahora son más limpias (los comentarios del depurador ahora tienen la parte de dirección eliminada)
- Resumen de ejecución agregado a la ventana de registro
- Se eliminó la función de teclas de acceso rápido (se incorporará en revisiones futuras) debido a algunos conflictos con x64dbg
- Varios errores corregidos
xAnalizador 2.3.1
- Se corrigió el error al iniciar el menú "Analizar selección" con una sola línea seleccionada, lo que causaba una excepción dbg abrupta (gracias a @blaquee)
- Compruebe si la carpeta de archivos de definición "apis_def" y los archivos de definición existen dentro de ella antes de cargar el complemento.
- Se cambiaron las teclas de acceso rápido a Ctrl+Shift+X para selección y Ctrl+X para funciones.
xAnalizador 2.3
- Se agregó la opción "Analizar funciones no definidas". (Desactivado de forma predeterminada, todo lo que no esté en archivos de definición no se analiza)
- Se agregó la opción "Análisis automático" (desactivado de forma predeterminada, realiza el análisis al iniciar en el EP del ejecutable depurado)
- Se agregó la función "Analizar selección" (realiza un análisis de instrucciones seleccionadas, admite múltiples llamadas seleccionadas)
- Función agregada "Analizar función" (realiza un descubrimiento y análisis automático de la función actual desde la dirección seleccionada)
- Se agregó la función "Eliminar análisis" de Selección/Función/Ejecutable.
- Se agregaron atajos de comando
- Se agregaron nuevos íconos
- Se agregó la configuración para guardar en el archivo .ini.
- Se agregó capitalización de valores de argumentos hexadecimales.
- Función reestructurada "Analizar ejecutable" (Hace un análisis completo del ejecutable actual)
- Menús reestructurados
- El nuevo cuadro de diálogo Acerca de ahora muestra el número de versión para realizar un seguimiento de las actualizaciones.
- Algunas pequeñas correcciones de errores
- Se corrigieron y fusionaron algunos archivos de definición de API.
- Mejoras de velocidad y estabilidad.
xAnalizador 2.2
- Indicador de progreso de análisis agregado
- Se agregó un nuevo modo de profundidad de análisis.
-Ahora el análisis automático solo se ejecuta si no hay una base de datos de respaldo presente
- Errores arreglados
xAnalizador 2.1
- Argumentos genéricos para funciones indefinidas y subs internos.
- Comentarios y argumentos de funciones inteligentes (solo se procesan funciones con argumentos en la pila). Esto permite a xAnalyzer brindar una visión más clara del código simplemente procesando y comentando esas funciones con argumentos reales.
- Detección de llamadas a funciones indirectas con esquema CALL -> DYNAMIC_MEMORY -> API
- Detección de llamadas a funciones indirectas con esquema LLAMADA -> REGISTRO/REGISTRO + DESPLAZAMIENTO -> API
- Detección de llamadas a funciones indirectas con esquema CALL -> JMP -> JMP -> API
- Detección automática de bucles
- Se corrigieron errores menores.
- Reordenamientos de código
xAnalizador 2.0
- Soporte para x64 bits
- Admite cambios de orden de argumentos de llamada API en x64 bits
- Admite archivos PDB con información adicional en llamadas API
- Soporte de llamadas API directas/indirectas
- Soporte de llamadas de funciones API estáticas al código del módulo principal
- Se corrigió el orden incorrecto de varios argumentos de llamadas API en los archivos de definición. Ahora se pueden detectar y comentar más llamadas correctamente
- Algunas mejoras y código mejor escrito.
- Varios errores solucionados.
xAnalizador 1.2
- Se actualizaron los archivos de definición de la API.
- Se agregó soporte para ejecutables vc6+.
xAnalizador 1.1
- Se solucionó el problema que no mostraba la información de API en los ejecutables de VC++ debido a que no se limpiaban adecuadamente las estructuras BASIC_INSTRUCTION_INFO antes/después de usarlas en un bucle.
- Se agregaron/actualizaron los archivos de definición de la API.
- Errores solucionados
xAnalizador 1.0
- Lanzamiento inicial
Se aceptan contribuciones de todo tipo, no solo como relaciones públicas sino también como informes de errores, documentación, etc.
Tenga en cuenta lo siguiente:
Gracias por usar el complemento xAnalyzer... ¡y feliz inversión para todos!