| ESTUDIO COLECTIVO DE DESPROTECCIONES Última Actualizacion: 25/10/2001 |
Programa | XAudio | Linux / GTK
Descripción | Algo simple y bastante antiguo. Habiendo reproductores gpl.......
Tipo | Reproductor de archivos mp*
Tipo de Tutorial | [X]Original, []Adaptación, []Aplicación, []Traducción
Url | http://www.xaudio.com
Protección | Serial
Dificultad | 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas | Dasm, less y biew, o cualquier cosa que encuentres, compiles y funcione.
Objetivo | Eliminar nagscreen y modificar el about para simular la licencia.
Cracker | Mr Jade [WkT!]
Grupo | Whiskey Kon Tekila
Fecha | 22 de Diciembre de 2000
INTRODUCCION
Saluos ... Tema nuevo, vida nueva. A los que useis linux no os digo nada, porque ya sabeis de que hablo, pero a los pobres infelices que resisten ante los pantallazos de su querido güindous, no sabreis lo que es controlar algo hasta que no toqueis linux. Por eso como introducción esta vez, y que sirva de precedente, solo dire.... a la mierda los sistemas operativos que fallan. No le veo sentido a seguir utilizando algo que no da mas que problemas teniendo al lado algo que me aporta soluciones. Inconveniente, que hay que currar mas, hay que leer mas, etc.. . y a veces no siempre lo consigues... . Bueno, eso tambien pasa en windoze, y nadie se queja. Bien, centrandonos ya en el tema, yo uso una redhat, por lo que quizas algun path cambie en vuestra distri de linux. A estas alturas eso no sera problema no?. Las herramientas que vamos a usar para crackear el programa son estas: dasm : LINUX DISASSEMBLER 2.0799. script de shell hecho por SiuL+Hacky en 1999 biew o cualquier otro editor que no añada caracteres de texto a archivos binarios (el VI lo hace) Una vez crackeado el programa pasaremos a programar el crack. Las herramientas que utilizaremos entonces se explicaran mas adelante. NOTA: la version del programa que se va a crackear corresponde a la comprimida con targa y zip. Su nombre completo es xaudio-1.0.5.x86-unknown-linux-glibc.tar.gz, para evitar problemas con versiones en formato RPM o paquetes de cualquier otra distribucion.
BIEN, ANALIZANDO LAS HERRAMIENTAS: LINUX DISASSMBLER 2.0799
Este es el script en perl que utilizaremos para generar el codigo asm. La verdad es que hasta ahora no he podido agenciar otras herramientas, pero os aseguro que con esto se puede hacer, como vereis. /*------------------------No incluyas esta linea-----------------------*/ #!/usr/bin/perl ;############ Modifica esta linea hacia el path de perl ############ push(@INC,"/usr/lib/perl5"); require("flush.pl"); ;################################################################## ;######## LINUX DISASSEMBLER 2.0799 ;######## (C) SiuL+Hacky Jul 1999 ;######## ;######## Revision por Mr. Jade. ;######## ;######## Uso: dasm Archivo_exe Archivo_asm ;################################################################## $f_input=$ARGV[0]; $f_output=$ARGV[1]; &printflush(STDOUT, "\nCreando archivo desensamblado ..."); $return=system("objdump -d -T -x --prefix-addresses ".$f_input.">".$f_output."2"); if ($return!=0){ print "\nERROR AL ABRIR OBJDUMP $return"; print "\nUso: dasm Archivo_exe Archivo_asm"; print "\nAsegurate de que objdump esta en el path o tiene los permisos adecuados.\n"; exit(1); } open(INPUT, "<".$f_output."2"); &printflush(STDOUT, "\nLeyendo cadenas ..."); $_=<INPUT>; while (!/.rodata/){ $_=<INPUT>; } ($rubbish, $rest)=split(/.rodata/,$_,2); ($rubbish, $rest)=split(/0/,$rest,2); @numbers=split(/ /,$rest,5); $size=hex($numbers[0]); $starting_address=hex($numbers[1]); $end_address=$starting_address+$size; $offset=hex($numbers[3]); open(CODIGO, "<".$f_input); seek(CODIGO,$offset,0); read(CODIGO,$cadena,$size); close(CODIGO); SEARCH: while (<INPUT>){ last SEARCH if (/SYMBOL TABLE/); } if (/SYMBOL TABLE/){ &printflush(STDOUT, "\nProcesando tabla de simbolos ..."); $_=<INPUT>; while (!/^\n/){ @st_element=split(/ /, $_); $_=$st_element[$#st_element]; chop; $symbol_table{$st_element[0]}=$_; $_=<INPUT>; } } else { seek(INPUT,0,0); } while (!/\.text/){ $_=<INPUT>; } &printflush(STDOUT, "\nProcesando saltos y llamadas ..."); while (<INPUT>){ $_=~ s/0x//g; $_=~ s/<.*?>//g; $_=~s/ / /g; if (/j/){ ($direccion,$inst,$destino)=split(/ /,$_,3); $destino=~s/ //g; chomp($destino); $salto{$destino}.=($direccion." \; "); } elsif (/call/){ ($direccion,$inst,$destino)=split(/ /,$_,3); $destino=~s/ //g; chomp($destino); $call{$destino}.=($direccion." \; "); } } seek(INPUT,0,0); &printflush(STDOUT, "\nGuardando referencias ...\n"); open(OUTPUT, ">".$f_output) || die print "\nError al abrir archivo\n"; print OUTPUT "FILE REFERENCED\n\n"; while (!/Disassembly of section .text:/){ $_=<INPUT>; print OUTPUT; } $char="."; $counter=0; while(<INPUT>){ $counter++; if ( ($counter % 400)==0){ printflush(STDOUT,$char); if ( ($counter % 4000)==0){ printflush(STDOUT,"\r"); if ($char eq "."){ $char=" ";} else { $char=".";} } } $copia=$_; $_=~s/0x//g; $_=~s/<.*?>//ge; $_=~s/ / /g; ($direccion, $inst, $destino)=split(/ /,$_,3); if ( defined( $symbol_table{$direccion} )){ print OUTPUT "\n"; print OUTPUT "---- Funcion : ".$symbol_table{$direccion}." ----\n"; } if (/call/){ $destino=~s/ //g; chomp($destino); if ( defined( $symbol_table{$destino} )){ print OUTPUT "\n"; print OUTPUT "Referencia a funcion : ".$symbol_table{$destino}."\n\n"; } } if ( defined( $salto{$direccion} )){ print OUTPUT "\n"; print OUTPUT "Referenciado en salto desde ".$salto{$direccion}."\n\n"; } if ( defined( $call{$direccion} )){ print OUTPUT "\n"; print OUTPUT "Referenciado en llamada desde ".$call{$direccion}."\n\n"; } if (/\$/){ ($instruccion, $operand)=split(/\$/,$_,2); if (!/push/){ ($operand, $rest)=split(/\,/,$operand,2); } chomp($operand); $offset=hex($operand); if ( ($offset <= $end_address) && ($offset >= $starting_address ) ){ $auxiliar=substr($cadena, $offset-$starting_address); $length=index($auxiliar, pack("x") ); $auxiliar=substr($auxiliar, 0, $length); $auxiliar=~s/\n//g; print OUTPUT "\n"; print OUTPUT "Posible referencia a cadena:"; print OUTPUT "\n\"$auxiliar\"\n\n" } } print OUTPUT $copia; } close(INPUT); close(OUTPUT); print "\n"; system("rm ".$f_output."2"); /*--------------------- Esta tampoco ---------------------*/ Para instalar el desensamblador en vuestro linux, los pasos son faciles, se corta y pega en un archivo de nombre dasm al que luego seteamos los atributos como solo ejecutable por usuario (o cada uno lo que quiera.. yo en concreto y por temas de seguridad recomendaria que solo el root lo pueda ejecutar..mas que nada por el tamaño de los archivos que genera) o como querais, y ejecutar. (si quereis instalarlo solo hay que copiarlo al directorio /usr/local/bin, o /bin . Bueno, como podreis ver el uso es muy sencillo: dasm mxaudio mxaudio.asm y ya habremos obtenido nuestro desensamblado del ejecutable. Primer ostion, 13mb de archivo asm... uff.. que miedo. BIEW Como decia antes, no importa joe o cualquier otro editor rapido. Tampoco importa que sea un editor para las X, ya que el programa que vamos a crackear es para entorno grafico, la unica condicion a tener en cuenta es que algunos editores (como el vi) añaden caracteres o se vuelven locos con los archivos binarios. Otro buen ejemplo es biew, similar al hview al que todos estamos acostrumbrados a ver en windous. Biew ofrece la posibilidad de ver el desensamblado, lo cual es una ventaja.
TOMA DE CONTACTO CON EL PROGRAMA
Bien, ejecutamos el programa, aparece la nag, pulsamos sobre el boton de introducir licencia, y pulsamos ctrl+d, ponemos un bpx GetDlgItemTextA.......... mm no no, esta ya no es la formula. Existe mucha diferencia entre el funcionamiento del api de windows y el del linux, asi como tb es grande la diferencia entre el codigo ASM. Pero eso lo veremos mas adelante, segun entremos en materia. Ahora vamos a ejecutar el programa y a ver que es lo que hemos instalao en el pc.... Cierto, aparece la nag diciendo que para que usar un prg GPL o freeware pudiendo pagar por usar este, asi que este tipo de nags si que sobran. Pulsamos para ver que tipo de datos tenemos que introducir.. mm un numero de serie.. nada, olvidao. Elegimos la opcion de probar el programa, y comprobamos como todas las funciones estan habilitadas. Solo que en el About aparece un UNREGISTERED en mayusculas que pega un cantazo ..... Muy bien, visto el percal, ya que todas las funciones estan habilitadas una buena solucion es quitar esa nag y solucionar el tema del about. Hecho esto, crackeao el prg...
AL ATAKERL
Supongo que no ha habido ningun tipo de problemas a la hora de desensamblar el codigo. Si todo ha ido bien, tendremos un archivo ASM de poco mas de 13 mb, que tendremos que estudiar.. pero por si acaso vamos a ir adelantando. Veamos, el titulo de la ventana de la nag... un "Xaudio Shareware". Abrimos el archivo ASM y buscamos .... mm bueno, antes de buscar veamos que es exactamente lo que tenemos en ese archivo. Para editar semejante muerto de archivo, usaremos less, que permite una rapida edicion y un sistema de busqueda de cadenas mucho mas que valido para lo que vamos a hacer. En la shell ponemos : less mxaudio.asm o nombre del archivo asm... El archivo es tipo ELF, i386. Esto mas o menos traducio al lenguaje de los que estan acostubrados a un win, el tipo EXE (PE, NE, etc..) y el tipo de micro segun las instrucciones que vaya a ejecutar el programa. Vemos tb una cabecera donde estan definidas las secciones del ejecutable junto a sus atributos, ademas de la cabecera de secciones dinamicas.. etc.. todo esto es demasiado como para explicar en este tutorial, asi que me limitare a observar las cosas que creo que pueden interesarnos nada mas (excepto a ctors y dtors, esas "secciones" contienen el codigo que se ejecuta antes de y justo despues de la ejecucion del propio prg.. algun dia seran nuestra primera opcion..). Si avanzamos en el archivo, mas adelante vemos el desensamblado por secciones.. pero como no vamos a analizar la ejecucion, pasamos directamente a la accion buscando el titulo de esa ventana NAG que queremos eliminar. Para eso el comando en "less" que nos permite realizar una busqueda es la barra / . Ponemos "/Xaudio Share" (al loro con las mayusculas, case sensitive) en LESS y esperamos un pokitin (13mb) . Esto es lo que aparece tras la busqueda. ......... Posible referencia a cadena:"Xaudio Shareware" <---- Nuestra cadenita 0x0806aa94 push $0x817d417 Referencia a funcion : XtVaCreatePopupShell <-- Esta funcion es la que prepara la creacion de la ventana. 0x0806aa99 call 0x0804ebe4 0x0806aa9e add $0x20,%esp 0x0806aaa1 mov %eax,%esi ........... A ver, esto os recuerda al W32dasm? jeje, mas o menos el formato es el mismo, lo que lo hace facil de leer. Bueno, ahi esta nuestra cadena y la llamada a la funcion que prepara la ventana. Ahora es cuestion de ir hacia atras hasta anular la llamada a dicha funcion. Facil no?.. pues agarraos... Justo encima de este codigo vemos a traves de que saltos hemos ido llegando hasta aqui. ...... Referenciado en salto desde 0806aa7c ; 0x0806aa8d push %ebx 0x0806aa8e mov 0x81a551c,%eax 0x0806aa93 push %eax Posible referencia a cadena:"Xaudio Shareware" ........ Volvemos hasta la direccion 0806aa7c y un poco mas arriba vemos que hemos llegado hasta aqui debido a este otro salto: .... Referenciado en salto desde 0806aa6d ; 0x0806aa7a test %ebx,%ebx 0x0806aa7c je 0x0806aa8d ........ Pues nada, vamos a la 0806aa6d..... ....... Referenciado en llamada desde 08052b26 ; 0x0806aa54 push %ebp 0x0806aa55 mov %esp,%ebp 0x0806aa57 push %edi 0x0806aa58 push %esi 0x0806aa59 push %ebx 0x0806aa5a push $0x0 0x0806aa5c push $0x1 0x0806aa5e push $0x81b7a9c 0x0806aa63 push $0x0 0x0806aa65 push $0x81b7840 0x0806aa6a mov 0x8(%ebp),%ebx 0x0806aa6d jmp 0x0806aa7a ........ Por fin! dejan de ser saltos y tenemos una llamada desde 08052b6. Ahora que ya hemos llegado a la llamada de la funcion veamos es codigo y en que condiciones realiza la llamada. .......... Referencia a funcion : XtRealizeWidget 0x08052b09 call 0x0804fbd4 0x08052b0e mov 0x81cba3c,%eax 0x08052b13 push %eax 0x08052b14 call 0x08064f34 0x08052b19 add $0xc,%esp 0x08052b1c test %eax,%eax 0x08052b1e jne 0x08052b2e <----- No, no, no caeremos en la tentacion del je por jne.. no... 0x08052b20 mov 0x81cb8a8,%eax 0x08052b25 push %eax 0x08052b26 call 0x0806aa54 <------- Desde aqui llama a la creacion de la nag 0x08052b2b add $0x4,%esp Referenciado en salto desde 08052b1e ; <--- aqui saltamos si la comparacion de 08052b1c nos lo permite. 0x08052b2e push $0x0 0x08052b30 mov 0x81cba74,%eax 0x08052b35 push %eax Referencia a funcion : XSync ........... Ahora nos paramos y analizamos un poco este trozo de codigo. En 08052b26 tenemos la llamada a la funcion que muestra la NAG, y dos instrucciones mas arriba un salto condicional. Bueno, puede que tengamos suerte o puede que no. No se puede uno saltar una condicion asi porque si. A veces la prueba-error no sirve mas que para perder el tiempo, y con un poco suerte datos, tal vez algun que otro archivo si el programa por casualidad detecta que estamos saltadonos pasos importantes. Para eso lo que vamos a hacer ahora es analizar que sucede cuando se pulsa sobre el boton "Try It" para observar como sale el prg de la llamada a esa funcion. Para esto, es necesario un poco de teoria sobre GTK. Bien, las ventanas en GTK se construyen a base de añadir controles, y conectarlos a funciones. Así, pues, la mayoria de los elementos (widgets) que constituyen los controles en GTk son posibles contenedores de otros objetos. Por ejemplo, a una ventana le podemos añadir una imagen, ya que la ventana es uno de los controles contenedores. Pero con esto ya hemos completado toda posibilidad de añadir widgets a dicha ventana. Para eso, en llugar de añadir la imagen a la ventana añadimos un control que acepte varios controles incluidos, como es el caso de VBOX o HBOX. Estos controles son contenedores que ordenan los objetos contenidos de forma vertical y horizontal respectivamente, y asi podremos añadir mas de un control a la ventana (perdonad la chapa.). Por otro lado, para que uno de estos widgets reaccione ante la pulsacion del raton sobre el, es necesario conectarle una funcion. Estas funciones se denominan CallBacks. Vamos a ver como se construye dicho boton "Try It". Ponemos "/Try It" para buscar ese texto en el archivo asm y el editor se detiene en este punto: ............. 0x0806ab6c mov 0x81a9d84,%eax 0x0806ab71 push %eax Posible referencia a cadena:"Try It" 0x0806ab72 push $0x817d434 <----- direccion de la cadena con el texto del boton Referencia a funcion : XtVaCreateManagedWidget <--- Crea el control 0x0806ab77 call 0x0804fdd4 0x0806ab7c add $0x50,%esp 0x0806ab7f push %esi 0x0806ab80 push $0x806ac06 <---- direccion de la funcion a conectar al boton.(CallBack) 0x0806ab85 push $0x81b732b 0x0806ab8a push %eax Referencia a funcion : XtAddCallback <------------- Aqui es donde se asigna la funcion al boton. 0x0806ab8b call 0x0804f0f4 ................ Lo que realmente nos interesa es el codigo que esta detras de ese CallBack, por lo que vemos lo que hay en la direccion 806ac06: ............. 0x0806ac06 push %ebp 0x0806ac07 mov %esp,%ebp 0x0806ac09 mov 0xc(%ebp),%eax 0x0806ac0c push %eax Referencia a funcion : XtDestroyWidget <---- Aqui lo que se hace es destruir el widget window, la ventana nag. 0x0806ac0d call 0x0804f694 0x0806ac12 mov %ebp,%esp 0x0806ac14 pop %ebp 0x0806ac15 ret <----Vuelta pa'tras .............. El boton "Try It" lo unico que hace es detruir la ventana NAG. Como podemos ver podemos cargarnos el call a la nag ya que tanto si la condicion hace que se muestre la ventana, como si no, la ejecucion del programa continua por el mismo camino, llegando a la instruccion 08052b2e. Bueno, pues podemos modificar esa instruccion , o buscar cualquier otra manera de evitar esa NAG. para mi la solucion mas elegante es ya que no se va a tener en cuenta la comparacion, para que hacerla? asi que en lugar de modificar el salto, añadiremos un salto en donde esta la instruccion test %eax, %eax . Solo queda esperar que el programa no realice ningun tipo de checksum para comprobar modificaciones, y en teoria todo debe funcionar.
UNA VEZ ABIERTA LA PUERTA
Ahora, como modificamos el archivo ejecutable? donde esta en el archivo esa direccion virtual 8052b1c? Volvemos a estudiar de nuevo el archivo ELF?. Toda la informacion sobre los archivos ELF es de dominio publico. Asi que si piensas meterte en esto, ya puedes ir buscadola, o esperar que la vaya explicando poquito a poquito. No pondre la direccion de donde bajar esa informacion porque yo no soy google ni altavista, todo esta ahi, solo hay que saber buscar. Existe una manera mas sencilla aun que todo eso, que consiste en buscar la cadena de caracteres dentro del archivo , y luego modificarla, pero esto presenta el inconveniente de que no todos los caracteres son ascii, por lo que deberas saber los codigos de los caracteres para introducirlos como cadena de busqueda si es que el programa que utilizas para editar te los acepta (que esa es otra, que estamos editando binarios....). Aun existe una mejor solucion, que es usar un editor de ficheros binarios como BIEW, que calcula el solito los offset virtuales y te olvidas de tener que andar con la calcu. Ea, pues, abrimos el mxaudio con el biew, y buscamos esa direccion de memoria. ¿Como se hace?, ......¿como se pone un condon? eso lo habeis leido en un tutorial?, pues hala, a leeros la ayuda del biew, o a inventarosla. 0x08052b14 call 0x08064f34 0x08052b19 add $0xc,%esp 0x08052b1c test %eax,%eax <-- Sustituimos esta instruccion por jmps 0x08052b2e 0x08052b1e jne 0x08052b2e 0x08052b20 mov 0x81cb8a8,%eax 0x08052b25 push %eax Los cambios realizados son : 0x08052b1c 85 C0 test %eax,%eax ---- por ---- 0x08052b1c EB 10 jmps 0x08052b2e Para los que no esten acostumbrados al codigo ASM de linux, JMPS es un salto incondicional en un rango de 255 bytes alrededor de la direccion actual. Salimos del editor mientras terminamos de comernos la uñas esperando que funcione, ejecutamos el maldito programa... y sorpresa, todo a funcionado. Normal, podemos pensar.... estamos en linux... hehe .
Y EL UNREGISTERED
Bueno, es lo unico que nos queda pendiente. Editamos el archivo con BIEW de nuevo, y buscamos la cadena UNREG (no os tendre que recordar que es un archivo binario no?). Esto es lo que aparece: UNREGISTERED REGISTERED TO: El caracter que separa ambas cadenas es un 0, como en windows, caracter NULL que determina el final de la cadena.Asi que disponemos de dos huecos pelin justos para modificar este Texto. Si queremos cambiar longitudes de cadenas, sera necesario actualizar las referencias en el resto del ejecutable, por eso vamos a modificar esas cadenas sustituyendolas por otras que sean de meno o igual longitud: En mi caso... Mr.Jade-WkT! en donde se encuentra la cadena UNREGISTERED Cracked by: en donde se encuentra la cadena REGISTERED TO: Con esto queda terminado la parte que corresponde al crackeo del programa. Ahora al ejecutarlo no aparece la nag, y en el about aparece nuestro nombre. Prueba superada. Ahora solo nos queda hacer el crack. Para eso, apuntamos los desplazamientos del archivo en los que hemos escrito ambas cadenas, y en donde hemos modificado el salto en cuestion.
NO, SI AL FINAL APRENDEREMOS A PROGRAMAR
Por lo menos, es uno de los objetivos! ;). Vamos a hacer el crack. Para esto lo importante es tener en cuenta compatibilidades a la hora de distribuirlo, ya que cada uno se monta su linux a su medida, no todos tenemos las mismas librerias. Como solucion he optao por ponerme al nivel de xaudio, y pensar.. si xaudio necesita GTK para ejecutarse, necesita soporte GTK funcionando, asi que el crack puede in GTK. Pero luego he pensao.. les tengo que explicar a estos como se hace el crack entero en GTK y me muero.. asi que nada, a C, y en shell. Antes de empezar a tocar nada, lo importante es tener en cuenta los cambios que se van a realizar al programa. Para eso, antes de modificar el ejecutable mxaudio, habremos hecho una copia de segurirad. Por si acaso no hemos apuntado los desplazamientos y los valores que hemos modificado, simpre podremos utilizar cmp ("man comp" para mas ayuda) para generar un archivo de texto con las diferencias entre ambos archivos. En la shell escribimos lo siguiente: $ comp -l mxaudio mxaudio.bak > cambios.log En cambios.log tenemos una lista con los bytes diferentes en cada uno de los archivos, asi como los offsets dentro del archivo. Ojo con esto porque determinados caracteres no los va a comprender, y va a dar resultados erroneos, pero nos servira para obtener los offsets dentro del archivo, y los bytes ascii que hayamos modificado. El siguiente paso es hacer un pequeño programa en C que sea capaz de modificar el fichero original parcheandolo con los nuevos valores. Despues ya colocaremos ventanas si creemos necesaria la parafernalia. Tendremos que tener en cuenta una sola cosa mas a la hora de situarnos en el archivo en los desplazamientos. Debemos situarnos un byte antes de lo que nos devuelve cmp para realizar bien las modificaciones. /*----------------------- CORTA POR AKI---------------------------*/ // Nombre de Archivo: mxaudiocrack.c #include <stdio.h> //para acceso a archivos.. void Banner () { printf("\n\n"); printf ("*------------------------------------------------------*\n"); printf ("*-- Crack para Xaudio 1.0.5 By Mr. Jade[WkT!] --*\n"); printf ("*-- www.xaudio.com kickme.to/wkt --*\n"); printf ("*------------------------------------------------------*\n"); printf ("*-- Uso: Copia este archivo en el directorio --*\n"); printf ("*-- donde se encuentra el ejecutable mxaudio --*\n"); printf ("*-- y ejecutalo. --*\n"); printf ("*------------------------------------------------------*\n"); printf ("*--------- WkT! : Kickme.to/wkt ---------*\n\n"); } int main (int argc, char * argv[]) { char *path_archivo = "./mxaudio"; FILE *Archivo; Banner (); if ((Archivo = fopen (path_archivo, "r+b")) != NULL) { fseek (Archivo, 43804, 0); //offset de la intruccion TEST %EAX, %EAX fputc(235,Archivo); // la nueva instruccion byte a byte: EB 10 fputc (16, Archivo); fseek (Archivo, 1137626, 0); //offset de la cadena UNREGISTERED fprintf (Archivo, "%s", "Mr.Jade WkT!"); fseek (Archivo, 1137639, 0); //offset de la cadena REGISTERED TO: fprintf (Archivo, "%s", "Cracked by: "); fseek (Archivo, 0, SEEK_END); //Final del archivo. fclose (Archivo); printf ("Xaudio 1.0.5 Crackeado!\n\n"); } else { printf ("Error: No se encuentra el archivo, o no se puede abrir.\n\n"); } } // Ya esta, eso es todo, que esperabas? /*----------------------- CORTA POR AKI---------------------------*/ Corta y copia esto en un archivo con el nombre mxaudiocrack.c. /*----------------------- CORTA POR AKI---------------------------*/ CC = gcc all: mxaudiocrack mxaudiocrack: mxaudiocrack.c $(CC) mxaudiocrack.c -o mxaudiocrack clean: rm -f *.o mxaudiocrack /*----------------------- CORTA POR AKI---------------------------*/ Y este otro archivo se debe llamar Makefile (controla que la M esta en mayusculas) una vez ambos archivos estan creados, pon make clean, para borrar posibles compilaciones anteriores y basurillas, y despues make, para crear el mxaudio ejecutable que deberas copiar al directorio donde esta instalado el Xaudio. Una vez copiado y en ese directorio con poner ./mxaudiocrack listo, nag eliminada y about modificado.
DESPEDIDA Y CIERRE
Y para terminar el tutorial, como no me apetece enrollarme mas, os meto otro script de shell que me han pasao, que permite sacar las referencias a cadenas del archivo asm generado por el LINUX DISSASEMBLER. ;----------------------- corta por aqui ------------------------------------ #!/usr/bin/perl ;######################################################################### ;## Extractor de SR's para archivos desensamblados por ## ;## LINUX DISASSEMBLER 2.0799 de SiuL+Hacky ## ;## -=[Kódigo de ^pRoViDoR]=- ## ;## -=[ PLUG-agrupación de usuarios y desarrolladores de software ## ;## libre de Palencia]=- ## ;######################################################################### $arg=@ARGV; $file_input=$ARGV[0]; $file_output=$ARGV[1]; $conta=0; $string='=>'; $string2='Referencia a cadena'; if($arg==0){ print "Uso de stractor v1.00==> perl stractor.pl archivoleer archivosalida\n"; } open (FHANDLE, $ARGV[0]); open(OUTPUT, ">>".$ARGV[1]); while(<>){ if (/Posible/){ $mas=<>; print OUTPUT $string2."\n"."Cadena Nº"." ".$conta." ".$mas."\n"; $conta= $conta +1; $inutil=<>; $offplus=<>; @offset= split(/\s/,$offplus); print OUTPUT "En la dirección => ".$offset[0]."\n"; }Xx } ;----------------------- corta por aqui ------------------------------------
[ Entrada | Documentos Genéricos | WkT! Web Site ]
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
(c) Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers. Si necesitas contactar con nosotros, leeestoantes e infórmate de cómo puedes ayudarnos