Bueno, pues parece que es "facil" teniendo en cuenta que bajo MSDOS los sistemas de protección no eran tan sofisticados como lo pueden ser ahora, y en este caso creo que evitando ó forzando un simple salto se puede evitar pasar por el proceso que muestra el mensaje de modo DEMO, lo que creo es suficente para no necesitar la mochila, ya que tal como comentas una vez verificada la presencia de la mochila, ya la puedes quitar y el programa no vuelve a pedirla.
Con una primera observación, nos fijamos en lo siguiente:
El programa se inicia con el NC.COM, el cual lista todos los modulos ejecutables que encuentra en la carpeta EXE, y todos los ejecutables encontrados en dicha carpeta (aunque no tengan nada que ver con las herramientas en si de esta aplicación), se incluyen en las opciones del menu principal que es el modulo USR.EXE, (de no encontrar al usr.exe el programa inicial se queda parado buscando a este otro insistentemente, porque es el modulo que controla el resto de la aplicación, y es el que inicia los diversos modulos de los que se compone el programa, segun se seleccionen, y que se dividen en varios ejecutables idependientes (pero que no corren si no son llamados desde el usr.exe).
El USR.EXE es el encargado de mostrar ó no el mensaje de "ATENCION, ¡ Entra en modo DEMO !", lo cual se debe producir como consecuencia de comprobar directamente los datos de la mochila ó bien como resultado de verificar el contenido de algun registro sobreescrito con el resultado del proceso de verificación previa.
Por esto vamos a centrar nuestro primer objetivo en dicho modulo para ver que sucede si evitamos dicho mensaje de modo DEMO.
Herramientas a usar:
* IDA "The Interactive Disassembler".
* Editor Hexadecimal.
--------------------------------------------
Manos a la obra:
Herramienta IDA.
Iniciamos el IDAG.exe, pinchamos en "Nuevo" y seleccionamos el USR.EXE,
aceptamos la propuesta de analisis que nos ofrece IDA por tratarse de un programa de MSDOS
esperamos a que el IDA termine de analizar el programa. Cuando el icono del circulo amarillo existente en la barra de herramientas se pone en verde , ya podemos actuar nosotros.
Lo primero que vamos a buscar es nuestro mensaje de "ATENCION ¡ Entra en modo DEMO !", en la ventana de "string" que abrimos pulsando las teclas mayuscula+F12 y para localizarlo rapidamente vamos a buscarlo con el menu Search (Alt+T), escribimos el texto DEMO, pulsamos OK, y ya lo tenemos localizado.
Seleccionamos la linea donde se encuentra dicho texto, y hacemos un doble click de ratón sobre ella, para que nos lleve a la ventana del desensamblado donde se encuentra dicho texto, y aqui si pasamos el puntero del ratón por encima del comentario de dicha linea, nos muesta información de la linea de codigo en la que se mueve dicho valor a alguna variable ó registro para su posterior tratamiento, y si pulsamos de nuevo doble click sobre dicho comentario, nos va a llevar a dicho lugar del desensamblado.
Aqui ya tenemos donde se cogen los valores del mensaje, y estudiamos el código de dicho lugar para ver si mas arriba encontramos un salto condicional que evite dicho mensaje, lo cual encontramos un poco mas arriba, e incluso varios saltos despues de varias llamadas a otros procesos.
Aqui ya podemos probar varias posibilidades:
La primera, la mas facil, probar a cambiar el valor de los saltos JNZ (75h) por JZ (74h) ó vicerversa, ó forzar siempre el salto cambiandolos por JMP (EBh), para que nunca pase por el mensaje de versión DEMO, con esto quizas tengamos solucionado el problema y el programa a partir de dicho salto toma los valores correctos como si estuviese con la mochila puesta, si es que no vuelve a comprobarlo.
La segunda, jugar con los procedimientos y subrutinas que se ejecutan antes de las comparaciones y saltos, para que el resultado a la salida de dichas funciónes, siempre sea el bueno para que el salto se produzca ó no, en la forma que nos convenga. En este caso para entrar en la función de comparación, por ejemplo en el mas cercano al mensaje, antes de entrar en la función se mueve al registro "ax" el valor 2 (32h), seguro que este valor en la variable "ax" es parte de la función, por lo que pruebo a mover por ejemplo 0 (30h) a ver que pasa, y luego parece que el resultado en principio es satisfactorio, segun la primera prueba realizada por lo pronto ya no sale el mensa de modo DEMO al iniciar los modulos (cuestión de hacer mas pruebas con distintos valores y registros que intervenga en el resultado final).
Pero subamos hasta el principio de dicho procedimiento para ver si encontramos desde donde se llama a este otro, por si podemos evitar el procedimiento completo, ya que un programa registrado o con su mochila quizás no pase nunca por el procedimiento donde se decide el mensaje de versión demo.
En el IDA tenemos el codigo desensamblado muerto, ¿pero como encontramos el valor hexadecimal correspondiente dentro del archivo del ejecutable?, pues muy facil. Cuando estamos en la ventana de desensamblado seleccionamos encima del codigo de salto, y pulsamos en menu View -> Open subviews -> Hex dump, y con esto nos pasamos al lugar correspondiente de la ventana hexadecimal del dumpeado. Aqui identificamos por ejemplo el salto JNZ (75 en hexadecimal),
tomamos nota o seleccionamos y copiamos (Ctrl+Insert) un trozo de valores hexadecimales junto a dicho valor 75h,
y acto seguido abrimos un editor hexadecimal para hacer una busqueda de dichos valores,
con lo que una vez localizados (nos aseguramos que el trozo de codigo seleccionado no lo volvamos a encontrar en otros lugares del código, para evitar equivocarnos de sitio al parchear)
y ya solo es cambiar por ejemplo el 75 por 74 ó por EB segun nos convenga, guardamos los cambios y a probar el nuevo ejecutable (antes debemos guardar una copia del original, por si el resultado no es satisfactorio y tenemos que seguir probando en otros valores).
Saludos.
Y cualquier duda por aqui seguiremos.
Con una primera observación, nos fijamos en lo siguiente:
El programa se inicia con el NC.COM, el cual lista todos los modulos ejecutables que encuentra en la carpeta EXE, y todos los ejecutables encontrados en dicha carpeta (aunque no tengan nada que ver con las herramientas en si de esta aplicación), se incluyen en las opciones del menu principal que es el modulo USR.EXE, (de no encontrar al usr.exe el programa inicial se queda parado buscando a este otro insistentemente, porque es el modulo que controla el resto de la aplicación, y es el que inicia los diversos modulos de los que se compone el programa, segun se seleccionen, y que se dividen en varios ejecutables idependientes (pero que no corren si no son llamados desde el usr.exe).
El USR.EXE es el encargado de mostrar ó no el mensaje de "ATENCION, ¡ Entra en modo DEMO !", lo cual se debe producir como consecuencia de comprobar directamente los datos de la mochila ó bien como resultado de verificar el contenido de algun registro sobreescrito con el resultado del proceso de verificación previa.
Por esto vamos a centrar nuestro primer objetivo en dicho modulo para ver que sucede si evitamos dicho mensaje de modo DEMO.
Herramientas a usar:
* IDA "The Interactive Disassembler".
* Editor Hexadecimal.
--------------------------------------------
Manos a la obra:
Herramienta IDA.
Iniciamos el IDAG.exe, pinchamos en "Nuevo" y seleccionamos el USR.EXE,
aceptamos la propuesta de analisis que nos ofrece IDA por tratarse de un programa de MSDOS
esperamos a que el IDA termine de analizar el programa. Cuando el icono del circulo amarillo existente en la barra de herramientas se pone en verde , ya podemos actuar nosotros.
Lo primero que vamos a buscar es nuestro mensaje de "ATENCION ¡ Entra en modo DEMO !", en la ventana de "string" que abrimos pulsando las teclas mayuscula+F12 y para localizarlo rapidamente vamos a buscarlo con el menu Search (Alt+T), escribimos el texto DEMO, pulsamos OK, y ya lo tenemos localizado.
Seleccionamos la linea donde se encuentra dicho texto, y hacemos un doble click de ratón sobre ella, para que nos lleve a la ventana del desensamblado donde se encuentra dicho texto, y aqui si pasamos el puntero del ratón por encima del comentario de dicha linea, nos muesta información de la linea de codigo en la que se mueve dicho valor a alguna variable ó registro para su posterior tratamiento, y si pulsamos de nuevo doble click sobre dicho comentario, nos va a llevar a dicho lugar del desensamblado.
Aqui ya tenemos donde se cogen los valores del mensaje, y estudiamos el código de dicho lugar para ver si mas arriba encontramos un salto condicional que evite dicho mensaje, lo cual encontramos un poco mas arriba, e incluso varios saltos despues de varias llamadas a otros procesos.
Aqui ya podemos probar varias posibilidades:
La primera, la mas facil, probar a cambiar el valor de los saltos JNZ (75h) por JZ (74h) ó vicerversa, ó forzar siempre el salto cambiandolos por JMP (EBh), para que nunca pase por el mensaje de versión DEMO, con esto quizas tengamos solucionado el problema y el programa a partir de dicho salto toma los valores correctos como si estuviese con la mochila puesta, si es que no vuelve a comprobarlo.
La segunda, jugar con los procedimientos y subrutinas que se ejecutan antes de las comparaciones y saltos, para que el resultado a la salida de dichas funciónes, siempre sea el bueno para que el salto se produzca ó no, en la forma que nos convenga. En este caso para entrar en la función de comparación, por ejemplo en el mas cercano al mensaje, antes de entrar en la función se mueve al registro "ax" el valor 2 (32h), seguro que este valor en la variable "ax" es parte de la función, por lo que pruebo a mover por ejemplo 0 (30h) a ver que pasa, y luego parece que el resultado en principio es satisfactorio, segun la primera prueba realizada por lo pronto ya no sale el mensa de modo DEMO al iniciar los modulos (cuestión de hacer mas pruebas con distintos valores y registros que intervenga en el resultado final).
Pero subamos hasta el principio de dicho procedimiento para ver si encontramos desde donde se llama a este otro, por si podemos evitar el procedimiento completo, ya que un programa registrado o con su mochila quizás no pase nunca por el procedimiento donde se decide el mensaje de versión demo.
En el IDA tenemos el codigo desensamblado muerto, ¿pero como encontramos el valor hexadecimal correspondiente dentro del archivo del ejecutable?, pues muy facil. Cuando estamos en la ventana de desensamblado seleccionamos encima del codigo de salto, y pulsamos en menu View -> Open subviews -> Hex dump, y con esto nos pasamos al lugar correspondiente de la ventana hexadecimal del dumpeado. Aqui identificamos por ejemplo el salto JNZ (75 en hexadecimal),
tomamos nota o seleccionamos y copiamos (Ctrl+Insert) un trozo de valores hexadecimales junto a dicho valor 75h,
y acto seguido abrimos un editor hexadecimal para hacer una busqueda de dichos valores,
con lo que una vez localizados (nos aseguramos que el trozo de codigo seleccionado no lo volvamos a encontrar en otros lugares del código, para evitar equivocarnos de sitio al parchear)
y ya solo es cambiar por ejemplo el 75 por 74 ó por EB segun nos convenga, guardamos los cambios y a probar el nuevo ejecutable (antes debemos guardar una copia del original, por si el resultado no es satisfactorio y tenemos que seguir probando en otros valores).
Saludos.
Y cualquier duda por aqui seguiremos.