Primer tutorial by TheSpecialist: Entendiendo ensamblador

1. Registros.

El lenguaje ensamblador no tiene "nombres de variables" como pueda tener C++ o Delphi. En vez de eso, cada CPU tiene algunos registros. Los registros más interesantes son de propósito general, porque los puedes utilizar como "variables". EL MN103S tiene 4 registros de direcciones (A0..A3) y 4 registros de datos (D0..D3). Los registros de dirección los usarás normalmente para guardar punteros y los registros de datos los usarás normalmente para guardar valores. Por ejemplo. Digamos que en Delphi tenemos una variable llamada "calcresult". Si quieres guardar el valor "3" en esta variable, y luego sumarle 4, deberías hacer lo siguiente:

calcresult:=3;
calcresult:=calcresult+4;


La variable ahora contiene el valor "7". Para hacer lo mismo en ensamblador, usaremos un registro de datos. Vamos a usar D0:

mov 3, D0 <= Esta instrucción guarda el valor "3" en el registro de datos (como si fuera una "variable").
add 4, D0 <= D0 ahora contiene "7"



Así que como puedes ver, puedes pensar en los registros de datos como "variables" para guardar valores y realizar cualquier tipo de cálculo en ellos. Ahora, puedes guardar datos en registros de direcciones también, pero la diferencia es que normalmente usarás los registros de direcciones como punteros. Digamos que tienes un puntero a una tabla y quieres guardar el resultado de nuestro cálculo anterior en el primer byte de la tabla. Lo podemos hacer así:


mov 0x50000, A0 (O si estás programando y tienes una etiqueta para la tabla, puedes usar mov #tablename, A3 por ejemplo).
movbu D0, (A0)


Bien, lo que hace esto es mover el puntero a nuestra tabla a un registro de datos, y entonces mover la variable D0 (que contiene "7"), a la dirección de memoria 0x50000. Esto se llama "Direccionamiento indirecto". Para clarificarlo:

mov 0x1000, A0 <= Esto guarda en A0 el valor 0x1000
move 0x1000, (A0) <= Esto es "direccionamiento indirecto" y mueve el valor a la dirección de memoria que está en A0 (en este caso contiene 0x1000, así que estas dos instrucciones moverían el valor "7" a la dirección de memoria 0x1000.


Ok, digamos que queremos introducir otro valor en nuestra tabla y que esta tenga 5 entradas, cada una de un byte de longitud. ¿Cómo movemos un byte a la siguiente entrada de la tabla? Simple. Puedes hacerlo de dos maneras: simplemente añadiendo 1 byte sobre A0 (dirección de memoria 1X001):

add 1, A0
movbu D0, (A0)


Lo que conseguimos es mover el contenido de la variable D0 a la dirección de memoria 0x1001. También puedes usar lo siguiente:

mov 1,D1
movbu D0,(D1,A0)


Lo que hacemos es mover el contenido de D0 a la dirección de memoria que se calcula mediante añadir el contenido de D1 a D0. D1=1 en este ejemplo y asumimos que A0 sigue conteniendo 0x1000. Esto moverá el contenido de D0 a la dirección de memoria 0x1001, que es la segunda entrada de la tabla de nuestro ejemplo.

Te habrás dado cuenta de que uso "movbu" en vez de "mov". Esta extensión "bu" significa "byte, unsigned", así que estamos moviendo un BYTE y no una palabra o palabra larga por ejemplo. Puedes usar MOVH por ejemplo (esto mueve una "sign extended half word), o solamente MOV, que mueve una palabra. Mira el manual de instrucciones para ver los diferentes tipos de "MOV".

2. Flujo de programa.

Para llamar a una subrutina usamos la instrucción "call". Por ejemplo:

call sub_1

Esta instrucción salta a la rutina "sub_1". Empieza a ejecutarla hasta que se encuentra una instrucción "ret" o "retf", las cuales dicen a la CPU que ha llegado al fin de la subrutina y que continue ejecutando a continuación de la instrucción que llamó a la subrutina. También puedes "saltar" a una subrutina mediante la instrucción "jmp". Por ejemplo:

jmp sub_1

Esto hace lo mismo que una instrucción "call". Salta a la rutina y la ejecuta. PERO con esta instrucción la rutina no va a retornar al punto de partida, sino que sigur a continuación de su finalización.

3. Estructuras IF-THEN.


En Delphi puedes programar que SI calcresult= 4 ENTONCES sub_1. En ensamblador, esto se hace mediante "comparación" de un valor con otro y "bifurcar" hacia una subrutina basándose el resultado de la comparación. Por ejemplo:

cmp 4, D0
beq sub_1


Esto compara si D0 y "4" son iguales para lanzar la subrutina sub_1. Hay muchas condiciones de comparación, por ejemplo puedes usar "menor que":

cmp 4, D0
blt sub_1


También puedes usar "no igual a" (bne), "mayor que"... mira el manual de instrucciones.

4. Operaciones aritméticas.

Puedes sumar, restar, multiplicar, dividir, AND, OR, XOR... etc los registros de datos. Mira el manual de instrucciones:

XOR 0xF,D0

Esto hace un XOR al valor de D0 y guarda el resultado en D0.

Una cosa más: estudia el manual de instrucciones, observa el código fuente y serás capaz de deducirlo casi todo. Por ejemplo:

movbu (0xF1B5),D0

Te habrás dado cuenta de que los paréntesis indican un direccionamiento indirecto. Lo que hace eso es mover el valor del byte que está en la dirección de memoria 0xF1B5 a D0.

Una cosa más para terminar: Puedes fijar/borrar bits en la memoria mediante "bset" o "bclr" y probarlos mediante "btst" y entonces bifurcar con un "beq" por ejemplo. Si tienes alguna pregunta, o no entiendes algo, pregunta aqui (en este post de EOL) y entre todos intentaremos comprender el ensamblador del controlador del lector de DVD de la XBOX360.

Una cosa más (by scener), en este documento se hace mucho hincapié en el manual del microcontrolador MN103S. Creo que sería de ayuda buscarlo por internet para complementar un poco todo esto y llevar a buen puerto este aprendizaje que tan util puede sernos, tanto para XBOX360 como para el futuro.

Y aquí el link al manual del microcontrolador.

Manual
A ver si alguien se anima a traducirlo, tiene pinta de ser interesante [risita]
scener escribió:Estoy en elloooo. [mad] [mad] [mad]


mucho vas a tener que currar si quieres traducir ese manual entero, es bastante grande

el que quiera peces que se moje el culo joder, no creo que alguien que no hace el esfuerzo suficiente para aprender algo tan necesario como es el ingles tecnico vaya a aprender ensamblador...

habra excepciones, pero lo dudo...

vamos tio, que no pierdas el tiempo traduciendo cosas, mejor dedicate a empaparte el manual bien

por cierto, una cosa es saber ensamblador y otra como piratear la 360... :)
por cierto, una cosa es saber ensamblador y otra como piratear la 360... smile_:)


Es cierto, pero si no sabes ensamblador jamás serás capaz de piratearla ;)
Gracias tio por el curro ;)
XD pues tampoco es tan diferente al codigo ensamblador del mips2000...
Vaya curro Scener ;) Impresionante.

Yo no tengo Xbox 360, entro por aquí de vez en cuando para ver que contais de la consola.

De todas formas estoy de acuerdo en lo que dice Minoco, traducir un manual es una burrada.

Yo creo que sería mas fácil y menos trabajoso dar direcciones webs donde haya manuales y ejercicios de ensamblador :-)

Yo podría traducir algo porque he estudiado algo de ensamblador pero no tengo un nivel como para estar en la scene y dedicarme a enseñar a la gente como "hackear" el firmware de la consola. XD

Un saludo ;)
Digo yo que no debería hackear cada uno su 360 y que ya saldrán utilidades que lo hagan por software en laspropias back ups, no?
Pues yo la verdad que no entiendo nada de esto
muy simple, se supone que este hombre "thespecialist" ha sido capaz de cargar backups mediante la modificacion del firmware del lector de la consola.
Es completamente ilegal publicar un firmware modificado, asi que lo mas probable es que en las proximas semanas enseñe de forma sutil y "legal" como hacerlo.
Este es el primer tutorial.
no es asi??

un saludo
-DAVIZINHO-
Manuales de ensamblador hay a patadas..
Bueno, ya está traducido. Perdonad la tardanza, tuve que salir a emborracharme cuando me quedaba el último apartado, pero ya está completo. A ver si sirve para algo y la gente se interesa en aprender algo que creo que no está de más. Yo casi me lo he aprendido solo con traducirlo :p :p :p :p
Ahora veo efectivas esas calses de fundamentos de computadores y sistemas electronicos digitales :D

saludos

Pd:alguien puede poner el link al hilo donde lo a puesto specialist esque he mirado en xboxhacker.net y debo de estar topo porque no lo veo :D
A pesar del curro realizado para traducir el manual. No acabo de ver la utilidad del mismo. Si el objetivo es aprender ensamblador, hay muchisimos manuales para ello. Si el objetivo es piratear la consola. Bueno, a este ritmo, quizas en unos meses de tutoriales se pueda aprender algo.

No lo entiendo.
A mi esto me parece una idea genial, pero me explico:
Yo solo se hace control+alt+suprimir y poco mas, y la verdad es que esto no me entra ni de lado.Colgar un firm modificado es ilegal, hasta ahi correcto, pero si yo me lo curro, ¿se lo puedo pasar por privado a quien yo quiera no?
Pos a ver si alguien se lo curra y me lo pasa.Con todo y con eso voy a intentar machacarme el tarro en el tema ensamblador.
Saludos y aver si hay suerte con el proyecto.
Pues sí, a ver si alguien amablemente lo distribuye por círculos privados, porque yo le he echado un vistazo al manua ese y me ha empezado a doler la cabeza sólo con el índice.., pero lo intentaré.
Por cierto, tengo dos preguntas: ¿podré conectar el lector de DVD a un portatil? Estoy de Erasmus y no tengo acceso a un pc de sobremesa.
Y la otra, ¿valdrá el hack para jugar con juegos de Xbox (la prmera, claro)? Es que me gustaría liquidarla ya, aunque no sé si podré estar sin el XBMC. Saludos a todos!

(Por cierto scener, si necesitas ayuda con las traducciones, dímelo que tengo mucho tiempo libre)
No os lieís,con el firm ese se consiguieron rular backups de la xbox,no de la 360,pero se comenta que el método sería semejante para esta,por eso todo esto es tan interesante,no os limiteís a esperar un firm y vía...Porque tengo la sensación de que mocosoft va a plantar guerra a todo esto...Ahí está el encanto de todo esto...quien ganará¿?

Gracias scener por el curro que te estás metiendo ;)

Salu2
No he podido encontrarlo en xboxhacker.net, alguien puede facilitarme la url?
Y si esto es de Xbox1 por que esta aki, yo pensaba que era de 360, que ya se habia conseguido rular un backup.
Saludos.
Esto no es ni de XBOX 1 ni de XBOX360, esto es ensamblador de MN103S. Infórmate.
Tendras razon, ya lo dije antes, que soy un ceporro, en estos temas es que me pierdo tela, perdon si he metido la gamba.
Saludos.
No os comais demasiado el tarro, en breve estara el firm del hitachi y un poko mas tarde el del samsung en las p2p, lo ke si hara falta es un tuto para cargar el firm.
Con esto no digo ke scener no sehalla currao el hilo y k puede ser util.

Saludos
Lo d modificar el firm en si,me imagino q stara tirao ya q saldran algunan Apps q nos hagan el trabajo automaticamente en el PC.

Lo chungo sera la parte de Hardware,meterle mano a la consola vamos.

Keox,los firmwares q puede llegar a haber en los p2p no te van a servir d nada si no los modificas con tu firmware key.No va a salir uno superpirataX-D q sirva pa toas las 360s.

Si va s a tener que escribir en un chip pa poder piratearla,esta claro q tb lo puedes leer.Asi q casi q mejor dumpear cada uno el firm d su propio lector.
XXXTRIPLEXXX escribió:Lo d modificar el firm en si,me imagino q stara tirao ya q saldran algunan Apps q nos hagan el trabajo automaticamente en el PC.

Lo chungo sera la parte de Hardware,meterle mano a la consola vamos.

Salu2


Chungo lo mismo no, pero engorroso...muxo, habra k desoldar el chip donde esta el firm, alguien sabe cuantas patillas tiene?
Hola, muy bueno el manual de ensamblador para ir empezando scener. Para los que dicen que no vale para nada pues que no lo lean, pero a los que les interesa aprender sobre estos temas está muy bien. Siempre es bueno saber un poco de todo.

SAlu2
Bueno esta muy bueno esto ke hase scener aki voy a leer el libro Art Of Assembly aver ke hay :-)

Espero ke me sirva de algo jejejejejej
Pues a mi si me interesaria una traduccion de este manual, aunque entiendo el ingles tecnico me es mas facil leerlo en castellano, una de las cosas que mas me costo cuando empece a programar algo hace bastantes años en cobol o en C fue encontrar documentacion tecnica en castellano, pero esta claro que hoy en día dominar el ingles para programar u otros temas relacionado con electronica e informatica es inprescindible.

Un Saludete.
No suelo seguir mucho la escene de la 360, pero lo que no consigo entender es como alguien pretende hacer rular backups en la 360, simplemente hackeando el firmeware del lector, cuando el lector no es una parte fundamental de la proteción de la consola.

salu2
Pues ya lo ha conseguido...
kronosXXI escribió:Pues ya lo ha conseguido...


¿Rular backups??? lo dudo. No creo que sea tan sencillo como hacer rular backups en la xbox supuestamente modificando el firmeware.

Si fuese tan sencillo como saltarse la protección de un lector, seguro que hace tiempo que se podrían rular backups en la consola.

salu2
Si fuese tan sencillo como saltarse la protección de un lector, hace tiempo que se podian rular backups en la consola.


Pues si, ya está conseguido ;)
scener escribió:

Pues si, ya está conseguido ;)


¿Quien te lo ha dicho? ¿hay alguna prueba o simplemente es la palabra de alguien que dice que lo ha conseguido?. Lo siento pero no me lo creo, me parece muy sencillo romper la protección de la consola simplemente diciendole al lector que dentro tiene un original.

salu2
está esto mas emocionante que pasion de gavilanes [qmparto]
A ver..en principio tiene su logica eso de engañar al lector pensando ke es original...xo tbn esty de parte de los ke dicen ke no se lo creen...mas ke nada xk todabia nadie ha dixo komo en exactitud,sino..se rumorea..se dice..man dixo..lo mismo...
Jajaja eso es como los clubs de alterne..tol mundo habla de ellos xo ninguno dice ke ha estao... [qmparto] Se dice ke vale tal..mi amigo ma dixo ke su amigo....jajajaja fuerda de koñas...A ver si sale algo prontito!!!! Un saludo
Scener confirma en uno de sus hilos que TheSpecialist ha conseguido engañar al lector modificando el firmware, o sea, ha conseguido arrancar backups en la consola pero NO va a decir como se hace asi que tendremos que esperar un poquito más a que alguien lo diga o buscarnos la vida por nuestra cuenta.

Espero que sea lo primero porque aunque me gustaría ayudar no tengo ni la más remota idea de ensamblador ni programación ni nada parecido.

Saludos!!!
a mi tb me gustaria ayudar, me ofrezco a desarmaros vuestras x360 [uzi] a golpe de carate jaja

en lo k pueda ayudare

S@lu2
Que alguien me corrija si no estoy e lo cierto.
1º hay que sacar el firmware del lector
2º hay que desensamblarlo
3º hay que saber como funciona el firmware para creer que tiene un original.

lo 1º lo han conseguido
lo 2º con paciencia y un cafe es facil ademas del manualcillo ese ¿cuantos bytes serán? ¿existira algun programa tipo hex editor?
lo 3º Aqui está lo más técnico y lo mas dificil, yo creo, saber como funciona el firmware para saber como engañarlo.
La llevais clara... pero animo!
38 respuestas