[DUDA] ¿Cómo funciona un hack?

Iniciado por Zodiak98, 19 Diciembre 2016, 23:10 PM

0 Miembros y 1 Visitante están viendo este tema.

Zodiak98

Primero que nada, iba a postear esto en programación C/C++ pero como mi pregunta es algo general no sé si irá acá, por eso lo pongo acá, si no es así, por favor muévanlo a la zona correcta.

Ok, ahora al grano. Verán, ni siquiera sé cómo empezar. Mi duda yace en que no sé cómo relacionar un programa con otro. Me leí por ahí que hay que saber cómo está construido el programa que se quiere "hackear" primero que nada.

Bien, supongamos que tenemos un programa bastante absurdo, como este:

Código (cpp) [Seleccionar]

#include <iostream>
#include <windows.h> //Para la función Sleep.

int main() {
     for(int h = 0;;h++) {
          std::cout << "El valor de H es: " << h << std::endl;
          Sleep(1000);
     }

     return 0;
}


Ahora, ya sé cómo está construido, ¿cómo haría yo para que a través de otro programa que yo haga, la variable 'h' se reinicie a cero.

O sea, esa es mi duda, ¿cómo diantres se relaciona un programa externo con otro? Por ejemplo, más o menos como en los juegos, los shooters, que el personaje sea inmortal, o que dispare inmediatamente la mira detecte a otro personaje, etc...

Y ojo, que no pretendo crear programas maliciosos para dañar a alguien o a algo, o sea, simplemente tengo curiosidad en saber cómo carrizos funcionan esos programas.

Porque no tengo ni *** idea de cómo relacionarlos.

Un abrazo. :)

engel lex

La cosa es que al decir "como está construido" no se refiere a como está programado, sino a lo que queda después de compilar, como se manejan las memorias, como estádistribuido el programa, como el sistema operativo maneja las llamadas

Es importante el tener una idea como está programado, pero es más importante conocer cómo están armados los programas por dentro 
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

_TTFH_3500

Primero tiene que conocer en que posicion de la memoria RAM se guarda el valor, si es memoria estatica o dinamica y cuanto espacio ocupa, al igual que su valor y usar un programa para encontrar dicha dirección.

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

int main() {
int i = 0; // 4 bytes en 0x0022FE4C
while (true) {
i++;
printf("%d\n", i);
Sleep(5000);
}
return 0;
}


Luego reemplazar el valor con el que quieres:

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

int main() {
int* ptr = NULL;
ptr = (int*)0x22fe4c;
while (true) *ptr = -1;
// (i = -1) => (i++ = 0)
return 0;
}