Ahora vamos a ver otro ejemplito del uso de debug Yo siento cierta simpatia por el debug del dos 3.30 porque es un com y como tal es facilmente modificable (en realidad es un exe convertido a .com). Pero con el sistema operativo DOS que uso ahora (porque el 3.30 no me permite manejar rigidos con particiones mayores de 30 M) Entonces copiemos al directorio que voy a usar el debug del 3.30 o de cualquier version anterior del dos. Si lo ejecutamos con: debug nos aparece: "Version incorrecta del dos" fijense que ejecuta el com del directorio actual antes que el debug.exe del dos que esta en el path. Entonces vamos a renombrarlo para poder aplicarle el debug del dos que esta en el directorio dos del path. ren debug.com flit.com (Tuve la tentacion de ponerle ddt.com pero es un chiste viejo aun para mi) debug flit.com (ahora se ejecuta el del sistema operativo con la version mas nueva) vamos a ver donde termina el programa viendo cuantos bytes cargamos, lo que esta en el registro cx. rcx 3e6f o sea que esta cargado entre 100 y 100+3e6f=3f6f ahora vamos a ver entre esas dos direcciones, adonde esta el mensaje de "Version incorrecta, etc), buscando la cadena "Versi" s 100,3e6f,"Versi" xxxx:376c <- esto es lo que aparece en mi maquina, si hago un dump de esta direccion tengo que poder leer el mensaje de error d 376c Aparece el mensaje de error y al final del mismo se ve el signo $, lo cual quiere decir que es exhibida con la funcion 09 de la int 21 ;) (oooohhhh!) Fijense que podemos hacer que desaparezca este mensaje corriendo el signo $ desde el final al principio, ya que $ marca donde termina el mensaje. Vamos a reemplazar en la posicion 376c el 56 (V) por 24 ($) e 376c 56. 24 ($) Ahora vamos a ver si lo pusimos bien haciendo un dump d 376c (tendria que aparecer "$ersion incorrecta del dos" ahora escribimos todo el zafarrancho w salimos y probamos: q flit sale al DOS sin mensaje!! pero todavia no conseguimos que funke, solo sacamos el mensaje. Vamos a tratar de encontrar en que lugar el programa pregunta al DOS que version de DOS esta usando la maquina. Tiene que hacerlo con la f 30 de la int 21. debug flit.com rcx 3e6f ;esto ya lo vimos s 100,3e6f, cd 21 ;aca estoy buscando en que lugares del programa esta la orden cd 21, que significa INT 21 . Sale un liston, del que no podemos ver las primeras posiciones. Entonces lo repetimos limitandonos hasta la direccion 800. s 100,800, cd 21 aca nos sale una lista tal como 0312 055b 069d 06ab etc Ahora vamos a desensamblar cada una de estas posiciones, para ver que funcion usa en cada caso (recordemos que antes de llamar a la interrupcion el valor de la funcion debe estar cargado en el registro ah). Para eso usamos U, pero lo hacemos un poco antes de la instruccion, para sorprender el momento donde el valor de la funcion se carga en ah. 0312 u 310 mov ah,26 ->f=26 ; no, es la f26 (merde!) 055b u 550 mov ah,40 ->f=40 ; tampoco (remerde!!) 069d u 690 mov ah,30 ->f=30! ; (LO ENCONTRE!) 06ab .... veamos con mas detalle esta parte del programa u 690 699 xor al,30 69b mov ah,30 ;aca pide la version del dos 69d int 21 69f cmp ax,1e03 ;aca la compara con el valor de ;DOS del debug ahora vamos a reemplazar mov ah,30 por mov ax,1e03, para que siempre cargue la misma version del dos. a 69b xxxx:069d mov ax,1e03 69e nop ;este nop esta de relleno, para que no ;quede 21 como una instruccion sin ;sentido w ;escribo y salgo q ahora si ejecuto flit aparece el prompt de debug (-) esperando una orden. Maravilloso!! Esto es como araņar un poco la superficie del craking, y si dijera que es craking algunos se reirian y otros me anotarian en una lista negra, pero tiene un olor a craking barbaro!! espero que les halla gustado. (continuara?)