Pantsu Posted September 28, 2013 Report Share Posted September 28, 2013 Hola usuarios, actualmente ahi muchas formas de extraer cosas de otros juegos, la mas codiciada actualmente es el metodo del QuickBMS. Por eso os vendré a traer tutoriales sobre como fabricar los scripts. Ire haciendo un poco cada dia ya que tengo otras cosas que hacer que matarme horas en hacer un tema.. Asi que dejaré unos primeros pasos. Lo primero que mencionare son los programas necesarios: Un editor HEX, yo actualmente uso HxD. El QuickBMS. Un editor de texto como puede ser Wordpad o Notepad. Una calculadora que soporte HEX como la que viene incorporada en Windows. Yo lo hare en un .pak que tengo por aqui de un MMORPG (cada mmorpg usa diferentes tipos y codificaciones, yo hare una guia basica, el resto es practica y tiempo para llevarlo a cabo.) Si miras a la derecha podras ver un texto que es algo leible. (Etcaura.tex, Etccursor.tex, Etcmahoujin.tex, Etcenv2.tex, and Etckaze.tex) Eso es en el mio, cada uno tiene diferentes. Si usamos la cabeza sabremos que en ese archivo se encontraran al menos 5 archivos y que al descompilarlos se colocaran en una carpeta llamada etc. Empecemos mirando la cabezera de este archivo y comencemos con los primeros 4 bypes. Ahi tenemos 05 00 00 00 - Cuando trabajas con archivos de videojuegos de ordenador a menudo sabras leer los numeros a la inversa, es decir el numero anterior no podria ser el 05 00 00 00 pero si que podria leerse como 00 00 00 05 o 5. ¿Aun no lo entendeis? Veamos. Si recordamos antes vimos 5 nombres de archivos (en mi caso) y nuestros primeros 4 bytes de nuestro archivo equivalen a 5, por lo que podemos deducir que la cantidad se almacena en los primeros 4 bytes de nuestro archivo. Los datos se almacenan en grupos: De 4 bytes (long), 2 bytes (short) y de 1 byte (byte). Sabiendo esto tendriamos echo la primera parte de nuestro script. get FILES long Esto nos dice en QuickBMS que lea un valor long (de 4 bytes, mencionado anteriormente) y almacenarlo en archivos variables. Los siguientes 4 bytes, comencemos: 74 00 00 00, no son necesarios para el script extractor, pero se representa el tamaño total del siguiente paso. ¿Como? Observen la imagen y miren la longitud: La siguiente linea y mas común en los scripts actuales de QuickBMS es la siguiente, en este script lo lleva y en la mayoria: get HEADERSZ long Esto almacena el tamaño del encabezado en la variable headersz. Bien ahora tenemos 2 bytes más antes del nombre de archivo. El 0C 00 es de 2 Bytes, por lo que es conocido como short. Pero, ¿Que representa 00 0C? Si seleccionamos todo el nombre del archivo en el editor hexadecimal nos mostrara una longitud de C. Hemos encontrado la longitud del nombre por lo cual podemos hacer la siguiente linea de nuestro script que seria la siguiente: get NSIZE short Esto almacena los 2 bytes en la variable nsize que este representa la longitud del nombre. Ahora vamos con la linea para guardar a la hora de exportar, con el QuickBMS es tan simple como poner una sola linea que seria la siguiente: getdstring NAME NSIZE Esto es como decir almacenar una cadena (con solo una palabra) en la variable name y la longitud es igual a la variable nsize. Ahora vamos con los siguiente 4 bytes despues del nombre: 7C 00 00 00 - Ahora ya sabemos el nombre del archivo, por lo que ahora tenemos que saber el tamaño y ubicacion en el archivo. 7C no es un gran numero para el tamaño del archivo, a ver qué pasa si vamos al desplazamiento 7C. En HxD pulsais Ctrl+E y poneis tanto en posicion inicial como en posicion final el 7C. Al darle a aceptar te deberia llevar a este sitio (en mi caso): Esto se ve bien ahora mismo.. se ve como un archivo de formato .IMG0. Bien, vamos con la siguiente linea: get OFFSET long Esto almacena los 4 bytes como variable offset - Vamos con los siguiente 4 bytes que serian:70 10 00 00 ¿Recordais que en cuando trabajas con archivos de videojuegos se hace el numero a la inversa? Aqui tambien, ahora mismo el 70 10 00 00 se podria traducir como un numero exageradamente alto, bien.. Hagamos la inversa: 00 00 10 70 o mejor dicho, 1070. Mas corto verdad? xD Lo siguiente y de nuevo le damos a Ctrl+E y en Posicion Inicial (Start Offset - Si tambien lo tienes en ingles) dejandolo de la siguiente manera: Mirad lo que es el codigo hexadecimal, esta todo perfectamente colocado. Veo el TrueVision-XFILE que es un final clasico para los archivos .tga y tambien terminamos justo antes del .IMG que fue el comienzo de nuestro primer archivo. Eso suele significar que hemos encontrado nuestro tamaño, y con lo cual lo pondremos en la siguiente linea de nuestro script de esta forma: get SIZE long Esto almacena los 4 bytes en la variable size. - Bien ahora tenemos 2 bytes y luego el siguiente nombre de archivo que mencione al principio. Veamos los numeros anteriores son 0E 00 que a la inversa seria 00 0E o la letra E. Bueno los últimos 2 bytes que teníamos antes de un nombre que el nombre tamaño permite ver si todavía esta en lo correcto. Como veis al longitud de este archivo es.. la letra E. Debemos encontrar donde se repite el patron en la cabecera y todo lo que necesitamos para extraer los archivos. Ahora ya casi podemos acabar nuestro script y nuestro extractor para este videojuego. Cada vez que comienza el patron, mejor dicho un bucle el cual seguira hasta que no haya archivos en el paquete. En resumidas cuentas esta linea lo que hace es que descompile todo, absolutamente todo lo del paquete, y con esta linea ya casi estaria acabado el script. for i = 0 < FILES Esto ejecuta los comandos hasta i = 0 (Al estar en 0 ejecutara hasta que no quede ningun archivo) y establece los archivos. Lo siguiente viene siendo la parte final del script, el comando log que hara casi todo el trabajo del script, la linea es la siguiente: log NAME OFFSET SIZE Esto dice cual es el nombre del archivo y lo llena de los datos(archivos) a partir de la variable OFFSET y el tamaño bueno, para algo se llama SIZE, no ahi mucho que explicar de ahi, ahora la ultima linea de este script basico: next i Esto lo que hace es que valla al siguiente i, como puse anteriormente en i = 0 < FILES, esta linea lo que haria es que pase al siguiente archivo. Finalizamos ya con esto, lo guardamos como extractor.bms y ya tendriamos echo el script. Yo lo pruebo y como veis en la imagen: get FILES longget HEADERSZ longfor i = 0 < FILESget NSIZE shortgetdstring NAME NSIZEget OFFSET longget SIZE longlog NAME OFFSET SIZEnext i Esto seria el script finalizado. Saludos y espero que les haya servido. - Como dije, ahora el resto lo tendreis que aprender vosotros, sabiendo lo basico el resto con tiempo se aprende. - Con el tiempo aprendereis que ahi mas de 3 Bytes (El de 4, 2 y 1) pero por ahora, al ser lo basico creo que con esos tres os sirve para aprender lo basico, espero que os guste y gracias por leerme Oldboy, Pac092 and Metin2Hispano 3 Link to comment Share on other sites More sharing options...
morphy Posted September 28, 2013 Report Share Posted September 28, 2013 Link to comment Share on other sites More sharing options...
LORDCarlo™ Posted September 28, 2013 Report Share Posted September 28, 2013 Esperaba el dia que alguien haga una guia sobre esto muchas gracias Link to comment Share on other sites More sharing options...
SeBuenoPorfa Posted September 28, 2013 Report Share Posted September 28, 2013 thanks xD Link to comment Share on other sites More sharing options...
Akroma Posted September 29, 2013 Report Share Posted September 29, 2013 me han apuntado con 1 pistola, para que opinase, asi que dire solamente lo que pienso.GG andres, esto le servira a mucha, gente pero nadie lo pondra en practica, como pasa en estos foros. Link to comment Share on other sites More sharing options...
SeBuenoPorfa Posted October 20, 2013 Report Share Posted October 20, 2013 puedes pasarnos los archivos que empleastes en la guia porfavor? intente usar algunos de otros juegos pero no me aparecian las mismas cosas en hexadecimal que ati ya que estoy empezando con esto creo que es mejor partir de los mismos archivos que tu porfis, me seria de gran ayuda.. de verdad que quiero aprender.. Link to comment Share on other sites More sharing options...
pac Posted October 29, 2013 Report Share Posted October 29, 2013 cabron te la has mandado con todo, devuelvan le su puesto se agradece Link to comment Share on other sites More sharing options...
pac Posted December 14, 2013 Report Share Posted December 14, 2013 bueno yo lo pondré en marcha se agradece andres Link to comment Share on other sites More sharing options...
Recommended Posts