Primero de todo agradecer a Mad Antrax su ayuda el la elaboración de los siguientes códigos.
Estoy intentando inyectar código mediante Cheat Engine en el casino SuperStackPoker.
El objetivo es convertir el stack de los jugadores y las apuestas que realizan en función de la ciega grande de la mesa en la que se encuentren. Lo explicare de otro modo por si no jugáis a Poker.
Si un jugador esta sentado con 200 € en una mesa y el nivel de la mesa es 25NL, la ciega grande o apuesta mínima sera de 0,25 €. Por lo que este jugador esta sentado con 800 ciegas grandes o apuestas mínimas (200/0,25)
En cambio si el jugador tiene los mismos 200 €, pero esta en una mesa de nivel 200NL solo tendrá 100 apuestas mínimas. (200/2)
He conseguido realizar parte del código:
EL siguiente script multiplica el stack de todos los jugadores de la mesa por el valor de la apuesta mínima de la mesa.
Este scrip es solo para cuando un jugador iguala una apuesta, tengo otros dos para cuando suben o se retiran. Son las tres instrucciones que escriben el valor del stack.
Código:
[ENABLE]
aobscanmodule(INJECT,ClientRuntime.dll,00 CC CC 55 8B EC 8B 55 08 8B 02 89 81 E0 00 00 00) // should be unique
alloc(newmem,$1000)
alloc(var1,4)
label(code)
label(return)
var1:
dd #1
newmem:
code:
mov [ecx+000000E0],eax
push ebx
mov ebx,[ecx+000000E0]
imul ebx,[var1]
mov [ecx+000000E0],ebx
pop ebx
jmp return
INJECT+0B:
jmp code
nop
return:
registersymbol(INJECT)
registersymbol(var1)
[DISABLE]
INJECT+0B:
db 89 81 E0 00 00 00
unregistersymbol(INJECT)
dealloc(newmem)
unregistersymbol(var1)
dealloc(var1)
Con el siguiente scrip cargo el valor en var1
Código:
[ENABLE]
aobscanmodule(LeerApuestaMinima,ClientRuntime.dll,89 57 28 8B 4E 5C) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
newmem:
code:
mov [edi+28],edx
mov [var1],edx
mov ecx,[esi+5C]
jmp return
LeerApuestaMinima:
jmp code
nop
return:
registersymbol(LeerApuestaMinima)
[DISABLE]
LeerApuestaMinima:
db 89 57 28 8B 4E 5C
unregistersymbol(LeerApuestaMinima)
dealloc(newmem)
Funciona bien con algunos matices.
He utilizado el comando imul, pero en realidad lo que necesito es dividir. No he sido capaz de utilizar los comandos div y idiv.
El segundo problema es que como la instrucción que carga el valor de apuesta mínima es diferente de las de igualar, subir o retirarse pues cuando hay mas de una mesa abierta de distintos niveles pues el valor de var1 va cambiando constantemente y la multiplicación no se realiza por el valor que le corresponde a cada mesa.
He intentado juntar los dos scripts para que antes de realizar la operación lea el valor de la apuesta mínima, pero no he sido capaz.
Espero que podáis ayudarme.
Un saludo,