[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