[Tutorial] Usar Cheat Engine para modificar juegos + inyección de código

Iniciado por Mad Antrax, 1 Febrero 2013, 11:46 AM

0 Miembros y 8 Visitantes están viendo este tema.

SeniorPro

Cita de: .:UND3R:. en 26 Febrero 2014, 20:05 PM
Me explico, lo que ocurre es que tu estás intentando congelar el contador por así decirlo, pero este contador no tiene la cantidad de soldados que tu quieres tener, solo lleva una cuenta, por eso su nombre, contador. Tampoco deberías buscar la cantidad de soldados y tras ser modificado, pensar que habrán más, ya que los soldados no son por así decirlo un tipo entero, debe ser una especie de estructura en donde cada uno tenga parámetros como coordenadas, vida, ataque, etc. Lo que deberías hacer es escanear un soldado en específico, e ir indicando si aumento o disminuyo el address (si pierde vida lo más probable es que disminuya, si recupera vida tu adivinarás que ocurrirá  ;D), ahora esto hará UN soldado inmortal tras congelar el address de vida, para que todos los soldados tengan vida, podrías intentar encontrar el address de cuando se realiza un ataque, de esta forma siempr elo estableces a 0 y nunca te atacarán, ahora si quieres más acción podrías injertar una dll que busuqe todas las estructura de soldado y les cambie el parámetro vida, no sé si se entiende la idea, espero que sí! saludos
Gracias por la explicacion UND3R pero no se como lo voy a hacer porque el juego tiene unas mecanicas complicadas a la hora de jugar las batallas  :P. Ya se me ocurrira algo jeje y de paso aprendere algunas cosillas mas del mundo de cheat engine ::)

Xoslorg

Buenas, ante todo agradecerte el manual MadAntrax.
Tengo un problema con los punteros, al buscar una variable la encuentro, buscas a donde apunta y lo encuentro, hasta aquí bien, encuentro otra dirección pero dinámica, a partir de aquí no me encuentra nada.
P->DIRECCION

Alguien podría explicar como buscar pointers?, lo he probado con un juego y encuentro el uno pero dinámico y no estático.
Gracias.

Enviado desde mi Galaxy Nexus mediante Tapatalk
Si vis pacem, para bellum.

Meta

Hola:

Estoy siguiendo el tutorial, en el n3el enlace para descargar el nuevo juego para hacer pruebas, no descarga.
http://www.mediafire.com/download/hat2ts8d3por4a7/moneybag_tutorial.zip

De paso he leído que no se puede mucho usar el C# para extraer datos. Hice un ejemplo tonto como puedes ver aquí.



Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Leer_RAM
{
    public partial class Form1 : Form
    {
        string Despedir;

        public Form1()
        {
            InitializeComponent();
        }

        // Si pulsas el botón, empieza el contador.
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Start();
            Despedir = "START";
            label3.Text = (Despedir);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int Valor = progressBar1.Value; // Guarda el valor actual.
            progressBar1.Increment(1); // Incrementa a 1.
            label1.Text = Valor.ToString(); // Muestra el valor del incremento del ProgressBar.

            // Si el valor llega a 100.
            if (Valor == 100)
            {
                progressBar1.Value = 0; // Empieza desde 0.
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            Despedir = "STOP";
            label3.Text = (Despedir);
        }
    }
}


El que quiera que le enví el proyecto completo me envía en privado su e-mail.
En esta ocasión, quiero encontrar la variable STOP o START, tambien el de los números de progressBar y cosas así para hacer pruebas.

Por lo que veo, es muy complejo usar el C# para hacer prácticas simples, tal vez me va mejor usar Visual C++ 2010 y a 32 bits nativo, nada del CLR que se mete FramWork por medio. Quiero decir esto que usa sistemas de protección cambiando la zonas de memoria de las variables para no encontrarlas y modificarlas.

Mi idea de todo esto es, un juego de coches, simuladores de aviones o helicópteros donde aparecen números como el cuentakilómetros, lo pueda ver en C# hecho por nosotros. Con ello puedo pasar los datos al USB o puerto serie mediante PIC o Arduino en una pantalla LCD o de Led de 7 segmentos.

Un ejemplo.
[youtube=640,360]http://www.youtube.com/watch?v=q2kz9ZPRDss[/youtube]

La parte de la electrónica me encarga yo y mostraré el proyecto final a todo detalle.
[youtube=640,360]http://www.youtube.com/watch?v=xe44cRdmuX8[/youtube]

Un cordial saludo.

Edito:
Datos que puede ser interés para aumentar tutorial sobre Trainers de Cheat Engine. en mi caso, prefiero hacerlo desde C#.
http://www.youtube.com/watch?v=0_aX56v9ie0

Ver otro vídeo con Blasck Op II aunmentando dinero en modo Zombie con un trainer bajo Visual Basic .net
http://www.youtube.com/watch?v=xSUJupVnHP0

Aquí hay un tema creado con el trainer del CE. Debería estar aquí todo junto, pero bueno.
http://foro.elhacker.net/programacion_visual_basic/programar_un_trainer_en_vb6_gui_profesional-t380649.0.html;msg1817856#msg1817856
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

Hola de nuevo:

Aquí hay un aWeb un poco en Inglés sobre lo que me interesa hacer. Sacar datos de un juego de coches.



http://www.x-sim.de/manual/tutorial.html

Aquí hay también otros vídeotutoriales sobre hackeo de juegos con Cheat Engine 6.3 y el debugger allidgb.
[youtube=640,360]http://www.youtube.com/watch?v=3IHIvPgJZ2o[/youtube]

http://www.youtube.com/watch?v=nDPxJlOZ-Bc
http://www.youtube.com/watch?v=XbZRHbd0qEo
http://www.youtube.com/watch?v=Kjw7lHLF8t8
http://www.youtube.com/watch?v=Ro7xhZb6K8I
http://www.youtube.com/watch?v=YmaPXY-gmOE

Si saben más inforamación sobre aprendizaje de estas cosas muy buenos como estos, no duden en poner enlaces.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

A veces es mejor empezar por lo más simple.

Me han comentado amigos que vieron por el aire y no tienen tiempo para ver más, esa DLL es par injectar código a un exe, no para leer.

Así que, ya tengo las direcciones de memoriade las variables y en ella está Vida, que es la que quiero como ejemplo.

Para dejar claro lo que quiero. :)

1) Ejecutar un juego que alguien hizo con Visual C++ Win32 bajo console. No se su código fuente y en este caso no debo saberlo. El juego consiste en cambiar variables para detectarlas, como Vida, Balas y Maná.

2) Con el programa llamado Cheat Engine 6.3 encuentro las direcciones de las variables que me hace falta. Este programa en realidad es para hacer trampas en los juegos como vida infinita y cosas de estas. En mi caso es diferente que diré al final.

3) Crear una DLL en Visual C++ 213 Win32 para detectar la variable Vida, bala y Maná. Para hacer pruebas, me conformmo con la variable Vida.

4) Con Visual C#, usando Windows Form. También se puede hacer con modo consola, en mi caso el Form. Poner un label1 que nombraré como label_vida en el Form1.Windows Form de C# debe ser capaz de leer la variable Vida.

5) Dejo claro que quiero crear una DLL en C++ Win32 porque trabaja más rápido que FramWork .net. Motor interno para cálculo C++ Win32 y Interfaz para ver los valores, cualquiera basta, en mi caso usarlo con Visual C#.

6) Cada vez que el juego cambia el valor de la variable Vida, en tu aplicación hecha con Windows Form C# y la DLL, debe mostrar en pantalla en tiempo real la variable Vida. Abajjo, una imagen del juego sencillo con la variable Vida a 100.



7) Aquí abajo, Windows Form con sus variables que debe leer este llamado HackMe.



8) Cuando en el juego cambia de 100 a 99, en el Windows Form de C# debe aparecer lo mismo. Están como sincronizado.

Eso es todo. Sabía que para mi es complicado, pero no tanto, jajajaja.

Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

tatania

hola me gustaria aprender como usar el CE para el juego Let's fish de facebook eh intentado cosas que explicas en los tutos pero nada me sale :( gracias

fekau

hola amigo estoy en el tercer tutorial no entiendo bien en la parte que agregas el add ax.A  de que parte viene el ax.A

Mad Antrax

Cita de: fekau en 17 Abril 2014, 18:05 PM
hola amigo estoy en el tercer tutorial no entiendo bien en la parte que agregas el add ax.A  de que parte viene el ax.A

A ver como lo explico.... El ejemplo de la parte 3 enseña como modificar un programa, concretamente lo que estamos haciendo es inyectar una instrucción ASM dentro de la memoria del ejecutable:

La dirección del dinero es ESI+34
Cuando "gastamos" dinero, la función 402C19 modifica ESI+34 con un MOV (almacena un valor), en el ejemplo hace:

mov [esi+34],ax

Es decir, coge el valor de ax y lo copia a nuestro dinero. En cada interacción, ax disminuye (seguro que si miras un poco arriba verás un sub). Para conseguir que el programa SUME en lugar de RESTAR hay que inyectar un código, por ejemplo add ax,A (lo que hacemos es sumar 10 monedas al registro ax, luego se ejecuta el mov).

Se entiende? No se como explicarlo de otra forma, jejeje. El add ax,A es solo un ejemplo, podría poner cualquier otro código ASM, por ejemplo cambiar el mov [esi+34]ax por un mov [esi+34],A
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.


ivan234

Amigo tengo algo que preguntar acerca de esto he visto por ahi unos trainers o unos launcher de CE mi pregunta es si existe la posibilidad de desglosar los mismos para saber como sacan los valores y modificar las variables del mismo o si existe un tutorial por que como sabras el principio fundamental de los juegos de face son flash y son algunos modificables, la razon de esto es por que siempre estan parchando los juegos de modo tal de que queda inutilizado el trainer con CE pero siempren los actualizan yo solo quiero aprender como se hace y como lo hacen tengo el conocimiento basico del CE y tu tutorial me ha ayudado.