Discussione Reversing delle funzioni per creare un NoClip

cilibe56

Utente Bronze
18 Dicembre 2020
26
8
1
23
Salve, mi trovo qui seppure non esperto di game hacking ma mi ci sto come tanto da veramente poco sto imparando il game hacking su un gioco chiamato pwn Adventure. Per ora sono riuscito a creare una specie di hack che non mi permette di morire, di consumare mana per l'utilizzo di armi, e di non consumare proiettili quando sparo, orai trovo a voler sviluppare un NoClip(cioè quando premo un hotkey posso attraversare pareti e pavimenti)
 
Salve, mi trovo qui seppure non esperto di game hacking ma mi ci sto come tanto da veramente poco sto imparando il game hacking su un gioco chiamato pwn Adventure. Per ora sono riuscito a creare una specie di hack che non mi permette di morire, di consumare mana per l'utilizzo di armi, e di non consumare proiettili quando sparo, orai trovo a voler sviluppare un NoClip(cioè quando premo un hotkey posso attraversare pareti e pavimenti)
Bravo ma non capisco il senso del thread.
Vuoi porre una domanda? O vuoi semplicemente mostrare il tuo lavoro?
Nel secondo caso potresti mostrare parte del codice per abbellire il thread.
 
Bravo ma non capisco il senso del thread.
Vuoi porre una domanda? O vuoi semplicemente mostrare il tuo lavoro?
Nel secondo caso potresti mostrare parte del codice per abbellire il thread.
La mia domanda è nel codice cosa io dovrei modificare?
C'è qualche funzione che mi permette non non attraversare i muri?
 
Se provassi a scrivere un piccolo gioco senza engine pronto ti troveresti il problema di come non far passare il player attraverso il muro. Di solito collegato ai tasti di movimento c'è il cambiamento delle coordinate e dei controlli per vedere se un muro ti blocca in una delle direzioni (collisioni). Quello che puoi fare è trovare le coordinate del player in memoria, trovare dove vengono modificate nel codice e capire com'è fatto il controllo per sapere se c'è un muro e non puoi proseguire su uno degli assi X Y o Z. A quel punto puoi alterare il controllo modificando dati o patchando il codice in modo da far modificare le coordinate anche in presenza del muro.
 
  • Mi piace
Reazioni: cilibe56
Se provassi a scrivere un piccolo gioco senza engine pronto ti troveresti il problema di come non far passare il player attraverso il muro. Di solito collegato ai tasti di movimento c'è il cambiamento delle coordinate e dei controlli per vedere se un muro ti blocca in una delle direzioni (collisioni). Quello che puoi fare è trovare le coordinate del player in memoria, trovare dove vengono modificate nel codice e capire com'è fatto il controllo per sapere se c'è un muro e non puoi proseguire su uno degli assi X Y o Z. A quel punto puoi alterare il controllo modificando dati o patchando il codice in modo da far modificare le coordinate anche in presenza del muro.
Grazie, vediamo se riesco a mettere in atto questa questione delle collisioni.
 
Ultima modifica:
Hey ciao! In realtà puoi già attraversare un muro modificando le coordinate del player con quelle che ti portano subito dopo la parete che inizialmente si trova di fronte a te. Ti basterà definire lo spessore del muro in pixel e creare un hotkeys che quando viene richiamato "teletrasporta" il player di y+spessore_del_muro o y-spessore_del_muro in base alla direzione del player. Ovviamente per attraversare un muro a destra o sinitira puoi fare le stessa cosa con x+spessore_del_muro con dir verso DESTRA e x-spessore_del_muro con dir verso SINISTRA. Quindi ricapitolando, hai bisgono di una variabile che tenga conto della cam del player (dir), le variabili delle coordinate del player, e lo spessore del muro. Se volessimo fare un esempio in C:
C:
enum CAM{UP,DOWN,LEFT,RIGHT}
struct player{
    float x;
    float y;
    float cam;
    /...
}
typedef struct player _p;
_p get(DWORD struct_player_address);
float get_player_x(_p myplayer){
    float x = 0;
    RadMemoryPorcess(...&myplayer.x);
    x = myplayer.x;
    return x;
}
float get_player_y(_p myplayer){
    float y=0;
    RadMemoryPorcess(...&myplayer.y);
    y = myplayer.y;
    return y;
}
float get_player_cam(_p myplayer){
    float cam=0;
    RadMemoryPorcess(...&myplayer.cam);
    cam = myplayer.cam;
    return cam;
}

void teleport(_p myplayer){
    int wall_size = X
    float cam = get_player_cam(myplayer);
    switch(my_player.cam){
        case UP:
            int new_Y = myplayer.y+wall_size;
            WriteMemoryProcess(..address_player_x,new_Y..);
            break;
        case DOWN:
            int new_Y = myplayer.y-wall_size;
            WriteMemoryProcess(..address_player_x,new_Y..);
            break;
        case LEFT:
            //
            break;
        case RIGHT:
            //
            break;
    }
}

int main(){
   
    enum hack_list{TELEPORT,INFINITE HEALT,..}
    DWORD player_struct = //
    _p my_player = get(player_struct);
   
    int choose = 0;
   printf("Hack list\n");

    while(true){
   printf(" 0. TELEPORT\n");
   printf(" 1. INFINITE_HEALT\n");
   printf("> ");
        scanf("%d",&choose);
        switch(choose){
            case TELEPORT:
                teleport(my_player);
                break;
            case INFINITE_HEALT:
                break;
            default:
                printf("error!");
                exit(1);
        }
       
    }
   
   
}
A questo codice manca la parte per attaccarsi alla memoria del gioco. Spero di esserti stato d'aiuto!