Xgrimator CrackMe
Reversing under PalmOS..impariamo a usare il debugger!

12-05-2003

by Pincopall

 

UIC's Home Page

Published by Quequero


Ma nei film porno, il protagonista e il montatore...

Grazie pincuzzo, e' proprio divertente il reversing su Palm :), colgo pure io l'occasione per salutare xgri che non si vede da molto su #crack-it

... sono la stessa persona? :-pp

....

Home page se presente: http://pincopall.has.it/
E-mail: [email protected]
Pincopall on #crack-it #hackmaniaci #asm ecc.. Su irc.azzurra.org

....

Difficoltà

(P)NewBies ( )Intermedio ( ) Avanzato ( )Master

 

Allora, mi sono arrivate un sacco di e-mails riguardo l'utilizzo di un debugger per il reversing sotto palmOS, alcune sono arrivte anche nella ML della UIC chiedendo che qualcuno facesse un tutorial a riguardo...bene, eccolo qua =), come target usiamo l'unico CrackMe per palmOS che c'è alla UIC fatto dal nostro amico spagnolo Xgrimator che ha pure una bella crew che si interessa d palm; troveremo il seriale giusto per registrarci e poi vedremo pure come modificare il crackme perchè ci registri con qualsiasi serial =).


Xgrimator CrackMe
Reversing under PalmOS..impariamo a usare il debugger!
Written by Pincopall

Introduzione


Come detto sopra, troveremo il serial (fisso) per far apparire la Msg Box di congratulazioni e poi modificheremo il programma in modo che ci ritenga registrati con qualsiasi serial. Lo scopo principale del tutorial però è quello di insegnare quanto meno le funzioni principali del debugger, quindi è su quello che il testo sarà orientato =)

Tools usati


SouthDebugger v1.7 --- E' questo il debugger che useremo, secondo me il migliore al momento.
PilotDis -- Un disassemblatore
Prc2Bin --- separa le varie funzioni del programma in files; serve per individuare form e di conseguenza i punti dove vengono richiamate.
POSE -- Il PalmOS Emulator.
La ROM d un palmare, io ho usato quella d Pastore dhe trovate alla UIC

URL o FTP del programma


E' un CrackMe, lo trovate alla UIC nella sezione CrackMe, è l'unico per l'ambiente PalmOS ed è ovviamente by Xgrimator =)

Notizie sul programma


E' unCrackMe che si registra tramite serial, il serial, come si scoprirà, è fisso e nn dipende dal nome =)

Essay


Dunque partiamo, facciamo partire il POSE, clikkiamo il pulsante destro e installiamo la nostra nuova applicazione, ovvero l'Xgrimator CrackMe, lo lanciamo e vediamo che ci chiede di inserire il nostro nome ed il nostro serial, ne mettiamo 2 a caso e premiamo "Get It!" a meno di un culo pazzesco che vi avrà fatto indovinare il serial al volo, la risposta sarà una message box in cui vi viene dato anche dei "Son of a bitch" :-p. Potremmo, sapendo quali sono le API più usate per il confronto di serial e la creazione di Message Box, già usare il debugger, ma siccome noi queste API nn le conosciamo =)) ci facciamo tutto il percorso per benino =).
Dunque copiamo il file xgrCrackme1.prc nella stessa cartella sia del PilotDis che del Prc2Bin.
DA prompt di DOS andiamo nella cartella del PilotDis e digiatiamo "PilotDis xgrCrackme1.prc" otterremo nella stessa cartella un file .s da aprire con il notepad che è il disassemblato del crackme, già quiì potremmo cercare alcune parole tipo "bitch" :p per vedere quando il programma le usa, ma facciamo tutti i passaggi senza badare al fatto che questo è un CrackMe e per cui d stringhe ce ne sono abbastanza poche, e usiamo anche il Prc2Bin =).
Andiamo allora, sempre dal prompt, nella cartella del Prc2Bin, e digitiamo "Prc2Bin xgrCrackme1.prc" quello che otteniamo è una marea di file .bin, da leggere anch'essi con il notepad in cui sono riportati i vari form e le varie stringhe che il prog usa, apriamo dunque ogni file finchè non troviamo quello contenente la stringa d errore, e troviamo che il nostro "ricercato" è il file Talt03e9.bin
Andiamo allora dentro il disassemblato che abbiamo ricavato poco fa e cerchiamo la stringa "03e9", ovviamente questo numero lo troveremo parekkie volte ma solo una volta è quella giusta, ed è facile riconoscerla =) :


00000a9e PEA -11(A6) 00000aa2 MOVE.W #1007!$3ef,-(A7) 00000aa6 BSR L35 00000aaa ADDQ.L #8,A7 00000aac PEA L45 00000ab0 PEA -11(A6) 00000ab4 sysTrapStrCompare --- Questa call confronta i seriali 00000ab8 ADDQ.L #8,A7 00000aba MOVE.W D0,D3 00000abc MOVEQ #0,D4 00000abe CMP.W D4,D3 00000ac0 BNE L31 --- Se nn sono uguali si salta al punto L31 ovvero ERRORE! 00000ac4 MOVE.W #1002!$3ea,-(A7) --- Se son uguali si arriva fino al BRA.. 00000ac8 sysTrapFrmAlert 00000acc ADDQ.L #2,A7 00000ace BRA L32 --- ..e da quì alla msg box OK! =)

00000ad2 3f3c03e9 L31 MOVE.W #1001!$3e9,(A7) --- Quì viene formata la msg box d'errore


00000ad6 sysTrapFrmAlert 00000ada ADDQ.L #2,A7 00000adc L32 MOVE.W #1007!$3ef,-(A7) --- Msg Box di congratulazioni =) 00000ae0 BSR L34 00000ae4 ADDQ.L #2,A7 00000ae6 MOVE.W D0,D3 00000ae8 MOVEQ #0,D4 00000aea CMP.W D4,D3 00000aec BNE L33

Ok ,dai commenti al codice dovreste capire tutto =) ora sappiamo una tipica call che i prog usano per confrontare i serial ovvero sysTrapStrCompare, sarebbe utile sapere il seriale con il quale viene confrontato quello da noi immesso, e qua dobbiamo usare il debugger =), il programma lo potremmo pure patchare modificando quel BNE L31 con 2 NOP e trasformando quindi l'opcode del BNE L31, che è 66000010 (hihihi ve lo ho cancellato dal codice riportato :pp) con 4E714E71, essendo 4E71 l'opcode del NOP, ma vedremo come patchare il prog utilizzando sempre il southDebugger =).
Dunque facciamo partire il southDebugger, e per farlo partire avete bisogno del Java Runtime Environment v1.4 (JRE), che potete trovare su http://java.sun.com/j2se/1.4/download.html, all'avvio premiamo su "Connect" lasciando nello spazio dell'IP "127.0.0.1" ovvero noi stessi =) visto che è sul nostro pc che il POSE sta girando =) e vediamo che in basso a destra compare la scritta "Connected, waiting for breakpoint..", ok, noi vorremmo brekkare su sysTrapStrCompare, ma ancora non possiamo perchè ancora nn siamo dentro l'XgrCrackme.
Facciamo dunque partire il CrackMe, inseriamo nome e serial, ma ancora dobbiamo far si che il southDebugger si attivi sul CrackMe, praticamente, per chi viene dal reversing sotto win, dobbiamo ancora premere Ctrl+D, ma quì non ci sono combinazioni di tasti da premere, bensì, per far cominciare il debugger a lavorare sul POSE e poi sul programma che vogliamo, esiste la cosiddetta graffiti-debug-shortcut, ovvero, con il mouse disegnamo nel graffiti-field, ovvero il campo in basso, i seguenti simboli, i primi 3 nel campo delle lettere, e il secondo nel campo dei numeri, tracciando con il mouse vedrete apparire i simboli subito dietro ai numeri del nostro dummy serial, ma come avremo finito di digitare l'ultimo, spariranno e vedrete che il southDebugger "popperà" e ci permetterà di piazzare i breakpoint, ma abbiate pazienza =), intanto..questi sono i simboli e il PalmOS li identifica come "Scelta Rapida" "." "." "1":


break

Dunque, una volta disegnati questi simboli southDebugger popperà e potremo cominciare ad usarlo per bene=); per prima cosa dal menù "Window" creaimo una nuova "Breakpoint Window", e quì, andando in "Trap breakpoints" e premendo sul tasto "..." scegliamo su quale API settare i breakpoint, c'è da notare che se noi nn abbiamo ancora fatto "agganciare" il debugger al POSE disegnando quei simboli, anche premendo "..." non compare niente, visto che il southdebugger starà ancora aspettando un breakpoint; ovviamente l'API su cui setteremo il bp sarà sysTrapStrCompare, dunque scegliamola dall'elenco e clikkiamoci sopra; a questo punto premiamo F5 (o se preferite "Go" dal menù "Execution") e torniamo al POSE inserendo (se nn l'avete già fatto) il dummy serial e premendo "Get It!", prima dell'apparizione della beggar off il SouthD popperà di nuovo; aprendo ora una "New memory-based disassembler window" sempre dal menù "Window" ci troveremo alla riga dove viene chiamata la sysTrapStrCompare, quello che ci serve adesso è sapere quali stringhe vengano confrontate, e per saperlo apriamo una "New trap-stack window" che ci farà vedere che ad essere confrontati sono il nostro seriale "11661166" (a caso ovviamente =) e "300773".
Ok allora, togliamo il breakpoint, premiamo F5, torniamo al POSE ,dove l'xgrcrackme ci avrà dato dei "son of a bitch", chiudiamo la msg box d'errore e mettiamo il serial 300773 e....TADAAA la Message Box "giusta" appare dandoci dei pirla perkè abbiamo pagato per un prog che nn fa niente ed avvisandoci pure ke 300773 non è nient'altro che la data di nascita di Xgrimator che quindi tra un paio di mesi farà 30 :).

Ok, abbiamo trovato il serial, proviamo a patchare da debugger ora, per far si che il CrackMe ci consideri esatto ogni serial dunque, per far si che il southD "agganci" d nuovo il POSE e poi di conseguenza l'Xgrim, c'è da rifare tutta la pappardella di prima, ovvero disegnare i simboli e ripiazzare il bp su sysTrapStrCompare dato che prima lo avevamo tolto per goderci in pace l'apparizione della msg box di congratulazioni =).
Dunque, una volta che siamo pronti a ripartire con il southD, e che lo abbiamo fatto brekkare su sysTrapStrCompare inserendo un serial a caso e premendo su "Get It!", apriamo una "New memory-based disassembler window" andiamo sulla stringa del BNE L31, premiamo il tasto destro e selezioniamo "Change memory context" a questo punto cambiamo l'opcode da 66000001, quello del BNE L31, a 4E714E71, quello dei due NOP.
Premendo F5 e tornando al POSE, vedremo apparire la Message Box di complimenti invece di quella d'errore pur avendo inserito un serial errato.
Ovviamente però a SouthDebugger chiuso il tutto tornerò come prima, cosiccome succede per le modifiche fatte usando SoftIce per intenderci, vediamo allora, sempre da SouthD come far restare permanenti le nostre modifiche.
Rifacciamo partire l'XgrimCrackMe, rifacciamo poppare il southDebugger con il metodo che oramai conosciamo, e creiamo una "New file-analyzer window" da quì scegliamo il nostro file e vediamo che sulla destra della "File Analyzer window" ce ne appare il disassemblato, prima di fare qualsiasi modifica premiamo "Create Backup File", in questo modo southD creerà un file di backup chiamato xgrcrackme.prc.original, ora facciamo la nostra modifica inserendo i due NOP al posto del BNE e rendiamola effettiva checkando "Apply all memory changes to this file"; abbiamo finito, possiamo chiudere il debugger, e vedere come ora, inserendo qualsiasi serial, il programma ci dia del "Silly user" invece che del "Son of a bitch".

Ok ragazzi e ragazze, spero che il tutorial sia abbastanza chiaro da farvi capire come usare il debugger in questione, il crackme era facile, ma molte software house fanno di peggio :p, intanto esercitatevi e ...alla prossima, Bye Bye,

Pincopall




Note finali

Un saluto all'autore del CrackMe, Xgrimator, un bravissimo palm-reverser spagnolo che ogni tanto è pure venuto in #crack-it...e AUGURI se non ci sentiamo da quì al 30 Luglio =)
Un saluto quindi a tutto il chan #crack-it nonchè ad #hackmaniaci e #asm.

Una dedica particolare a Maria che furoreggia in chan :p e che mi ha suggerito la frase da mettere sopra =) ah..e che mi ha insegnato una filastrocca troppo bella! Ciauuuu

Disclaimer

E' un CrackMe...è stato pensato e codato per essere crackato e gode quando viene reversato, quindi...lo ho solo fatto godere :p

Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.