2008-11-15 48 views
16

¿Cómo puedo encontrar los parámetros de una función Dll no documentada?Buscar los parámetros de la función Dll

He buscado en todo el internet y he encontrado una forma: implica funciones decoradas. Sin embargo, no puedo encontrar una manera de obtenerlos.

Cualquier ayuda sería apreciada.

Respuesta

6

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

Un buen recurso introductorio es el Wikilibro, x86 Disassembly. Específicamente, eche un vistazo a la sección en functions and stack frames. Deducir los parámetros de la 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 desensamblar la DLL para ver los patrones. Aprenda a desensamblar sus propias funciones (para las cuales tiene el código fuente y conozca la firma completa) en lugar de sumergirse en el desmontaje de cosas de terceros.

+1

Hrm .... Según mi respuesta: P (bromeando bien;), de todos modos no es necesario desmontar en absoluto, puede obtener información mucho más precisa mucho más rápido antes de recurrir a este , de hecho, este es el último recurso posible después de los pasos que sugerí. – RandomNickName42

5

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

+0

Buena respuesta, probablemente debería eliminar la mía. Tengo que trabajar en mi brevedad :) –

1

Si la única información que tiene es el nombre de la función no decodificada, desafortunadamente no es posible deducir los parámetros de la función a partir de ese solo.

Si es bueno con el montaje, es posible que pueda desmontar el código de máquina para la función y realizar una ingeniería inversa. Pero eso es bastante difícil de hacer para todas las funciones, excepto para las más simples.

1

No estoy muy familiarizado con el formato PE que usa Windows, pero estoy bastante seguro de que no existe una forma realmente fácil de hacerlo. Si la tabla de símbolos no se ha eliminado, es posible que pueda encontrar 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 es cargar la DLL en un depurador y experimentar con ella ... monitorear la memoria sin procesar en los marcos de la pila, enviar varios tipos de variables, etc.

Incluso si encuentra un buen recurso en la información de depuración en un archivo PE, seguramente no habrá información para una función privada.

4

¿Es COM Dll? Si se trata de un COM Dll, regístrelo, utilice la vista OLE para conocer las Interafaces y los parámetros.

2

Primero de todos, descargue Dependency Walker y abra su DLL en él. Verá símbolos exportados e importados. Si el nombre de su función es similar a _MyFunction, es estilo "C" (no decorado) y no tiene mucho que ver con eso (puede desmontarse como se dijo anteriormente)

Si es más parecido a? _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers que es C++ - decoradas y se pueden tratar de "Undecorate" usando {oficial} información de here

+0

PE Explorer puede destrabar internamente los símbolos exportados de las bibliotecas compiladas con compiladores de Microsoft y Borland C++: http://www.heaventools.com/unmangle.htm – Wylder

7

lo hice bastante en profundidad respuesta here, ReactOS es la mejor opción, ya que parece nuevo, todo el mundo aquí está un poco fuera de lugar.

Me gustaría desalentar fuertemente tratando de desmontar las DLL del sistema.

A MUCHO más advenedizo (y no creo que se haya discutido tan lejos del aspecto de las cosas), la técnica es enumerar los contenidos de los AP.

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

La información completamente precisa, utilizable y actualizada para las cantidades masivas de la API de Windows es solo documentada a través de archivos PDB. La convención de llamadas, los recuentos de argumentos e incluso los tipos y nombres de argumentos están documentados (sin embargo, no son los específicos con respecto al uso del curso :).

Revise el DIA SDK, dia2dump es un buen ejemplo distribuido con Visual Studio, para seguir investigando, también proporciona una solución para descodificar las funciones, para hablar específicamente de su pregunta.

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

Cuestiones relacionadas