[Game-Hacking/Código] Programación de Cheats: hackeando el buscaminas

Iniciado por kiriost, 27 Mayo 2011, 01:00 AM

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

kiriost

Requisitos
* Haber leído el post anterior sobre el uso de Cheat-Engine que es el programar empleado para obtener las direcciones de memoria. El post sobre Cheat-Engine: http://foro.elhacker.net/hacking_avanzado/gamehacking_cheategnine_hackeando_el_buscaminas-t328847.0.html.

* Un compilador de C++ y un IDE. Podría ser Dev-C++ que viene con el compilador "gcc"(descargar de aquí) o Code::Block con la implementación de MinGW.
   
* Haber leído las publicaciones anteriores sobre Game-Hacking
   
* Saber programar en C++ o ganas de aprender a programar.

Abrimos el Dev-C++ o el IDE que estén usando para programar y vamos a crear un proyecto nuevo (buscar información acerca del Dev-C++ para crear proyectos). Ya tenemos el proyecto, sólo nos falta comenzar a escribir las líneas de código que darán origen a nuestro programa.
Okey! Todo bien hasta acá! Para programar la aplicación que nosotros queremos vamos a hacer uso de las famosas APIs de Windows, es decir, las funciones de las DLLs de Windows.

Aquí está el código:
Código (cpp) [Seleccionar]
#include <windows.h>
#include <stdio.h>

int main()
{
int n = 24;
DWORD pid;
HANDLE process;
HWND wnd = FindWindow(0, "Buscaminas");

GetWindowThreadProcessId(wnd, &pid);
process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

WriteProcessMemory(process, (LPVOID)0x0100579C, &n, 8, NULL);

CloseHandle(process);

return 0;
}


int n = 24; -> Declara una variable "Integer", es decir, que contiene un número decimal. Llama a la variable como "n" y coloca el valor "24" dentro de la misma. Ese valor será el que colocaremos, por medio de las APIs, dentro de la dirección de memoria del tiempo del Buscaminas.
DWORD pid; -> Declara una variable característica de Windows. La variable pasa a llamarse "pid" que hace referencia a "Process ID", es decir, el ID del procesos del Buscaminas que será abierto para guardar en "pid" el ID del proceso.
HANDLE process; -> Otra variable característica de Windows que declara a "process", que guardará la dirección del proceso del Buscaminas.
HWND wnd; -> Igual que la anterior. Pero guarda la "dirección" de una ventana que es obtenida con "FindWindow()".
FindWindow() -> Es una API de Windows que permite encontrar ventanas colocando el título de la misma. Ej.: FindWindow(0, "Título de ventana").
GetWindowThreadProcessId(wnd, &pid); -> API que encuentra el PID de un proceso a través de la búsqueda de una ventana del mismo.
OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid) -> Abre el procesos para escribir y leer sobre él.
WriteProcessMemory(process, (LPVOID)0x0100579c, &n, 8, NULL); -> API más importante para esta implementación. Escribe en la memoria del proceso cambiando un valor. Recuerdan la dirección de memoria que nos salió en Cheat Engine, la dirección de memoria del tiempo del Buscaminas, esa dirección que costo buscarla. Bueno, en esa dirección de memoria vamos a escribir para cambiar el valor del tiempo. Esa dirección era: 0x0100579c. Y ahí la tenemos, junto a ella está la variable "n", o sea, el nuevo valor que pasará a tener dicha dirección. Sencillo.
CloseHandle(process); -> Cerramos proceso.

Bueno, después de que tenemos el código, compilamos con Dev-C++ -> Ctrl+F9 y el proyecto se compilará, ahora tendremos un ".exe". Ctrl+F10 y el ".exe" se ejecutará. Bien, ahora abrimos el Buscaminas y ejecutamos el programa que acabamos de crear con este código, gracias al Dev-C++ y su compilador. Y WOOOWW!!! El valor del tiempo ha cambiadooo!!!!! Investiga más sobre esta técnica y sobre el código.

Proximo tutorial: Inyección DLL mediante CreateRemoteThread.
http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más

79137913

HOLA!!!

Bueno, creo que para "chitear" en el buscaminas hay que hacer asi, segui mis pasos...
1 abri el buscaminas
2 teclea "X Y Z Z Y"
3 teclea Shift - Enter

Aparecera un pixel negro o blanco en la esquina superior izquierda de la pantalla, si esta en negro cuando pasas por un boton debajo habra una mina, sino estara en blanco.

Ese es mi Game-Hacking/Sin Codigo Ejecucion de Cheats en el Buscaminas.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Edu

Jeje alguien aprendió la lección xD
Buen aporte kiriost, me hacia falta ver como se hacia desde codigo ;), haz otros así que estan buenos.

Akai

#3
Nadie se ha fijado que los includes estan MAL?

Código (cpp) [Seleccionar]
#include "windows.h"
#include "stdio.h"


Código (cpp) [Seleccionar]
#include <windows.h>
#include <cstdio>



Littlehorse

He borrado todos los posts sin sentido y los relacionados. Las discusiones en mal tono no tienen lugar en esta sección.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

kiriost

 ;D Lo lamento, tienes razon. Es que este post fue escrito principalmente para un sitio web, y aunque utilizara &gt; y &lt; me lo tomaba como < y > y me lo tomaba como código HTML. Por eso reemplace las <, > por comillas. Y me olvide cambiarlas.

Error mio.

Está perfecto Littlehorse  ::). Acepto críticas, pero de alguien que sepa criticar  ;-)
http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más

pucheto

Critica constructiva...

* La posicion de memoria del contador, lo unico que se es q nos costo conseguirla, la conseguimos con el cheat engine... jamas explicaste como...

* Este codigo no esta dirigido al q le interese aprender a programar pq con esto no se aprende a programar...

* Como no esta dirigido al q le interesa aprender a programar, sino q ya supones q conoce un poco, no te gastes explicando q es int main() e int n = 24.

* En general en este tipo de articulos tenes q organizarlo de esta manera:
   - Introduccion teorica ( explicas las bases de pq pasa lo q pasa, obvio q si ya supones algun conocimiento previo no lo tenes q explicar )
   - Desarrollo ( explicas la implementacion de la solucion, describis las funciones utilizadas etc )... Aca esta bueno q se ponga todo el codigo junto al final, o en varios pedazos q masomenos se autocontengan (ej: una funcion, una interfaz a una clase, etc ) ... No con una funcion partida en un monton de pedazos como se esta acostumbrado en muchos tutoriales.
   - Resultados y Conclusiones

* Y sobre todas las cosas, dado q esto no es a disney channel, podes tratar al lector como si tuviera mas de 5 años.

kiriost

Gracias por las críticas, la verdad que ayudan. Ahí le hice unos cambios. Es que en ralidad estos posts los pienso primero para publicarlos en mi web, así siempre olvido alguna modificación.

Krähne: no tiene nada que ver el foro. Lo que está mal es tu actitud y tu crítica. Puedes criticar, pero debes saber hacerlo. Yo nunca dije que era pro, experto o nada parecido en este tema. Sé que hay millones de programadores mejores que yo, pero ese no es motivo para que digas todo eso.
Yo simplemente lo que hice fue buscar información sobre las APIs de Windows y codear esto, o sea, lo hice de 0, sin mirar ni robar otro código, y eso me trae mucha satisfacción. Por lo que decidí publicarlo acá para compartirlo.
No soy experto ni me creo experto, soy newbie, porque la verdad que acá la mayoría somos newbies en algunas área y expertos en otras. Y para eso está la comunidad: para colaborar y ayudar.
Aprendé a criticar.

Citar* Y sobre todas las cosas, dado q esto no es a disney channel, podes tratar al lector como si tuviera mas de 5 años.
Jaja..tenés razón :)..Perdón, soy así, "profundizo" mucho
http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más


Karman

no es por ser hdp, pero esto está explicado en 200 lugarares, usás el cheat engine y sacás la dirección, no es por menospreciar tu trabajo pero el título está mal (por el nivel de conocimientos)... no es un cheat esto, es un simplemente editar de memoria de un programa... no confundas las cosas (a lo sumo es un trainer)

S2