Benvenuto! Per postare e godere delle funzionalità del forum registrati, occorrono pochi secondi ed è gratis!

[Guida] Warrock MessageBox
(Questo messaggio è stato modificato l'ultima volta il: 29/05/2012, 1:03 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Reputazione:
106

Mix: 3,737
Ciao gente,
oggi mi stavo facendo i fatti miei quando ho visto gli address postati da arow (grazie arow), sinceramente penso che siano gli stessi di prima visto che a me warrock non si è aggiornato Happywide
comunque il punto è un altro, negli addy ho fatto caso a questo:

#define dwASM_MESSAGEBOX 0x00418B8D // 23 April 2012

qui sorge la domanda, cosa sarà mai?
e la seconda, ma come si usa?

alla prima rispondo dicendo che è l'indirizzo della funzione che se chiamata visualizza a video una finestrella con un messaggio di testo

alla seconda rispondo tra poco.

Intanto vediamo cosa si ottiene riuscendo ad usarla:

[Immagine: 02318-9add303a-1173-49e7-852c-f3acc45cdff9.png]

e adesso vediamo come procedere.
Se guardiamo in IDA che faccia ha la funzione a quell'indirizzo vediamo questo:

[Immagine: 02318-d82db1ec-e6d0-4dde-8411-f462744daf56.png]

come si vede (parte in alto, arg_0), la funzione si aspetta un solo parametro, ovvero il messaggio da visualizzare, quindi possiamo immaginare che la dichiarazione della funzione sarà qualcosa del genere:

Codice:
void (*msgbox)(char* testo);

cosi facendo abbiamo dichiarato "msgbox" come un puntatore ad una funzione che prende un puntatore a caratteri come parametri e che non torna nessun valore (void)

però sto puntatore lo dobbiamo inizializzare con l'indirizzo della funzione (quello trovato negli addies di arow) e quindi facciamo cosi:

Codice:
void (*msgbox)(char* testo)=(void (__cdecl *)(char*))0x00418B8D;

come si vede davanti all'indirizzo ho messo quello che si chiama "casting" ovvero devo dire al compilatore a che "tipo" deve convertire il numero che gli ho passato (0x418b8d)
vediamo meglio, controllando innanzitutto come appare di solito un casting molto piu semplice, ad esempio (visto spesso nelle hacks) :

Codice:
DWORD dwPlayerPtr = (DWORD*)0xA01808;

Questo dice "converti il numero 0xA01808 in puntatore a DWORD e assegnalo alla variabile dwPlayerPtr"

adesso vediamo quello piu complesso di prima

Codice:
(void (__cdecl *)(char*))

questo dice di interpretare il numero a destra a "puntatore a funzione che prende un parametro (puntatore a caratteri) e che non torna niente (void)"

e quel "__cdecl" ?

quello serve a specificare la "calling convention" della nostra funzione.
E' molto importante, perchè se per caso chiamassimo la funzione con la calling convention sbagliata il gioco crasherebbe.
Infatti la calling convention serve a stabilire tra le altre cose come vengono passati i parametri, chi si occupa di togliere i parametri passati dallo stack etc.

Come mai __cdecl allora?
perchè dando un occhio con IDA si direbbe che è il modo usato da warrock per chiamare la funzione, vediamo un esempio di chiamata:

[Immagine: 02318-c2e62df9-00b8-4afe-91c1-a61357660c1d.png]

come si vede viene pushato l'unico parametro (il testo da visualizzare) e dopo la chiamata troviamo un pop che si occupa di rimuovere il parametro.
Bene questo comportamento assomiglia tanto alla calling convention del __cdecl

dalla documentazione microsoft, riporto solo quello che ci interessa:

Codice:
Element                              Implementation
Argument-passing order               Right to left
Stack-maintenance responsibility     Calling function pops the arguments from the stack

quindi riassumendo vediamo nella nostra hack come andiamo a chiamarla sta funzione:

Codice:
        void (*msgbox)(char* testo)=(void (__cdecl *)(char*))0x00418B8D;
        msgbox("Ciaaaao HackMix!! :D ");

detto questo vi saluto sperando che lo abbiate trovato interessante Happywide

ciao
Digger


digger
24/03/2012, 13:06
#1
Cerca

maurow
Messaggi: 6,041
Discussioni: 2,066
Registrato: 03-2011
Reputazione:
133

Mix: 8,107
bella sta cosa , e bella spiegazione digger .. grazie.. Happywide


La libertà non si insegna, è una scelta individuale.
24/03/2012, 14:25
#2
Cerca

1 Life, 1 Avatar <3
Messaggi: 9,074
Discussioni: 271
Registrato: 08-2011
Reputazione:
77

Mix: 0
Io già la sapevo come sono prooooo Smile

27/03/2012, 14:54
#3
Cerca


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [Source]WarRock Bypass Cyanstack 15 2,038 24/10/2013, 14:29
Ultimo messaggio: catoplepas
  Far partire warrock con sandboxie catoplepas 14 3,446 16/10/2013, 0:22
Ultimo messaggio: catoplepas
  DirectX10 WarRock StormCity 37 4,048 10/05/2013, 19:05
Ultimo messaggio: Pocciox



Utenti che stanno guardando questa discussione: 1 Ospite(i)