Ciao a tutti,
l'ultima volta ho postato una guida di base per far conoscere MHS.
( vedi qui:
[Per vedere i link devi REGISTRARTI.]
)
Prima vi dico cosa vogliamo ottenere per aver chiare le idee, poi proseguiamo.
L'idea è di usare MHS per far si che il timer di Prato Fiorito (winmine) resti fermo, cosi possiamo vincere facendo i fighi che abbiamo finito in 1 secondo

Lo so è una cavolata, ma serve giusto per dimostrare alcune caratteristiche di MHS
Voi direte, ma non l'hai già fatto con la prima guida?
Si, ma li lockando la memoria, questa volta invece vedremo una cosa molto piu interessante, che assomiglia a quello che si fa con le hack di warrock (il famoso WriteAsm che molti conoscono).
Ovvero cambieremo il codice del gioco (winmine) per dirgli che NON deve incrementare il valore del timer.
Riprendo quanto detto nella prima guida, però cambio il finale, ovvero, facciamo tutto come nella guida precedente, ma ci fermiamo al momento in cui abbiamo trovato l'indirizzo che ci interessa e lo abbiamo doppiocliccato facendolo comparire nella finestra di destra.
Bene, a questo punto avevamo questa situazione:
ok, volendo possiamo anche rinominare quell'indirizzo, ma di fatto non è obbligatorio cosi possiamo procedere con un tasto destro sull'indirizzo, compare un menu contestuale come questo:
selezioniamo la voce
Find what writes this address (Attaches the debugger)
Cosa stiamo per fare con questa selezione?
Semplice, stiamo collegando il debugger interno di MHS al processo winmine.exe al fine di scoprire quale parte del codice di winmine.exe va a
scrivere a quell'indirizzo di memoria che abbiamo trovato.
Perchè cerchiamo chi ci scrive?
Semplice, perchè se troviamo chi ci scrive possiamo modificarlo in modo che non ci scriva piu
Procediamo
Allora la finestra che esce è tipo questa qui:
Dallo screenshot non si vede ma siamo nella tab che si chiama "AUTOHACK"
A sinistra c'è il nostro indirizzo di memoria che abbiamo trovato prima, subito sotto al momento non c'è niente ma ci sarà tra poco, a destra invece vediamo del codice assembly di non sappiamo cosa ma non ci interessa al momento.
Clicchiamo (singolo click) sull'indirizzo a sinistra.
Appena il codice andrà a riscrivere la memoria, in basso comparirà l'indirizzo dove si trova il codice responsabile della modifica del nostro valore, come si vede qui:
Notate nella colonna "Disassembly" che c'è un'istruzione che inizia per INC ebbene questa si occupa appunto di incrementare un valore (memoria o registro).
Andiamola a vedere nel suo contesto.
Tasto destro sull'istruzione, dal menu
Goto in current tab
cosi facendo ci comparirà sulla destra il codice del programma e selezionata l'istruzione incriminata:
Ora vogliamo cambiare quell'istruzione per fare in modo che il gioco NON la esegua piu, quindi sulla riga tasto destro e selezioniamo
Assemble
Nella finestrella Assemble che esce viene riportata la riga di codice per permetterci di editarla:
Ora al posto del codice esistente ci scriviamo
NOP che vuol dire No Operation , ovvero, non fare niente, premiamo quindi OK
Una volta dato l'ok vediamo che il codice nella finestra è cambiato e al posto dell'INC abbiamo una serie di NOP:
Facciamo un passo indietro a prima della modifica.
Vorrei farvi notare che se dovete mettere un NOP (e non altre istruzioni) potevate anche semplicemente selezionare la voce
NOP selected:
Se ora andiamo avanti a giocare vedremo che il timer resterà sempre fermo.
Anche ricominciando la partita il timer resterà fermo a 1 come si vede qui:
perchè giustamente ormai il codice è modificato e non torna piu a posto.
Alla prossima
ciao
Digger