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

[Guida] MHS - Autoassemble - Inject Code
(Questo messaggio è stato modificato l'ultima volta il: 25/07/2011, 23:24 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
Ciao a tutti,
con l'MHS eravamo rimasti all'autohack.

Oggi voglio farvi vedere una caratteristica molto molto carina di MHS, che non è utile solo per taroccare i giochi con MHS, è utilissima anche per "provare" in anteprima molto facilmente l'effetto di un nostro codice che andiamo a "infilare" nel processo.
Questo codice una volta provato con successo lo potremo mettere in una nostra hack, iniettarlo nel programma target etc.

La funzionalità che ci permette di fare questo sta nel disassebler, e si chiama AutoAssemble->Inject Code

In cosa consiste?
Praticamente ci posizioniamo su una linea di codice del gioco in esame e li iniettiamo il nostro codice, ovvero MHS ci metterà un JMP, un salto, ad un'area di memoria da lui allocata nel processo del gioco, e ci permetterà di editare il contenuto di questa memoria.
Praticamente, per chi le conosce, stiamo parlando di un codecave.

Le potenzialità di questa tecnica sono formidabili, in questo modo possiamo cambiare il flusso del codice del gioco in maniera molto piu elaborata rispetto ad un semplice NOP o cambio di JE in JNE o di un saldo condizionale in uno non condizionale etc

Possiamo ad esempio fare dei controlli su aree di memoria e cambiare dei registri in base all'esito o cose anche piu complesse.

Ma vediamo in pratica.

Se andate a vedere la seconda guida "MHS - Autohack uso del debugger" vedrete che avevamo trovato un indirizzo interessante:

1002FF5 INC DWORD PTR [100579C]

ovvero l'istruzione che ogni volta INCrementa di 1 il valore del tempo che si trova all'indirizzo 100579C.

L'ultima volta il taroccamento consisteva nel NOPpare quell'istruzione, ovvero non fargliela eseguire, in questo modo il timer restava fermo.

Bene, ora vediamo con questa nuova tecnica cosa potremmo fare.
Siccome già sappiamo l'indirizzo, non occorre passare di nuovo da tutto il processo per trovare l'indirizzo, quindi andiamo al succo:

1. lanciamo Winmine (campo minato, o prato fiorito) (sto parlando di windows XP)
2. lanciamo MHS
3. File - Open Process - Winmine
4. Tools - Disassembler

[Immagine: 01719-b95944c0-4fab-42b5-8cab-47b931022af1.png]

Ci si apre il disassembler che abbiamo visto l'altra volta:

[Immagine: 01719-3320887a-abdf-4b1b-a985-790048cc01f8.png]

5. andiamo all'indirizzo che ci interessa, ovvero andiamo col mouse nella finestra di destra dove sta il codice asm e premiamo il pulsante destro
6. nel menu che compare clicchiamo su "Go To..."
[Immagine: 01719-a46df104-697a-4d29-8118-1dfb779a468d.png]

7. scriviamo il nostro indirizzo e diamo OK

[Immagine: 01719-692da1d1-1d80-4746-af27-fe09d464600c.png]

Ora siamo sull'istruzione INC dell'altra volta, procediamo con la creazione del codecave

8. clicchiamo sulla linea dell'INC , tasto destro, AutoAssemble->InjectCode

[Immagine: 01719-d6ea58d5-c564-479d-821e-56e4c9d48f68.png]

La finestra che esce può fare un po' impressione, ma non spaventatevi,
il concetto è molto semplice, sta allocando della memoria e ci fa vedere che sovrascriverà la linea INC DWORD PTR con un JMP MyCode dove MyCode è una label che indica l'inizio della memoria allocata dove metteremo il nostro codice.

[Immagine: 01719-f16c1448-0bf8-4282-a0fc-9cf63d7600da.png]

Scendiamo nella finestra e vediamo questa memoria allocata cosa conterrà:

[Immagine: 01719-e3909c32-6bca-4097-a055-8461cbf9f944.png]

Vedete che c'è la label "MyCode", alla fine di tutta sta operazione il gioco dall'indirizzo 1002FF5 salterà (JMP) qui a MyCode,
qui ci metteremo il nostro codice, dopo di che l'esecuzione proseguirà raggiungendo Overwritten Code dove eseguirà il codice originale che già eseguiva prima, e che ora si trova qui perchè per sovrascrivere la linea INC con il JMP questi comandi erano andati persi.

una volta finito arriverà alla label "Exit" dove un jmp Return farà proseguire l'esecuzione da DOPO il JMP che MHS ha scritto al posto della INC

[Immagine: 01719-fad84fac-452d-490c-a317-883ed2e1e5b5.png]

Ok, però non abbiamo ancora messo il nostro codice.
Facciamo qualcosa di moooolto facile, tanto ci interessa solo capire il concetto che ci sta dietro, ora non dobbiamo implementare niente di complicato.
Visto che la taroccata iniziale era noppare l'inc per tenere fermo il timer, cerchiamo di ottenere la stessa cosa ma usando il codecave.
Un modo può essere quello ad esempio di mettere a 0 quella locazione di memoria:

[Immagine: 01719-ea7a834d-7dee-4d99-a16d-b9ed41150462.png]

Quindi cosa succederà ?
la locazione verrà messa a 0, dopo di che l'INC la incrementerà quindi il risulatato sarà che rimarrà ferma a 1.
Potremmo anche togliere l'INC ma non ci interessa, lasciamo com'è per far capire che il codice a volte può anche restare quello che è e noi ci limitiamo a CAMBIARE la situzione intorno ad esso per ottenere quello che vogliamo.

Bene andiamo avanti.
Ci esce il preview di quello che MHS farà ma al momento non ci interessa quindi premiamo "Inject" per farglielo fare.

[Immagine: 01719-b02dd61b-fa61-4bad-816a-d6ad0446d7c7.png]

Ci sparisce sta finestra e ci torna l'editor dell'injector, ma abbiamo finito, quindi premiamo "Cancel" tanto ormai l'injecting è avvenuto.

Non so se è un baco o cosa, ma non ho trovato un modo per aggiornare il disassemblato, infatti come vedete nella parte destra c'è ancora la vecchia INC DWORD PTR e non si vede l'injecting.
Allora clicchiamo sulla X della tab attuale :

[Immagine: 01719-9ecce208-d358-4a7f-802b-6d20e7b3f1cf.png]

E quindi la riapriamo con CTRL-P o dal menu:

[Immagine: 01719-be863b02-11c3-4732-a4f6-4dce9cfe4925.png]

Di nuovo tasto destro, Go To... e mettiamo 1002FF5

[Immagine: 01719-c9eca1cf-42b5-4d23-ae47-eff9cddbacc6.png]

Guarda guarda, ora si vede benissimo che al posto dell'INC ci sta un JMP ad un indirizzo (che punta alla memoria allocata da MHS) che altro non è che il MyCode di prima.

Per curiosità andiamo a sbirciare all'indirizzo a cui salta, quindi in questo caso a A60000

Quindi, tasto destro, GoTo..., e mettiamo A60000

[Immagine: 01719-4a39c4be-c349-4399-a67a-59467ee25862.png]

Ma riguarda riguarda!

Toh, un MOV DWORD PTR [100579C],0

che nemmeno a farlo apposta è quello che abbiamo scritto noi nel nostor codecave, poi si vede che esegue l'INC originale e quindi le altre istruzioni e poi sotto un bel JMP 1003008 che riporta l'esecuzione da dove siamo arrivati.

Purtroppo con questo esempio non sono stato molto fortunato nel senso che mi sono accorto solo dopo che c'è un RETN prima del JMP che vuol dire che al JMP non ci arriverà mai, fa niente l'importante è che si capisca la logica che sta dietro a tutto questo, poi si deve vedere da caso a caso.

A sto punto lascio un esercizio per i piu volenterosi.
Se eseguiremo cosi com'è il campo minato, sicuramente crasharà... cercate di capire perchè, la soluzione c'è ma non la scrivo qui perchè se no complico troppo la guida ai neofiti, comunque una volta implementata, il risultato finale è questo:

[Immagine: 01719-9b058102-66f9-4d92-bfc1-be806141121c.png]


ciao
Digger



digger
25/07/2011, 23:21
#1
Cerca


Messaggi in questa discussione
MHS - Autoassemble - Inject Code - da digger - 25/07/2011, 23:21
[Nessun oggetto] - da Luxor - 26/07/2011, 0:01
[Nessun oggetto] - da digger - 26/07/2011, 0:11
[Nessun oggetto] - da Skyline@69 - 26/07/2011, 7:16
[Nessun oggetto] - da digger - 26/07/2011, 10:24
[Nessun oggetto] - da Skyline@69 - 26/07/2011, 10:57
[Nessun oggetto] - da digger - 26/07/2011, 11:10
[Nessun oggetto] - da Skyline@69 - 26/07/2011, 11:34
[Nessun oggetto] - da digger - 26/07/2011, 12:26
[Nessun oggetto] - da Skyline@69 - 26/07/2011, 13:56

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [Guida] CE05 - Cheat Engine - Autoassemble in Table digger 4 1,147 15/10/2013, 22:41
Ultimo messaggio: digger
  [Guida] CE04 - Cheat Engine - Autoassemble Code Injection digger 17 2,414 22/09/2012, 0:05
Ultimo messaggio: digger
  Source code fullbright Pocciox 2 513 26/08/2012, 21:08
Ultimo messaggio: Pocciox



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