Aplicaciones de ingeniería inversa después de la ofuscación

Introduccion


Esta publicación tiene como objetivo estudiar algunas técnicas de ingeniería inversa. Todos los materiales se presentan solo con fines informativos y no están destinados a ser utilizados para ningún beneficio personal.


Sujeto de investigación


Como ejemplo, estudiaremos el código de documentación de Atomineer Pro (en adelante APD). Este es un complemento para Visual Studio diseñado para generar automáticamente comentarios en los códigos fuente. Primero, instale este complemento y verifique su funcionamiento. La versión gratuita tiene un período de prueba y una serie de restricciones de uso durante este tiempo. Entonces, al agregar comentarios al archivo, el usuario recibe un mensaje que indica que durante el día puede procesar solo 10 archivos

Mensaje 1
imagen

Cuando intenta procesar todo el proyecto, la utilidad muestra un cuadro de diálogo que le advierte que este comando no está disponible.

Mensaje 2
imagen

Empecemos


Primero, busque en el directorio de la extensión instalada y encuentre solo una biblioteca dinámica. Lo necesitamos Lo primero que haremos es subirlo al descompilador dotPeek desde JetBrains.

dotPeek
imagen

Como puede ver en la pantalla, la biblioteca pasó por un ofuscador, las variables y los métodos fueron renombrados y tienen nombres como a, b, c, d ... esto es lo que necesitamos. Estábamos buscando eso. Veamos que se puede hacer.

Parte 1


Lo primero que viene a la mente es encontrar la línea, pero dado que la funcionalidad de búsqueda no está en dotPeek, vamos por un camino diferente. Descompilamos la biblioteca con el ildasm.exe estándar de los SDK de Microsoft. La salida recibirá solo un archivo de texto. En él, busque el mensaje de texto " Modo de prueba". Tenga en cuenta que su ... "

archivo de texto
imagen

Encontrado un método
.method family hidebysig static bool e () cil administrado
Que pertenece a la clase CmdDocThisScope. Ahora volvamos a dotPeek.

Encabezado de spoiler
imagen

Entonces lo que tenemos. Encontramos un método que muestra un mensaje de prueba APD y, dependiendo de la condición, devuelve verdadero o falso. Encontramos todos los lugares desde los cuales se llama este método

búsqueda de llamadas
imagen

Solo se encontraron 2 puntos de llamada y estos son los métodos CmdDocThisFile :: c y CmdDocThisScope :: c.

encontrado
imagen

Por el nombre de las clases y el código del constructor, es obvio que las clases son responsables de los elementos del menú, y la virtualidad del método "c" indica que este es el controlador de eventos para que el usuario seleccione el elemento del menú correspondiente (esta información nos será de utilidad). Es fácil adivinar que si el método devuelve verdadero, el comando se ejecutará aunque muestre un cuadro de diálogo con una advertencia.

Al comienzo del método CmdDocThisScope :: e, la variable f se incrementa. Abra la ventana "Vista IL" y busque el código de comando:

Vista IL


Wikipedia tiene un artículo que describe estas instrucciones .

Luego, encuentre este método en el archivo de la biblioteca APD. Haremos esto usando la herramienta IDA. En la ventana con las funciones encontraremos nuestro método, y veremos el código ya familiar.

IDA


Una vez seleccionada la instrucción ldsfld, encontramos su representación binaria en la ventana de Vista Hex.

Vista hexagonal


La descripción del equipo confirma que hemos encontrado el lugar correcto.

Wiki


Un análisis más detallado del código para este método y los pasos posteriores están más allá del alcance de este artículo.

Parte 2


Ahora, como investigadores ya experimentados, encontramos una llamada al diálogo con el mensaje " El comando 'Documentar todo en el proyecto' solo está disponible en la versión completa ... ". Este método es CmdDocThisProject :: c

CmdDocThisProject :: c


La clase CmdDocThisProject es responsable del comando "Proyecto de proceso", el método "c" es virtual. Y contiene solo una cosa: es una llamada al diálogo con un mensaje. Sin condiciones, sin controles. La búsqueda del código fuente nos lleva al método CmdDocThisProject :: i, que tiene lo que esperamos en CmdDocThisProject :: c. Ahora en IDA podemos encontrar fácilmente los métodos necesarios y podemos aprender las instrucciones de CIL


Conclusión


Queda por decir que el artículo dejó deliberadamente puntos blancos para su estudio independiente.

Source: https://habr.com/ru/post/444886/


All Articles