Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: principito en 22 Marzo 2023, 11:41 am



Título: Problema al parchear ejecutable para DOS con dosbox-x e ida
Publicado por: principito en 22 Marzo 2023, 11:41 am
Hola, estoy tratando de parchear un ejecutable para DOS compilado con turbo-c de los tiempo de DOS, el simulador que estoy utilizando es dosbox-x y el ida pro 7.7 para hacer el análisis.
Para parchear elegí una función que no utiliza el programa.
Me puse a hacer pruebas y rellené con nops el espacio que voy a utilizar de la función para luego poner el código.
El problema que tengo es que al parchear manualmente la función con el HxD, yendo al ida viendo la dirección física y luego probando a rellenar con nops en el HxD, mi sorpresa fue que el byte en la posición 10, dentro de la función, cambia, haciendo varias pruebas, el byte cambia con un desplazamiento de 0x10.
(https://i.postimg.cc/8CFVx1qC/Captura.png)
Si insisto y lo parcheo con ida, poniendo un nop en el byte 10, y lo depuro con dosbox-x la situación se vuelve aún más extraña, y sucede donde originalmente estaba el mov ax, seg dseg:
(https://i.postimg.cc/GtBjF5N9/Captura2.png)
Me gustaría entender por qué pasa eso sin tener que depurar dosbox-x, si alguien tiene alguna idea...


Título: Re: Problema al parchear ejecutable para DOS con dosbox-x e ida
Publicado por: MCKSys Argentina en 22 Marzo 2023, 15:07 pm
Hola!

No recuerdo si los ejecutables de DOS tenían algo como la tabla de relocaciones, que es lo que podría estar pasando.

Lo que si sé, es que algunos estabas comprimidos con PKZIP y había que debuguear bastante para sacarlo.

Por las dudas, revisa wikipedia:
  • https://en.wikipedia.org/wiki/DOS_MZ_executable (https://en.wikipedia.org/wiki/DOS_MZ_executable)
  • https://en.wikipedia.org/wiki/DOS_API (https://en.wikipedia.org/wiki/DOS_API)

Saludos!


Título: Re: Problema al parchear ejecutable para DOS con dosbox-x e ida
Publicado por: principito en 23 Marzo 2023, 00:51 am
Tenías razón, sí que son las relocaciones. Eso hace que se sustituyan lo opcodes en esa posición por el segmento de la función, como la función que utilizo está en el segmento de 0820, se le suman esos valores a los opcodes.
Este es el fragmento de código del dosbox-x que calcula y modifica las relocaciones y que me modifica los opcodes que puse manualmente:
(https://i.postimg.cc/xC9xs0mX/Captura3.png)
Gracias por la pista.
Un saludo.