[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.
Información básica:
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:
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)
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"
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.
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"
entonces;
0@s -> 8 letras -> N A N A B E H T
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...
;)
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"
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:
Ejemplos;
: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)
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
-pendienteCLEO 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...
;)
Comentarios
Publicar un comentario