|
|
 |
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.
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 |
|
|
|
|
|