Pregunta

¿Cómo puedo encontrar los parámetros de una función indocumentada Dll?

He buscado en todo Internet y terminé encontrando una manera: involucra funciones decoradas. Sin embargo, no puedo encontrar una manera de obtenerlos.

Cualquier ayuda sería apreciada.

¿Fue útil?

Solución

Debe desmontar la aplicación utilizando, como Paul señaló, algo como IDA Pro (o la versión gratuita de la misma).

Un buen recurso introductorio es el Wikibook, x86 Desmontaje . Específicamente, eche un vistazo a la sección sobre funciones y apilar marcos . Deducir parámetros de función puede ser sencillo para funciones simples que toman algunos parámetros de tipo estándar.

Probablemente la mejor manera de comenzar con este tipo de cosas es crear una pequeña DLL de prueba, crear algunas funciones con parámetros conocidos y luego desmontar su DLL para ver los patrones. Aprenda el desmontaje de sus propias funciones (para las cuales tiene el código fuente y conoce la firma completa) en lugar de sumergirse en el desmontaje de cosas de terceros.

Otros consejos

Hice una respuesta bastante profunda aquí , ReactOS es su mejor apuesta como parece, todos aquí está un poco fuera de lugar.

Me gustaría desaconsejar encarecidamente intentar desarmar las DLL del sistema.

Una MUCHA más ventajosa (y no creo que se discuta tan lejos de la apariencia de las cosas), la técnica es enumerar el contenido de los PDB.

Los archivos PDB son símbolos de depuración como puede saber, sin embargo, se requiere Microsoft, debido a la acción de los casos judiciales antimonopolio, para liberar grandes volúmenes de información no documentada.

La información totalmente precisa, utilizable y actualizada para cantidades masivas de la API de Windows solo se documenta a través de archivos PDB. La convención de llamadas, el recuento de argumentos e incluso los tipos y nombres de argumentos están documentados (sin embargo, no los detalles sobre el uso, por supuesto :).

Revise el SDK de DIA, dia2dump es un buen ejemplo distribuido con Visual Studio, para investigar más a fondo, también proporciona una solución para decorar las funciones, para responder específicamente a su pregunta.

Además, kernel32 proporciona UnDecorateSymbolName, por lo que puede usar eso también si no desea vincular a las bibliotecas sdk de depuración.

La única forma de hacerlo es desmontando la función y viendo cómo usa los registros y la pila. IDA Pro es la mejor herramienta para hacer esto, pero no es algo trivial.

¿Es COM Dll? Si es un Dll COM, entonces regístrelo, use la vista OLE para conocer las interfaces y los parámetros.

En primer lugar, descargue Dependency Walker y abra su archivo DLL. Verá símbolos exportados e importados. Si el nombre de su función se ve como _MiFunción, es " C " estilo (no decorado) y no tiene mucho que ver con él (puede desmontarlo como se dijo anteriormente)

Si es más como? _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers está decorado con C ++ y puede intentar '' decorar '' usando información {no oficial} de aquí

Si la única información que tiene es el nombre de la función sin decorar, desafortunadamente no es posible deducir los parámetros de la función solo de eso.

Si eres bueno con el ensamblaje, es posible desmontar el código de máquina para la función y aplicarle ingeniería inversa. Pero eso es razonablemente difícil de hacer para todas las funciones excepto las más simples.

No estoy realmente familiarizado con el formato PE que usa Windows, pero estoy bastante seguro de que no hay una manera fácil de hacerlo. Si la tabla de símbolos no se ha eliminado, es posible que pueda encontrar alguna información (no estoy seguro de cómo Windows almacena la información de depuración en PE), pero es casi seguro que no lo ayudará con los tipos de parámetros. Lo mejor que puede hacer es cargar la DLL en un depurador y experimentar con ella ... monitorear la memoria en bruto en los marcos de la pila, enviar varios tipos de variables, etc.

Incluso si encuentra un buen recurso sobre la información de depuración en un archivo PE, es casi seguro que no habrá ninguna información para una función privada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top