[SPANISH] Creando cheats Cleo 3/4

NOTA: entrar al post para ver bien la syntaxis.
comunmente vemos mucho Scripts que tienen un monton de números que no entendemos, y magicamente al escribir un Cheat en el teclado, se activa.
bueno, no hay tanta "magia" en eso, solo es necesario entender que existen diferentes formas para crear un Cheat.

CLEO 3

Cleo 3 tiene la particularidad de utilizar más codigo para realizar algo, requiere un poco más de conocimientos en leguajes de programación. Esto se debe a que no existe acceso directo a algunas carácterísticas.  Como a continuación, les enseñaré:

Información básica:

0A8D: 0@ = read_memory 0x00969110 size 4 virtual_protect 0

Parámetros:
1.  variable que almacena la información
2.  Dirección de la memoria
3.  Número de bytes para leer/escribir (1, 2 o 4)
4.  Protección virtual: 1 = Solo-lectura, 0 = re-escribible


Strings:(Texto)

en Cleo, para asignar o guardar un Texto en una variable, existen variables específicas. NO podemos guardar un texto en una variable convencional (0@, 1@, 2@, 3@... 30@, 31@).

pero, podemos modificarlas para que SI puedan hacerlo, lo unico que se debe hacer es agregar despes de la arroba, una S o una V, por ejemplo:

0@s, 2@s, 4@s, 6@s, 8@s, etc.
0@v, 4@v, 8@v, 12@v, etc.

mmm pero cual es la diferencia?

S  ->  string de  8 bytes, almacena palabras cortas Max. 7 letras*
V  ->  string de 16 bytes, alamacena palabras largas Max. 14 letras*

              *valores maximos recomendados, Olvidé este dato.

ahora, como funcionan?...
0@s utiliza 8 bytes, lo que significa que utiliza Dos variables convencionales, en este caso 0@ y 1@
0@v utiliza 16 bytes, lo que significa que utiliza Cuatro variables convencionales, en este caso 0@, 1@, 2@ y 3@






Forma 1 - Creando cheat por medio de ASCII

solo se permite utilizar esta forma para cheats con palabras que tengan solo  4, 6, 8, 10, 12 letras (pares)

-Creando un cheat de 4 letras:
el cheat será: "JUMP"

vamos a almacenar el cheat en la variable 0@  y tenemos la direccion de memoria, que es: 0x00969110 sabemos también, que por ser 4 letras tendrá un tamaño de 4 bytes,  1 byte por letra. y esta dirección de memoria es re-escribible(0). por lo tanto, la parte de nuestro script para activarlo se veria de la siguiente forma:


:LABEL
wait 0
0A8D: 0@ = read_memory 0x00969110 size 4 virtual_protect 0
if
    04A4:   0@ == 0X4A554D50 // Texto en Hex -> 'JUMP'
jf @LABEL
0A8C: write_memory 0x00969110 size 4 value 0 virtual_protect 0 // borrar buffer para prevenir bucles del cheat

omg! :O pero que significa esto: 0x4A554D50
 Ese es nuestro Cheat en caracteres ASCII (hex)
en este caso:
              jump ->  4A 55 4D 50
y le agregamos 0x al inicio, a continuación les dejo la lista de los caracteres

Caracteres ASCII (HEX)
41 = A
42 = B
43 = C
44 = D
45 = E
46 = F
47 = G
48 = H
49 = I
4A = J
4B = K
4C = L
4D = M
4E = N
4F = O
50 = P
51 = Q
52 = R
53 = S
54 = T
55 = U
56 = V
57 = W
58 = X
59 = Y
5A = Z

-Creando un cheat de 6 letras:
el cheat será: "KILLME"
:LABEL
wait 0
0A8D: 1@ = read_memory 0x00969110 size 4 virtual_protect 0    // 4 bytes
0A8D: 2@ = read_memory 0x00969114 size 2 virtual_protect 0    // 2 bytes
if and
    0039:   1@ == 0x4C4C4D45    // LLME
    0039:   2@ == 0x4B49        // KI
jf @LABEL
0A8C: write_memory 0x00969110 size 4 value 0 virtual_protect 0 // borrar buffer
0A8C: write_memory 0x00969114 size 2 value 0 virtual_protect 0 // borrar buffer

OJO:  vean que ahora el código ha cambiado, pero esto por que?...  solo se admiten 4 bytes por variable y nuestro cheat, tiene 6, entonces, debemos utilizar otra variable para completar el cheat.

de igual forma que en el anterior;
   KILLME -> 4B 49 4C 4C 4D 45

pero no admite 6 bytes, entonces, debemos separar nuestro cheat en dos, y debemos colocarlo en orden reverso, como que si se estuviera leyendo de ABAJO para ARRIBA, de la siguiente manera:
LLME   -----  4C4C4D45
KI -----------  4B49
no olvidar que cada letra tiene 1 byte.  y ya le hemos dicho al juego con las primeras dos líneas, del codigo de arriba que utilizaremmos las variables 1@ y 2@   donde 1@ tiene 4 bytes disponibles y 2@ tiene 2 bytes.
entonces quedaría de la siguiente forma: (siempre anteponiendo 0x )
1@ ==  0x4C4C4D45
2@ == 0x4B49

con esas dos líneas, estamos diciendo;  escribimos "KILLME" en el teclado?

-Creando un cheat de 8 letras:
el cheat será: "JUMPRAMP"
:LABEL
wait 0
0A8D: 1@ = read_memory 0x00969110 size 4 virtual_protect 0
0A8D: 2@ = read_memory 0x00969114 size 4 virtual_protect 0
if and
    04A4:   1@ == 0x52414D50 // RAMP
    04A4:   2@ == 0x4A554D50 // JUMP
jf @LABEL
0A8C: write_memory 0x00969110 size 4 value 0 virtual_protect 0 // borrar buffer
0A8C: write_memory 0x00969114 size 4 value 0 virtual_protect 0 // borrar buffer

Ejemplos;

// high End struct
{$CLEO}
0000:

While true    /// escribir KILLME para activar
0A8D: 0@ = read_memory 0x969110 size 4 virtual_protect 0
0A8D: 1@ = read_memory 0x969114 size 2 virtual_protect 0
if and  // KILLME
    0039:   0@ == 0x4C4C4D45    // LLME
    0039:   1@ == 0x4B49        // KI
then
    0A8C: write_memory 0x969110 size 4 value 0x0 virtual_protect 0  
    03E5: show_text_box 'HELP101'  // ignorar mensaje...
    // TURNED ON
    wait 500
    
    while true
    0A8D: 0@ = read_memory 0x969110 size 4 virtual_protect 0
    0A8D: 1@ = read_memory 0x969114 size 2 virtual_protect 0
    if and  // KILLME
        0039:   0@ == 0x4C4C4D45    // LLME
        0039:   1@ == 0x4B49        // KI
    then
        0A8C: write_memory 0x969110 size 4 value 0x0 virtual_protect 0  
        03E5: show_text_box 'HELP101'  // ignorar mensaje...
        // TURNED OFF
        break
    end
     wait 0
    end    
    wait 3000

end
 wait 0
end

// low End strucct
{$CLEO}
0000:

:LABEL_ON /// escribir JUMP para activar
wait 0
0A8D: 0@ = read_memory 0x00969110 size 4 virtual_protect 0
if
    04A4:   0@ == 0X4A554D50 // Texto en Hex -> 'JUMP'
jf @LABEL_ON
0A8C: write_memory 0x00969110 size 4 value 0 virtual_protect 0 // borrar buffer para prevenir bucles del cheat
    03E5: show_text_box 'HELP101'  // ignorar mensaje...
    // TURNED ON
    wait 500

:LABEL_OFF
wait 0
0A8D: 0@ = read_memory 0x00969110 size 4 virtual_protect 0
if
    04A4:   0@ == 0X4A554D50 // Texto en Hex -> 'JUMP'
jf @LABEL_OFF
0A8C: write_memory 0x00969110 size 4 value 0 virtual_protect 0 // borrar buffer para prevenir bucles del cheat
    03E5: show_text_box 'HELP101'  // ignorar mensaje...
    // TURNED OFF
    wait 3000
goto @LABEL_ON


Forma 2 - Usando Strings(texto)

esta es una variante del método anterior, en este método no convertiremos las letras en hex, sino que sencillamente escribiremos el texto, veamos;

-Creando un cheat de 4 letras:
el cheat será: "JUMP"
:LABEL
wait 0
0A8D: 0@ = read_memory 0x969110 size 4 virtual_protect 0
0006: 1@ = 0x0
if             
    05AE:   0@s == "PMUJ" // @s == 'short'
jf @LABEL
0A8C: write_memory 0x969110 size 4 value 0x0 virtual_protect 0  // borrar bufer

entonces, asignamos nuestro cheat de 4 letras a una variable String, utilizando el opcode 05ae
OJO:  el texto en este caso se debe escribir en orden reverso, veamos
     J U M P    -> cheat
     P M U J    -> empezando con la ultima letra
y listo.

-Creando un cheat de 6 letras:
el cheat será: "KILLME"
:LABEL
wait 0
0A8D: 0@ = read_memory 0x969110 size 4 virtual_protect 0
0A8D: 1@ = read_memory 0x969114 size 2 virtual_protect 0
if 
    05AE:   0@s == "EMLLIK" // @s == 'short'
jf @LABEL
0A8C: write_memory 0x969110 size 4 value 0x0 virtual_protect 0  // borrar bufer

El cheat:  K I L L M E
         ->  E M L L I K
y listo.

-Creando un cheat de 14 letras:
el cheat será:  "THEBANANAPHONE"
:LABEL
wait 0
0A8D: 0@ = read_memory 0x969110 size 4 virtual_protect 0
0A8D: 1@ = read_memory 0x969114 size 4 virtual_protect 0
0A8D: 2@ = read_memory 0x969118 size 4 virtual_protect 0
0A8D: 3@ = read_memory 0x96911C size 2 virtual_protect 0
if and 
    05AE:   2@s == "ENOHPA" // @s == 'short'
    05AE:   0@s == "NANABEHT" // @s == 'short'
jf @LABEL
0A8C: write_memory 0x969110 size 4 value 0x0 virtual_protect 0

El cheat:  T H E B A N A N A P H O N E
         ->  E N O H P A N A N A B E H T
pero, como estamos utilizando Strings cortos, de 8 bytes, este cheat tiene 14 bytes, por lo tanto es necesario separar el cheat en dos, de la siguiente manera;
0@s -> contiene a 0@ y 1@ con un total de 8 bytes (8 letras)
2@s -> contiene a 2@ y 3@ con un total de 6 bytes (6 letras)

entonces;
0@s -> 8 letras  ->   N A N A B E H T
2@s -> 6 letras  ->   E N O H P A
y listo ;)

Forma 3 - Usando Arrays 
-pendiente

CLEO 4

CLEO 4  fué diseñado para facilitarnos la vida... en vez de utilizar los métodos anteriores, éste nos ofrece un opcode:

0ADC:   test_cheat "BLOWUP"

asi de fácil....


Conclusion:
utilizar el que mejor les convenga, si lo que desean es proteger sus scripts, entonces, entre más complejo sea, más difícil será que se los roben, ahora, si lo que desean es enseñar, entonces el método de CLEO4  es la mejor opcion.

espero les sirva...

;)

Publicar un comentario

Post a Comment (0)

Artículo Anterior Artículo Siguiente