Zoom Icon

Billion Chords 1.0

From UIC

Patching Billion Chords 1.0

Contents


Billion Chords 1.0
Author: Eu4ia
Email: eu4ia.3(at)gmail.com
Website:
Date: 29/08/2008 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Flag Italian.gif
Comments: Visual C ++



Introduction

Iniziamo col dire che sono un newbie ed è il secondo Tutorial che scrivo (ri-rabbrividiamo!) ... il programma in questione contiene un "database" visivo che mostra tutti gli accordi possibili ed immaginabili per chitarra. Scritto in Visual C ++.


Tools


Hiew o altro editor esadecimale
PEiD - Identifica eventuali Packers e/o linguaggio di programmazione
OllyDBG 1.10 - Ottimo Debugger


Link e Riferimenti

http://www.chordeditor.com/ Target - Billion Chords 1.0



Essay

Aprendo il programma con PEiD ci viene detto che è scritto in Visual C ++ ma non packato, meno male eheh.
Lanciamo il programma che ci mostrerà subito degli accordi. Tentiamo di attivarlo tramite il menu "Activate Billion Chords -> Enter Activation Code" (segnamoci il serial number che viene visualizzato potrebbe tornarci utile).
Inseriamo 0123456789 come Activation Code e dopo aver premuto il pulsante OK leggiamo il messaggio d'errore ... semplicemente "Invalid Activation code"! Segnamoci anche questo ;)

Chiudiamo il programma.

Apriamo il programma tramite OllyDBG 1.10. Clicchiamo sul codice col tasto dx del mouse e facciamogli cercare tutti i riferimenti di testo tramite menù contestuale "Search for -> all referenced text string".
A questo punto cerchiamo la stringa contenente l'errore che ci ha dato inserendo l'activation code: la troveremo in 2 indirizzi diversi, in 0041861F ed in 0041B9BE. Segnamoceli per sicurezza.
Possiamo notare subito che vicino a queste stringe è visibile anche il messaggio di attivazione avvenuta con successo: "You have successfully activate your sofware. Thank you.".
Direi che siamo sulla buona strada ;)

Torniamo sul codice ed andiamo al primo indirizzo 0041861F, di seguito la parte di cui ci occuperemo con 3 riferimenti evidenziati in verde.


00418583 |. BA 0FCC4C00 MOV EDX,004CCC0F  ; ASCII "Enter Activation Code"
00418588 |. 8D85 14FEFFFF LEA EAX,[LOCAL.123]
0041858E |. E8 85DF0900 CALL 004B6518
00418593 |. FF85 E8FDFFFF INC [LOCAL.134]  ; |
00418599 |. 8B00 MOV EAX,DS:[EAX]  ; |
0041859B |. 8B55 E4 MOV EDX,[LOCAL.7]  ; |
0041859E |. 59 POP ECX  ; |
0041859F |. E8 94820600 CALL 00480838  ; \Billion_.00480838

... ... ... ( altre istruzioni) ... ... ...

004185F6 |. 84C9 TEST CL,CL
004185F8 |. 0F84 EE000000 JE 004186EC
004185FE |. 6A 00 PUSH 0
00418600 |. 8D85 BAFDFFFF LEA EAX,SS:[EBP-246]
00418606 |. E8 BD030000 CALL 004189C8
0041860B |. B2 02 MOV DL,2
0041860D |. E8 EA030000 CALL 004189FC
00418612 |. 66:8B08 MOV CX,DS:[EAX]
00418615 |. 51 PUSH ECX
00418616 |. 66:C785 DCFDFFF>MOV WORD PTR SS:[EBP-224],1DC
0041861F |. BA 26CC4C00 MOV EDX,004CCC26  ; ASCII "Invalid Activation Code."



Il primo riferimento evidenzia il punto in cui il programma chiede di inserire il codice di attivazione.
Il secondo è il controllo sul codice da noi inserito.
Il terzo evidenzia il punto in cui non vorremmo trovarci dopo il controllo sul nostro codice.
Posizioniamoci sull'indirizzo di controllo e noteremo che se quel salto venisse preso (notate la freccia sulla sinistra che ci porterebbe in basso) ci troveremmo in 004186EC, saltando il messaggio di errore ma protandosi in un punto in cui sembrerebbe che legga il registro di sistema.
Effettivamente viene cercata una chiave chiamata KEY in "HKCU\Software\KZAR\ChordEditor\".


Più in basso, nel codice, c'è però un RETN (preceduto da un controllo JE) che farebbe uscire dalla procedura prima del punto in cui viene mostrato il messaggio di avvenuta attivazione del prodotto, di seguito quella parte di codice con dei riferimanti già evidenziati:


004187FF |. /74 01 JE SHORT 00418802
00418801 |. |C3 RETN

00418802 |> \8B85 C8FDFFFF MOV EAX,[LOCAL.142]

... ... ... ( altre istruzioni) ... ... ...

004188CC |. 51 PUSH ECX
004188CD |. 66:C785 DCFDFFF>MOV WORD PTR SS:[EBP-224],230
004188D6 |. BA 6CCC4C00 MOV EDX,004CCC6C  ; ASCII "You have successfully activate your
sofware. Thank you."



Preoccupiamocene eventualmente dopo ... per ora torniamo in 004185F8 ovvero all'indirizzo dove viene fatto il controllo sul codice e tramite F2 mettiamo un breakpoint e mandiamo in esecuzione il programma.
Tentiamo di attivarlo tramite un codice fittizio e premiamo ok.
Tornati in olly proviamo a fargli comunque eseguire il salto o modificando quel salto condizionale da JE a JNE oppure cambiano il Flag Z (zero) da 0 a 1 nella parte a destra del codice dove sono specificati i registri ed i flag.
Premiamo ora F9 ovvero continuiamo l'esecuzione del programma ed andiamo a vedere il risultato.
Se abbiamo fatto tutto bene il programma dovrebbe mostrare il messaggio: You have successfully activate your sofware. Thank you.
Che dite ci siamo riusciti? Controlliamo!
Chiudiamo tutto e lanciamo il programma ... WoW possiamo finalmente urlare "YES WE CAN !!!"
A questo punto non ci resta che modificare 1 byte nel file exe originale, andiamo all'indirizzo 004185F8 dove dovremmo trovare i 2 byte 0F84 del JE; cambiandoli in 0F85 otterremo un JNE.
Salviamo il file ed il gioco è fatto!


Note Finali

I miei ringraziamenti vanno a:
- Quequero per un fatto di rispetto per il cervellone che si ritrova ;) e per aver creato la UIC
- Zero_G che mi ha introdotto in questo mondo meraviglioso quanto complesso
- Tutti voi che mi avete seguito nonostante la premessa e a tutti i ragazzacci del forum!
- Una pacca sulla spalla anche a me ;)

Eu4ia


Disclaimer

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevole e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.