Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Mad Antrax

#541
Para el instant recruit:

Puedes probar lo siguiente. Mientras estás "creando" una unidad, empieza una busqueda en ALL con Unknow initial value. Cuando haya terminado busca "Changed value", vuelve a crear una unidad y mientras esté creándose busca de nuevo "Changed Value". Repite éstos pasos y con un poco de suerte podrás encontrar la dirección, a partir de ahí generas un AA script y listo.

No va a ser tarea fácil, ya que no sabemos si la variable va aumentando o disminuyendo a medida que creas una unidad, por eso debes usar "Changed Value" en lugar de "Increase o Decrease".

Para el dinero:

Primero de todo saca la dirección de memoria donde se almacena el dinero (eso me imagino que ya lo hiciste), mira la dirección y comprueba si es el resultado de [edi+eax*8+04], me explico siguiendo tu ejemplo:

002F0868 - D9 5C C7 04  - fstp dword ptr [edi+eax*8+04] <<

EAX=00000000
EBX=00000001
ECX=13907170
EDX=00000001
ESI=16407000
EDI=13907170
ESP=0119D6E4
EBP=0119D6F8
EIP=002F086C

Eso se traduce en: 13907170 + 0*8 + 04 = D434E6. Deberías comprobar si la dirección de memoria es el resultado de esa operación, de ser así simplemente genera un AA script y añade la siguiente línea:

fstp dword ptr [edi+eax*8+04]
mov [edi+eax*8+04],186A0

______________________

por cierto, el resto de script's de esa Table son tuyos? De ser así felicidades, buen trabajo :D
#542
Cita de: OmarHack en 19 Febrero 2013, 06:11 AM
Mañana miraré todo con más calma, de todas formas muy buen aporte, la lección 1 ya me la sabía, puedes subir el código fuente del juego? Y con que entorno de desarrollo lo hiciste?

Todas mis creaciones son bajo Visual Basic 6.0
Source code: https://mega.co.nz/#!pZRzWZDZ!EDJ3Vxwh85lQ0l8_p6VRLl2nl65ZNstmbzkoxdalr-c
#543
El trainer que has creado es perfecto. Te felicito por ello.

Yo también he creado un trainer para el juego Maldita Castilla, he usado Cheat Engine como "motor" para el trainer y VB6 para la interfaz, me ha quedado así:



Es un +3 trainer, ya que trae 3 cheats distintos (salud, vidas y tiempo). El trainer tiene musica de fondo y efectos (como los trainers profesionales), también he añadido un lector de ficheros *.nfo con información del trainer, así como un ScrollText para los agradecimientos.

http://www.mediafire.com/download.php?kiyni7tyvmi6ag8

Prueba de hacer tu mismo el cheat para el tiempo, es algo "complicado" :)
#544
Si no voy equivocado, tienes que hookear la librería DirectX 9 10 u 11 (depende del juego) y a partir de ahí mandar las funciones que quieras.

Los cheats hacen ésto mismo, hookean la librería y llaman a funciones como CreateRectangleRegion() para dibujar un cuadro sobre los enemigos (creación de un ESP wallhack). Otros cheats hookean la librería y mandan click's del ratón para hacer un auto-aimbot.

No estoy seguro si se puede hacer en VB6 (quizás sí, quizás no), pero es posible que si buscas un poco por Google encuentres algún ejemplo hecho en C++

______________________

Pero vigila, el principal problema es que CounterStrike (o casi cualquier juego online decente) detectan las principales funciones usadas para hookear en sus librerías, detectando el cheat y aplicando VAC-Ban
#545
Perfecto. Mira, veo que eres el primer usuario que se ha leido mi tutorial de CE (al menos eres el primero en postear aquí exponiendo tus dudas), así que te voy a mandar deberes :D

Te dejo el link de un videojuego para que le apliques un hack. Se llama Maldita Castilla. Es un juego gratuito, ocupa pocos MegaBytes y se puede jugar sin necesidad de instalar nada en tu PC



Primero de todo descarga el juego de su web oficial http://www.locomalito.com/maldita_castilla.php (el link está abajo del todo). Lo que te pido es que consigas hacer un cheat para evitar que el personaje muera al recibir golpes. Básicamente lo que debes conseguir es encontrar la dirección de tu Salud/Vida y forzarlo siempre a 3 (valor máximo).

Puedes hacerlo de 2 formas. O encuentras el pointer de la salud del personaje o escribes un AA script para inyectar el valor 3 a la dirección de tu salud cada vez que recibas un golpe.

Suerte!! :D
#546
Cita de: MeTaD en 17 Febrero 2013, 22:38 PM
AoBSCAN significa Array of Bytes scan y también son conocidos como SigScans o Signature Scans...

Ya con estos datos me puse a navegar en internet y conseguí lo siguiente en el foro de CE:

[ USAGE ] ------------------------------------------------------------------------------
//
// Examples:
//
//      SigScan _sigScan = new SigScan();
//      _sigScan.Process = someProc;
//      _sigScan.Address = new IntPtr(0x123456);
//      _sigScan.Size = 0x1000;
//      IntPtr pAddr = _sigScan.FindPattern(new byte[]{ 0xFF, 0xFF, 0xFF, 0xFF, 0x51, 0x55, 0xFC, 0x11 }, "xxxx?xx?", 12);
//
//      SigScan _sigScan = new SigScan(someProc, new IntPtr(0x123456), 0x1000);
//      IntPtr pAddr = _sigScan.FindPattern(new byte[]{ 0xFF, 0xFF, 0xFF, 0xFF, 0x51, 0x55, 0xFC, 0x11 }, "xxxx?xx?", 12);
//

http://forum.cheatengine.org/viewtopic.php?p=5243058&sid=a83fb95aee8be17a7442f61861e3b004


Un código C# que aparentemente cumple la función de un AoBSCAN... ¿Me podrías decir qué datos poner en cada espacio? no domino completamente HEX ni direcciones de memoria para intentar averiguarlo yo mismo...

Pues sintiéndolo mucho, no tengo ni idea :( Al parecer 0xFF, 0xFF, 0xFF, 0xFF, 0x51, 0x55, 0xFC, 0x11 se traduce como aobscan(FF FF FF 51 55 FC 11) y supongo que la función devuelve la dirección encontrada. Deberías hacer pruebas o preguntar en ese mismo hilo (yo no tengo ni idea de C).

De todas fromas, porqué quieres hacer el trainer en C? CE trae su propio intérprete LUA para generar trainers, en el foro de CE hay muchísimos ejemplos sobre como generar trainers con CE LUA, pudiendo llamar a las funciones internas de aobscan de forma sencilla.

Por cierto, has probado de hacer el aobscan "manual" como te he explicado? Es la forma más sencilla para ver como funciona.
#547
Cita de: MeTaD en 17 Febrero 2013, 22:17 PM
Eres tremendo hombre! ;-) ;-) ;-) ;-) ¿Por qué supusiste que se podría solucionar con AOBscan?, ¿AOBscan sólo existe en CE?, de ser así, ¿Cuál sería su equivalente en vb o C#?

Haz lo siguiente, ejecuta tu programa y el CE (sin mi tabla, ejecuta el CE completamente vacío).

1. Busca y encuentra la dirección con tu variable
2. Haz click derecho "Find out what writes to this address"
3. Pulsa el botón de sumar, aparecerá la instrucción:

002A06BE - FF 80 4C010000  - inc [eax+0000014C]

4. Pulsa en Show Disassembler
6. Aparece la instrucción, haz click drecho y copia los bytes:



7. Vuelve a la ventana principal de CE, pulsa NEW SCAN, Value Type -> Array of Byte
8. En la caja de texto pulsa Ctrl+V y dale a buscar:



Como ves, esa es la forma "manual" de usar AOBSCAN(), CE nos devuelve una dirección solamente (002A06BE) que curiosamente se corresponde al offset de mi instrucción:

002A06BE - FF 80 4C010000  - inc [eax+0000014C]

---------------------------------

Para automatizar todo esto en un script, se realiza llamando a la función aobscan(), digamos que mi script hace esos pasos anteriores de forma automática y sin que te enteres :)

---------------------------------

Aobscan() es una función interna de CE, no existe equivalente en C o VB, deberías de programarlo tu con las APIs ReadProcessMemory, supongo.
#548
Vale, ya he podido solucionar tu problema, al final he utilizado un AOBSCAN(), es una función algo compleja en CE, y en mis años que llevo utilizando CE nunca había tenido que recurrir a ella.

AOBSCAN devuelve el offset correspondiente a un array de bytes en memoria. Tu programa ejecuta la siguiente instrucción:

xxxxxxxx - FF 80 4C010000        - inc [eax+0000014C]

El offset lo pongo en xxxxxxxx ya que es aleatorio como ya vimos por culpa del Framework, los bytes ejecutados son siempre los mismos: FF 80 4C 01 00 00 así que podemos realizar una búsqueda y obtener la dirección desde donde se ejecuta el array de bytes (xxxxxxxx). El script que permite hacer esto es el siguiente:

[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
label(addr)
registersymbol(addr)
aobscan(aob1,FF 80 4C 01 00 00)

newmem:
mov [eax+0000014C],9

originalcode:
inc [eax+0000014C]

exit:
jmp returnhere

aob1:
addr:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
addr:
db FF 80 4C 01 00 00
unregistersymbol(addr)


El script en cuestión busca el array y devuelve el offset, a partir de ahí inyectamos nuestra instrucción en newmem, en mi caso copio 9 en eax+14C, consiguiendo un script que siempre establece en 10 el valor de tu variable al sumar. Y lo mejor es que funciona siempre en cada ejecución ya que aobscan funciona en códigos dinámicos (Framework)

Te dejo mi CE_Table para que lo pruebes en tu equipo. Prueba de sumar la variable y luego activa el script, verás que la variable se establece en 10. Funciona incluso cuando la variable "salta" a otra dirección.

http://www.mediafire.com/?mgzihnw673c719z

Para que funcione la tabla, primero pulsa el botón de sumar (al menos una vez) y ya podrás activar el script, vuelve a pulsar el botón sumar y verás como el valor se transforma en 10. Debería funcionar todas las veces que ejecutes el programa. A partir de aquí ya es sencillo crear un trainer con CE

_____________________

Edit, es posible crear un registersymbol para mostrar en CE la dirección exacta de tu variable, pero eso es algo que no se hacer todavía, si lo descubro te aviso :)
#549
Cita de: MeTaD en 17 Febrero 2013, 20:24 PM
Vale, gracias, le agregué más información al post anterior, revísalo porfa, y también te he mandado un PM, gracias de antemano.

Bueno, he estado revisando tu programa.

El problema parece ser que es debido a Framework, como ya sabes, todos los programas creados con Visual Studio son interpretados por una VM, en VB6 la VM es MSVBVM60.DLL, en las versiones posteriores son ejecutados por las librerías y dependencias Framework.

Después de estar revisando un poco el ejecutable, las operaciones de incrementar o restar son ejecutadas evidentemente por la VM de VisualStudio (Framework), dichas librerías ejecutan y procesan el código a su manera, realmente no entiendo como demonios funciona internamente, lo que sí es seguro es que los punteros son asignados en espacios de memoria de forma aleatoria.

Cuando ejecuto tu programa, puedo encontrar el pointer (puntero) asignado a tu variable. Después de incrementar el valor, la variable "salta" y se almacena en otra dirección de memoria nueva (ésto es MUY raro y jamás lo había visto, es por culpa del maldito Framework), curiosamente, el pointer que he encontrado es capaz de seguir ese "salto" y continua mostrando el valor correcto de tu variable.

El problema viene aquí: Cuando ejecuto de nuevo el programa, el pointer que había encontrado antes ya no sirve (ésto es la primera vez que lo veo). He usado el pointer-scanner para comprobar si son punteros de multi-nivel, pero no es el caso.

También he probado de crear un AA script, funciona correctamente, pero cuando reinicio el programa, Framework interpreta el código de alguna forma extraña y deja inservible el AA script.

____________________________________

Mi conclusión es que Framework nos está jugando una mala pasada. Por alguna razón, cuando ejecutas el programa, asigna sus funciones en un rango aleatorio de la memoria (offsets). Con el resto de ejecutables que he trabajado, las variables se asignan de forma aleatoria, pero sus pointers y funciones (offsets) siempre ocupan la misma dirección relativa. Me explico:

Ejecuto por primera vez tu programa, tras encontrar la dirección, Framework hace lo siguiente:

003D06BE - FF 80 4C010000        - inc [eax+0000014C]

003D06BE = Es el offset encargado de incrementar tu variable
inc = Es la instrucción ASM que incrementa
[eax+0000014C] = La dirección de memoria con tu variable

La segunda vez que ejecuto tu programa ocurre lo siguiente:

005806BE - FF 80 4C010000        - inc [eax+0000014C]

El offset ha cambiado pasando de 003Dxxxx -> 0058xxxx, pongo la mano en el fuego que el culpable de éste cambio sin-sentido es debido al Framework.

Lamentablemente no puedo darte una solución a tu problema :( Deberíamos mover tu pregunta al foro oficial de CheatEngine, a ver si alguien puede lanzar un poco de luz a éste problema

__________________________________________

EDIT

Estoy revisando más a fondo tu problema. Parece ser que la función AOBSCAN() se puede encontrar el offset exacto que realiza el incremento para luego hacer una inyección de código o incluso dumpear la dirección de memoria donde se almacena tu variable.

El problema es que no soy muy experto en usar el AOBSCAN() bajo CE, estoy haciendo pruebas, pero creo que se puede conseguir :P
#550
Puedes subir el ejecutable compilado? No tengo el VS para compilar el source

Edit: Ya veo que has subido tambien el exe compilado, espera unos minutos que lo reviso :P