Cómo modificar una función en un archivo DLL compilado

Quiero saber si es posible “editar” el código dentro de una ya DLL compilada.

I. E. imagine que hay una función llamada sum(a,b) dentro de Math.dll que suma los dos números a y b

Digamos que he perdido el código fuente de la DLL. Así que lo único que tengo es el binario del archivo DLL.
Es allí una manera de que yo pueda abrir ese archivo binario, busque donde mi función reside y reemplazar el sum(a,b) de rutina, por ejemplo, con otra rutina que devuelve la multiplicación de a y b (en lugar de la suma)?

En Resumen, es posible que editar código Binario de archivos?

tal vez el uso de herramientas de ingeniería inversa como ollydbg?

Mucho más fácil hacerlo en memoria de disco. Y la esperanza de que no tiene nada similar a AuthentiCode o en otra de validación que garantiza que la imagen en disco no era probable que fuera manipulado cuando razonablemente inteligente cargador es la preparación de los PE de la imagen para la carga.
Si la función se exporta en la dll, ¿por qué no simplemente envuelva la dll?
No estoy hablando sólo de las funciones exportadas en el archivo DLL. ¿Qué pasa si la suma(a,b) es una función privada se utiliza dentro de la Dll? no exportados a ser de uso público. es posible localizar este rutinas y cambiar?
posibles duplicados de Encontrar una función en un desmontaje
Creo que es sólo un parcial duplicar.

OriginalEl autor Herno | 2013-02-25

4 respuestas

  1. 9

    Sí es definitivamente posible (siempre y cuando el archivo DLL no está criptográficamente firmado), pero es difícil. Usted puede hacerlo con un simple editor Hexadecimal, aunque dependiendo del tamaño de la DLL puede que tenga que actualizar un montón de secciones. No trate de leer el binario, pero en lugar de hacerlo a través de un desensamblador.

    Dentro de el binario compilado podrás ver un montón de esotérico bytes. Todos los códigos de operación que se escriben normalmente en la asamblea como instrucciones como “llamada”, “jmp”, etc. serán traducidos a la arquitectura de la máquina dependen de byte equivalente. Si utiliza un desensamblador, el desensamblador va a reemplazar estos valores binarios con instrucciones de montaje, de modo que es mucho más fácil entender lo que está sucediendo.

    Dentro de el binario compilado también podrás ver un montón de referencias a codificado lugares. Por ejemplo, en lugar de ver “llamada add()” será “de la llamada 0xFFFFF.” El valor aquí suele ser una referencia a una instrucción sentado en un determinado desplazamiento en el archivo. Generalmente esta es la primera instrucción que pertenecen a la función que se llama. Otras veces es la pila de la instalación/limpieza de código. Esto varía según el compilador.

    Mientras que las instrucciones que reemplazar son exactamente el mismo tamaño que el original, instrucciones, sus desplazamientos a seguir siendo el correcto y que no es necesario actualizar el resto del archivo. Sin embargo, si usted cambia el tamaño de las instrucciones que le sustituya, deberá actualizar manualmente todas las referencias a los lugares (esto es realmente tedioso por cierto).

    Sugerencia: Si las instrucciones que se va a añadir son menor que lo reemplaza, puede rellenar el resto con NOPs para mantener los lugares de bajar.

    Espero que ayude, y happy hacking 🙂

    Gracias! Su respuesta ha sido muy útil e informativo! No he pensado en los desplazamientos y de la dirección de los cambios que implican directamente el parche de mi dll.

    OriginalEl autor Freedom_Ben

  2. 3

    Rodeos, una biblioteca para instrumentar arbitraria funciones de Win32 en máquinas x86. Desvíos intercepta funciones de Win32 por la re-escritura de la función de destino de las imágenes. Los Desvíos paquete también contiene utilidades para adjuntar arbitraria de archivos Dll y los segmentos de datos (llamados cargas) a cualquier Win32 binario.
    Descargar

    OriginalEl autor sergmat

  3. 1

    Usted puede, por supuesto, hex-editar el archivo DLL al contenido de su corazón y hacer todo tipo de cosas de lujo. Pero la pregunta es ¿por qué ir a todos los que de problemas si su intención es reemplazar la función para empezar?

    Crear un nuevo archivo DLL con la nueva función, y cambiar el código que llamadas la función en el antiguo archivo DLL para llamar a la función en la DLL.

    O lo hizo perder el código fuente de la aplicación así? 😉

    Que suena como una buena solución, en realidad 🙂

    OriginalEl autor Nik Bougalis

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *