problemas mochila hardlock

Iniciado por trepana, 27 Octubre 2010, 13:17 PM

0 Miembros y 1 Visitante están viendo este tema.

trepana

dispongo de un programa antiguo msdos 16 bits que funciona correctamente en xp que va con mochila hardlock por puerto LPT, dentro en el chip pone 9447 FAST E-Y-E.

al cambiar a un pc nuevo, sin puerto LPT, logicamente no funciona la mochila, instalando un tarjeta PCIe con puerto LPT tampoco funciona ya que no hay manera de que use los puertos tradicionales del LPT que son ES 378 e IRQ 7.

llamo al fabricante del software y me dice, que me toque los huevos, que no me da ni llave usb ni el programa sin mochila, que esta descatalogado.

he probado con el pc viejo, el HASPHL2007, pero no me hace el dump por ser una llave demasiado vieja. Tambien he probado de mirar el codigo maquina con el OLLYDBG, pero soy incapaz de encontrar donde se hace la comprobacion de la mochilla.

acepto cualquier tipo de sugerencia, gracias.

LSL

como el programa está descatalogado, subelo el instalable a algun upload como http://www.mediafire.com, ó  http://www.myupload.dk/ (que son gratuitos), y nos pasas el enlace, a ver que se puede hacer, sin compromiso.
Saludos.

LSL.

trepana

#2
http://www.mediafire.com/?dasme1kk3ujtfko

lo he puesto aqui en un rar, hay dentro un txt con las instrucciones de instalacion, como ver si detecta la mochila y lo poco que he podido averiguar.

estare al tanto por si teneis cualquier duda sobre el programa

gracias por el interes

LSL

#3
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.
Saludos.

LSL.

karmany

¡¡Uho!!, excelentísimo trabajo LSL.
congratulations!

Tengo guardado tu texto e imágenes.

LSL

Hola karmany,

Celebro te guste el trabajo.   :D

Como caso practico, me ha parecido interesante realizarlo a fin de animar a los nuevos foreros, para que vean que con solo aprender básicamente a utilizar las herramientas adecuadas, y una nociones tambien elementales y básicas sobre comparaciones y saltos condicionales, las cosas pueden ser más facil de lo que parecen.
Saludos.

LSL.

MCKSys Argentina

@LSL: Verifica los demas EXEs. Hay tambien codigo que debe parchearse (Editor.exe, etc).

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


LSL

#7
Hola MCKSys Argentina.

Cambiando un solo bit del USR.EXE, en una de las subrutinas previas al mensaje DEMO, comprobado se soluciona todo,

call    sub_164
or      al, al
jz      loc_23ED

si conseguimos que AL salga con el valor 1 (no problem) ;D

(es aconsejable hacerlo dentro de la subrutina, pues la misma es llamada desde 2 lugares distintos, y con el código de ejecución posterior muy parecidos).

Y no le puedo dar mas pistas a trepana :), que ya le puse que fuera probando y subiendo por el código en la zona caliente, para que practique y encuentre la mejor de las posibles opciones.

p.d. para evitar otros errores al guardar o leer archivos con los que trabaja la aplicación, deben de existir las subcarpetas
ABC\
CAR\
DXF\
EXE\
GRI\
HELP\    
ISO\
LIN\
PCX\
TXT\
dentro de C:\NASCAD\




Saludos.

LSL.

trepana


Bueno, pues ya tengo trabajo para estas noches, me pongo a bajar las aplicaciones que me comentais y seguir cuestros pasos.

Es cierto que elimine las subcarpetas de datos para evitar aumentar el tamaño del rar de la aplicacion, siento que os haya provocado alguna dificultad.

En fin infinitas gracias porque no sabia ni por donde empezar, si me quedo enganchado ya os pedire ayuda otra vez y si lo saco os lo comento de todas formas.

Me habeis sacado de un apuro grande, ya me veia comprando un pentium 4 con puerto paralelo integrado para poder seguir usando el programa.

trepana

Lo consegui.

Infinitas gracias LSL por la ayuda prestada, sin tu ayuda no lo hubiera conseguido nunca, eres una autentica maquina.