No One Lives Forever’s CD-Check |
||
Data |
by DEATH_REAVER |
|
14/08/2003 |
Published by Quequero |
|
JE,JNE,JZ,JNZ,JG,JGE,JL,JLE |
No quequero ti ha detto di scrivere il codice in courier new e il resto in verdana, grazie per il tute ma giuro che la prossima volta se me lo ripresenti cosi lo sposto direttamente in /dev/null :) |
NOP,NOP,NOP,NOP,NOP,NOP |
.... |
E-mail: [email protected] |
.... |
Difficoltà |
(X)Totti ( )Normale ( )Assetato di potere ( )EINSTEIN |
…Al giorno d’oggi si fa una fatica terribile a premere il tasto “open” sul lettore cd, perciò GUERRA AL CD-CHECK!
CD-CHECK DEI “Bambini”
No One Lives Forever D-Day
Written by DEATH_REAVER
Introduzione |
Please insert cd
Chi di voi non conoscono questa famigerata messagebox? È arrivato il momento di farla sparire!
Tools usati |
23 tonnellate di lingotti d’oro da inviare al mio conto in Svizzera
OllyDBG(cercalo su protools)
Un Editor Esadecimale(HexWorkShop)
URL o FTP del programma |
Se riuscite a scaricarvelo (2 cd che pesano ognuno tipo 600 MB) ...................pfff
Ah! Mi sono dimenticato che il tutorial si base sulla “Game of the year edition”, non so se è la stessa con le altre versioni.
Notizie sul programma |
Un bel gioco con un cd-check che è na merda (fosse sempre così!)
Essay |
Cominciamo aprendo il file NOLF.exe con OllyDBG e mettiamo un BreakPoint su GetDriveTypeA. Attenzione: per mettere questo breakpoint usate la command-line, richiamabile con ALT+F1 ricordando che Olly è case-sensitive
Olly metterà i freni all’ istruzione all’indirizzo 004012DA:
004012D9: push ecx //salva il parametro RootPathName(lettara di identificazione del
Drive
004012DA: call GetDriveTypeA //dovrebbe essere chiaro…. E naturale
004012E0: cmp eax,00000005 //siccome che GetDriveTypeA è una funzione che restituisce un
valore(in eax), viene confrontato con 5 (valore lettore cd)
004012E3: jnz XXXXX //non mi ricordo l’indirizzo! In ogni caso salta se (vedi sopra)
eax non è uguale a 5
Lo stesso controllo viene eseguito qualche riga sotto (premi PAGGIù)
Ora si dovrebbe si dovrebbe noppare i salti dei due controlli (doppio click sul’istruzione e scrivere nop) ma provando il cracking non riesce
E che c’è successo??
CTRL+ F2 e si riparte da zero.
Controllando le istruzioni dopo le chiamate a GetDriveTypeA ci sono chiamate sospette:
00401307: call 004011D0
….
004013A7: call 004011D0
E cosa si vede qualche riga dopo nella parte dei commenti? OpenFile.
A che serve un OpenFile senza ReadFile e WriteFile?
Mettendo un breakpoint su OpenFile (basta premere F2 mente ci si è sopra)
Avviato il programma si vede (sempre nell’area dei commenti) che il programma cerca i due file principali (NOLF.rez e NOLF2.rez) su un lettore cd (E:\......)
Ma io quei file ce l’ho sull’Hardisk!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Quindi si è aggiunto un obiettivo: eliminare la ricerca del file.
Per questo inoltre a noppare i due salti dovremo noppare anche le due chiamate a 004011D0. Segnatevi gli indirizzi e gli opcodes e chiudete.
Ora il colpo di grazia:
FASE 1:
come prima cosa dobbiamo ricavarci gli offset(usate PEditor o per i più pigri WinDasm, per quelli che non c’hanno nemmeno voglia di fa doppio click sull’icona ve li dico io:
FASE 1:
-----Indirizzo-----------------------opcode----------------------offset---------------------
004012E3
75
00401307 E8 C4 FE FF FF 1307
00401383 75 39 1383
004013A7 E8 24 FE FF FF 13A7
FASE 2:
Ora aprite HexWorkShop (o un qualsiasi editor esadecimale) andate su edit e selezionate “goto” e inserite gli offset (una alla volta).
Es. mettendo 12E3 HexWorkShop vi catapulterà alla zona corrispondente (gli opcode sono gli stessi)
Adesso sostituite gli opcode con 90 (nop)
Quindi a 12E3 inserirete 2 nop (2 byte) ogni nop vale 1 byte!!!
Mentre a 1307 ne inserirò 5
Ora potete giocare senza toccare il tasto di aperture lettore cd.
Victoryyyyyyyyyyyyyyyyyyyyyyyyyyyyyy!
Note finali |
Un GRAZIE a:
Alla mia UIC (così non devo scrivere diecimila nomi)
Alla MailingList
E agli IronMaiden che mi hanno tenuto compagnia mentre scrivevo
DEATH_REAVER
Disclaimer |
Tutte le informazioni in questo tutorial sono a puro scopo didattico.
Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.