2009-03-08 43 views
8

Tengo una pequeña utilidad que fue escrita originalmente en VS2005.Ingeniería inversa C++ DLL

Necesito hacer un pequeño cambio, pero el código fuente de uno de los dlls se ha perdido en alguna parte.

¿Existe una herramienta gratuita o de precio razonable para realizar una ingeniería inversa de la dll a código C++?

Respuesta

12

Hex-Rays decompiler es una gran herramienta, pero el código será bastante difícil de leer y tendrá que dedicar mucho tiempo a la ingeniería inversa de toda la DLL.

+3

rayos Hex es probablemente el mejor, pero el código que le dará sólo será útil en encontrar la manera de ciertas partes del mismo trabajo y compilación no puede eso. 1 –

+0

Si el cambio es lo suficientemente pequeño que puede utilizar la salida de la decompilador parchear el archivo DLL en el montaje utilizar OllyDbg por ejemplo. – shoosh

+1

Sí, OllyDbg fue siempre mi favorito para reparar dlls, pero sólo después de SoftICE. ¿Cómo puede alguien olvidar el legendario "SoftICe"? – abhilash

-3

No puedes girar la carne de nuevo a un animal e incluso si pudiera usted tiene un animal muerto: P

+2

Tal vez, salvo cuando el animal es Java .. –

+10

Sí se puede. ¡El animal se verá horrible pero caminará y funcionará de la misma manera que el original! –

+0

acordaron paul en esta .. –

0

Si su pequeño cambio es para editar un texto o para omitir algunas rutinas, se puede usar un editor hexadecimal o un desensamblador, pero no podrá ver el código original de C++, e incluso si encuentra una herramienta que convierte el archivo DLL de nuevo en código, todos los nombres de las variables se habrían ido y sería un gran desastre.

3

No sé la situación exacta que tiene y la funcionalidad que la DLL implementa para su aplicación. Pero yo diría que en la mayoría de los casos sería mejor reescribir el archivo DLL que falta basado en la funcionalidad conocida.

Esto es especialmente cierto si tiene alguna documentación para ello.

Intentar realizar una ingeniería inversa del código binario al ensamblador, luego a C++ y luego tratar de modificarlo para proporcionar la funcionalidad existente será, en la mayoría de los casos, lento, y tal vez incluso imposible.

0

Tienes que hacerlo como lo hacen las galletas de juego y las aplicaciones: utiliza un desensamblador y piratea el código de Ensamblador.

6

También puede ser que desee echar un vistazo a OllyDbg que es un 32-bit de nivel de ensamblador analizar depurador. Se usa para analizar código binario en escenarios donde no tiene un código fuente. Es depurador ligero. OllyDbg es un shareware para que lo descargue & ¡Úselo gratis!

Visita OllyDbg es la página de inicio here

PS: Allá por los crackers día utilizados SoftICE de NuMega para la depuración en un archivo ejecutable & agarrar una instantánea en los valores de los registros. SoftICE era un depurador avanzado. Definitivamente fue la herramienta favorita para las galletas. No sé sobre el estado actual del producto. El sitio de NuMega no tenía información al respecto. Puede que lo haya pasado por alto, pero no pude encontrarlo. Recomiendo que tenga en sus manos una versión heredada (4.0x) de SoftICE & aplique el parche de WindowsXP para SoftICE. Trabajar con SoftICE es una especie de "experiencia".

Para saber más:Reversing: Secrets of Reverse Engineering by Eldad Eilam

1

Un poco dependiendo de su situación Me gustaría mantener el legado/DLL binario como está y escribir un archivo DLL de contenedor que va a cambiar y/o añadir cualquier comportamiento adicional.

La idea es agregar la funcionalidad antigua en una nueva DLL que importe la antigua.

-2

si se ha hecho en .NET por qué no usar el dotNet reflector.

+0

Es C++, como se indica en la pregunta. – Brad

Cuestiones relacionadas