No One Lives Forever’s CD-Check

Data

by DEATH_REAVER

 

14/08/2003

UIC's Home Page

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 1 in your drive!!!

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 3F                       12E3     

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