5
 Instrucciones básicas de montaje (opcodes) y ejemplos  Este artículo debe contener instrucciones de montaje básico para empezar a construir sus propios scripts. Si usted no sabe cómo hacer la inyección de código, sin embargo, leer el artículo anterior: ¿Cómo vencer el tutorial Cheat Engine?   Aquí encontrará una lista simple de los códigos más importantes que usted puede utilizar al intentar hackear un  juego. Usted también encontrará dos ejemplos, el primero es cómo hacer que un modo de trucos de Dios en un  juego de estrategia en tiempo real, Warhammer: Mark of Chaos. El segundo es un tramposo dinero para C & C Generals, que está afectando al jugador humano, no el enemigo.  Instrucciones de montaje (opcodes): dec disminución del valor en 1 inc aumentar el valor en 1 sub resta el segundo oper ando del primero. Ejemplo: sub [ebx+00000310],4 significaría "reducir el valor de ebx+0310 en 4" add se sumará el segundo operando del primero. Ejemplo: add [ebx+00000310],4 sign ificaría "aumentar el valor de ebx+0 310 en 4" mov cop ia el segun do op er an do a la pr imera. Ejemplo: mov [ebx+00000310],4 significa "cambiar el valor de ebx+0310 a 4 " lea co pi ar el resu ltado del se gundo operando para el primer operando. Ejemplo: lea eax,[esi+30] significaría que copia esi+30 a eax Esto es bueno para salvar a los punteros. cmp comp ar a, 2 r egis tr os, o un mero y u n r egis tr o. Ejemplo: cmp esi,2 //comparar esi a 2 cmp esi,ecx //comparar esi a ecx El resultado de la comparación se almacenarán en una bandera. Para ver más acerca de las marcas, revisar el archivo de ayuda de la CE.

Instrucciones básicas de ASM (opcodes) y ejemploss

  • Upload
    sawyer

  • View
    116

  • Download
    0

Embed Size (px)

Citation preview

5/10/2018 Instrucciones básicas de ASM (opcodes) y ejemploss - slidepdf.com

http://slidepdf.com/reader/full/instrucciones-basicas-de-asm-opcodes-y-ejemploss 1/5

 

Instrucciones básicas de montaje (opcodes) y ejemplos Este artículo debe contener instrucciones de montaje básico para empezar a construir sus propios scripts. Si ustedno sabe cómo hacer la inyección de código, sin embargo, leer el artículo anterior:

¿Cómo vencer el tutorial Cheat Engine? Aquí encontrará una lista simple de los códigos más importantes que usted puede utilizar al intentar hackear un

  juego. Usted también encontrará dos ejemplos, el primero es cómo hacer que un modo de trucos de Dios en un

  juego de estrategia en tiempo real, Warhammer: Mark of Chaos. El segundo es un tramposo dinero para C & C

Generals, que está afectando al jugador humano, no el enemigo.

 

Instrucciones de montaje (opcodes):

dec disminución del valor en 1

inc aumentar el valor en 1

sub resta el segundo operando del primero.Ejemplo:sub [ebx+00000310],4 significaría "reducir el valor de ebx+0310 en 4"

add se sumará el segundo operando del primero.Ejemplo:add [ebx+00000310],4 significaría "aumentar el valor de ebx+0310 en 4"

mov copia el segundo operando a la primera.Ejemplo:mov [ebx+00000310],4 significa "cambiar el valor de ebx+0310 a 4 "

lea copiar el resultado del segundo operando para el primer operando.

Ejemplo:lea eax,[esi+30] significaría que copia esi+30 a eaxEsto es bueno para salvar a los punteros.

cmp compara, 2 registros, o un número y un registro.Ejemplo:cmp esi,2 //comparar esi a 2cmp esi,ecx //comparar esi a ecx

El resultado de la comparación se almacenarán en una bandera. Para ver más acerca de las marcas,revisar el archivo de ayuda de la CE.

5/10/2018 Instrucciones básicas de ASM (opcodes) y ejemploss - slidepdf.com

http://slidepdf.com/reader/full/instrucciones-basicas-de-asm-opcodes-y-ejemploss 2/5

 

Saltos  

 jmp Salto a la dirección y se puede utilizar las instrucciones jmp para saltar a unadirección específica (salto largo), o para ir hacia delante o hacia atrás bytes x(salto corto).por ejemplo jmp+0000000A //esta instrucción significaría dar un salto de 10 bytesen el código.

Saltos condicionales Puede utilizar saltos condicionales para saltar a una direcciónespecífica, o saltar a adelante o hacia atrás x bytes.

 je ir a un lugar si el resultado de la comparación anterior fue igualEjemplo:cmp esi,2

 je 0f445566 //si esi es igual a 2, el programa saltará a la dirección 0f445566.

 jne ir a un lugar si el resultado de la comparación anterior no era igual

 jg Saltar si es mayor  

 jl Saltar si es menor  

push guardar un registro o una bandera en la pila

pop cargar un registro o una bandera de la pila

pushad guardar todos los registros en la pila

popad cargar todos los registros de la pila

pushfd salvar a todas las banderas en la pila

popfd carga de todas las banderas de la pila

La pila es un "almacenamiento", donde usted puede poner los valores y las cargan de la misma. Sin embargo, no

son capaces de guardar y cargar los valores en cualquier orden. El último valor en la pila que usted empuje será laprimera vez que usted salga.

Por ejemplo, supongamos ecx=3, edx=2 y la pila de las tiendas de los siguientes valores. 4

56

Ahora ponemos una instrucción como "push ecx". Luego la pila se verá así.

3456 

5/10/2018 Instrucciones básicas de ASM (opcodes) y ejemploss - slidepdf.com

http://slidepdf.com/reader/full/instrucciones-basicas-de-asm-opcodes-y-ejemploss 3/5

 

Ahora también ponemos en edx con "push edx". La pila se verá así.

23456

Ahora queremos hacer estallar un valor de la pila, con "pop ecx".

En este caso, el programa se saca el primer valor de la pila, que es 2,y lo puso a ecx. Así ecx = 2 y el aspecto de esta pila.

3456

Si damos un "pop edx" instrucción ahora, edx será de 3, y la pila se verá como

45

6

El resultado: La pila es el mismo que cuando hemos empezado, pero ecx=2 ahora, y edx=3, se han cambiado susvalores entre sí.

Si se utiliza PUSHAD y PUSHFD, POPAD entonces y POPFD, asegúrese de usarlos en el orden correcto.

PUSHADPUSHFD...POPFDPOPAD

o PUSHFDPUSHAD....POPADPOPFD

Entonces, ¿qué se empuja en primer lugar, debe estallar en primer lugar. ¿Qué sucede si usted no?

Ejemplo incorrecto:

PUSHFDPUSHAD....POPFDPOPAD

Resultado: Se impulsarán las banderas en la pila, a continuación, pulse en los registros y con la instrucción POPFD,le carga el valor de los registros de las banderas, que se hace un lío totalmente el programa y lo más probable esque se colgará.

¿Por qué usar push, pop y la pila de todos modos?

En el montaje, usted no es capaz de utilizar dos valores como operadores en la misma instrucción.por ejemplo, mov [ecx], [edx] no es una instrucción válida. Si usted desea cambiar el valor de [edx] a [ecx], primeroque hay que poner [ecx] a un registro, a continuación, copia del registro en [ecx]. Sin embargo, cambiar el valor deun registro para su propósito propio sin necesidad de restaurar más tarde dará lugar a errores. También cuandose utilizan las instrucciones cmp, se cambia el estado de los indicadores, lo que a veces puede ser necesaria pararestaurar los valores de la bandera también.

Para un buen ejemplo sobre cómo utilizar la pila, comparar, saltos condicionales y mov, voy a describir cómo puedohacer un "Modo Dios" para mis soldados en un juego de estrategia en tiempo real, Warhammer: Mark of Chaos.

5/10/2018 Instrucciones básicas de ASM (opcodes) y ejemploss - slidepdf.com

http://slidepdf.com/reader/full/instrucciones-basicas-de-asm-opcodes-y-ejemploss 4/5

 

 En primer lugar usted necesita para buscar la salud de un soldado y comprobar que el código está escrito a ladirección de la salud. Sin embargo, este código está cambiando todo de la salud de los soldados en el juego,incluyendo a los soldados enemigos. Así que si usted sólo tiene que desactivar este código, todo el mundo va a ser invencible. Que no sería útil.

El código que está cambiando la salud es la siguiente:

008d0f08 - d9 56 04 - fst dword ptr [esi+04] Si nos fijamos en el explorador de la memoria, usted se dará cuenta de que la estructura de los soldados de datos esmuy simple en este juego. Como usted puede ver en el código, la salud se almacena en esi 04. La vida máxima de launidad es de 4 bytes más tarde, por lo que es en esi 08. Una información más: si el valor antes de la Salud (ESI) es0, la unidad es la unidad. Si no es así, entonces una unidad enemiga.

Por lo tanto la estructura de datos es la siguiente:[Esi] = player ID, si es 0, la unidad es tuyo[Esi 04] = salud[Esi +08] = max salud

Con esta información, podemos planificar nuestro script. Se debe hacer lo siguiente:Compruebe si la unidad es la unidad.Si se trata de su unidad, cambiar la salud a la salud máxima.

El script se verá así: fst dword ptr [esi+04] //código original, que está cambiando la saludpushad //guardar los registrospushfd //guardar las banderascmp [esi],0 //comprobar si el ID de jugador es igual a 0

  jne +6 //si no es 0, el programa se saltará el próximo 2 líneasmov eax,[esi+08] //copia el valor de la salud máxima en eaxmov [esi+04],eax //eax copia a la salud, por lo máximo de salud = saludpopfd //cargar banderaspopad //carga de registros

Bueno, eso es todo. Un código simple que hará que sólo las unidades de su invencible, pero los enemigos se daño

con normalidad. Tenga en cuenta que antes he utilizado cmp, he guardado las banderas y antes de que hayacambiado el valor del registro EAX, que he guardado los registros también. Al final del código, que ha cargado denuevo las banderas originales y registros, así que fue capaz de usar las banderas y se registra como yo quería en micódigo, sin que se caiga el programa.

Otro buen ejemplo: el dinero ilimitado para el único jugador en C & C Generals.

Es bastante fácil encontrar el código que está cambiando el dinero para los jugadores de los generales, pero si usteddesea hacer script que le dará dinero ilimitado para ti solo que aquí hay una pista simple, que está trabajando con lamayoría de los juegos.

Cuando el juego se está trabajando con el dinero, es el uso de direcciones diferentes para almacenar su dinero y lacantidad de dinero que se muestra en la pantalla. Esto significa que cuando se busca el dinero, usted encontrará dosdirecciones.

1. El dinero que usted realmente tiene.2. La cantidad que usted ve en la pantalla en el juego.

El juego es la comprobación de su dinero cerca de 10 veces en un segundo y mostrar la cantidad correcta a lapantalla de juego.

1. Usted tiene una dirección donde se almacena el dinero.2. Un código es leer la cantidad de dinero que tienes en esa dirección.3. Un script es copiar el valor del dinero a la dirección donde se puede ver la cantidad indicada de dinero.

5/10/2018 Instrucciones básicas de ASM (opcodes) y ejemploss - slidepdf.com

http://slidepdf.com/reader/full/instrucciones-basicas-de-asm-opcodes-y-ejemploss 5/5

 

¿Por qué es tan importante?Es importante, ya que sólo el dinero del jugador se muestra en la pantalla, por lo que el código que está leyendola cantidad de dinero tiene usted en el 2 º paso es acceder a su dinero solamente. Si tiene el código que estáaccediendo a su dinero solamente, usted puede escribir un script para cambiar su dinero, pero no para losenemigos.

¿Cómo encontrar el código?

Es muy sencillo. Encontrar la dirección donde está almacenado el dinero, pero después de eso, usted tiene queelegir "Averigüe lo que accede a esta dirección". Usted recibirá el código que es la lectura de la dirección, no sólo elque está escribiendo en él.

El código que está leyendo la cantidad de su dinero:mov ebx,[eax+38] Ahora todo lo que necesitas hacer es escribir un script que está cambiando su dinero cuando el programaes leerlo:

mov ebx,[eax+38] //leer su dineromov [eax+38],000f423f //cambiar su dinero a 999.999 (que es 000f423f en hexadecimal)

Ahora que ha aprendido otro método que le ahorrará a partir de los problemas con anticipación si usted deseaencontrar un código específico.

 

Texto Original creado por Geri, traducido por Spora