4T NOX 2.6 (Palm OS)

Data

by "Pastore"

 

09/06/2001

UIC's Home Page

Published by Quequero



È belloooooooo il reversing su PalmOS che figoooo

 

....

 

E-mail: pastore1@freemail.it

 

....

Difficoltà

( )NewBies (X)Intermedio ( )Avanzato ( )Master

 


4T NOX 2.6 (Palm OS)
Written by PaStOrE

Scarica il programma

Tools usati

 

PRC2BIN

PILOTDIS

HEX WORKSHOP

POSE

 

URL o FTP del programma

Lo potete trovare su http://volftp.mondadori.com

 

Notizie sul programma

Questo programma è veramente utile..: ci si può memorizzare nome utente e password di tutte le iscrizioni che abbiamo a giro per internet :-) , suddivise per genere. Molto utile per chi ha tante password da ricordare (come me..). Le password memorizzate sono protette da password…  

Essay

Facendo partire fnox.prc nell’emulatore possiamo notare che la prima schermata che ci si presenta è questa! :

LA REGISTRAZIONE!!! :)

Ok. Tappando (da tap, cioè toccare con la penna del palmare) “Register Now” ci viene chiesto un seriale…

Se ne inseriamo uno a caso, apparirà questa schermata:

 

e poi entra nel prog. chiedendo la prima psw e funziona…tutto … ma per 30 giorni….

Possiamo intervenire quindi sul controllo del codice…

Disassembliamo fnox.prc con pilotdis e con prc2bin…..

Guardando i files che crea prc2bin troviamo in questo caso solamente il testo della form di registrazione con successo (tFRM076c.bin)…. (in teoria c’è anche quella di errore, cioè Talt04b0.bin, però tanto è uguale… :-) )

Andando a cercare la stringa “76c” nel fnox.prc.s troviamo la chiamata alla resource di registrazione avvenuta, cioè : MOVE.W   #1900!$76c,-(A7) all’ indirizzo 6118…

 

000060fa   2448                               MOVEA.L A0,A2

000060fc   2f0a                               MOVE.L  A2,-(A7)

000060fe   3f2dedc6                           MOVE.W  -4666(A5),-(A7)

00006102   4ebafb2c                           JSR     L603

00006106   1b40ed4d                           MOVE.B  D0,-4787(A5)

0000610a   4ebafde2                           JSR     L616

0000610e   4fef000c                           LEA     12(A7),A7

00006112   4a2ded4d           L627            TST.B   -4787(A5)

00006116   670e                               BEQ     L628

00006118   3f3c076c                           MOVE.W  #1900!$76c,-(A7)

0000611c   4e4fa19c                           sysTrapFrmPopupForm

00006120   7601                               MOVEQ   #1,D3

00006122   544f                               ADDQ.W  #2,A7

00006124   6016                               BRA     L629

00006126   42a7               L628            CLR.L   -(A7)

00006128   42a7                               CLR.L   -(A7)

0000612a   41fa0066                           LEA     L633,A0

0000612e   4850                               PEA     (A0)

00006130   3f3c04b0                           MOVE.W  #1200!$4b0,-(A7)

00006134   4e4fa194                           sysTrapFrmCustomAlert

00006138   4fef000e                           LEA     14(A7),A7

0000613c   0c6b06a90008       L629            CMPI.W  #1705!$6a9,8(A3)

Prima della chiamata viene fatto il controllo (TST.B , solitamente su d0, tranne che qui… :-) )

Provando a invertire o annullare il BEQ (con un NOP) per farlo andare alla funzione sottostante (la registrazione…) non otteniamo risultati, perché il nostro progr. Ci dice che l’abbiamo registrato ma poi se resettiamo il palm ci richiede la registrazione… (perché evidentemente ci sono altri controlli e il flusso del programma non passa dalla funzione di memorizzazione in memoria flash (solitamente sysTrapStrCopy).

Quindi il dato contenuto nella parte di registro a5 (-4787(a5) ) è rilevante e viene utilizzato in seguito…quindi andiamo a studiare a monte come si comporta il progz.

Ci sono due funzioni che vengono richiamate prima del controllo( JSR L616 e JSR 603).

La L603 evidentemente restituisce d0 , lo mette nel registro che verrà poi controllato e viene passato (quest’ultimo registro) alla L616….

Dato che la Keyroutine restituisce il suo risultato in d0, dovrebbe essere la prima… (L603).

Andando a vedere all’indirizzo L603 (5c30) troviamo la funzione interessata….se guardiamo in fondo (vicino alla RTS, cioè dove finisce la funzione) troviamo:

 

00005daa   3004                               MOVE.W  D4,D0

00005dac   80eefff2                           DIVU.W  -14(A6),D0

00005db0   3204                               MOVE.W  D4,D1

00005db2   d26efff2                           ADD.W   -14(A6),D1

00005db6   d240                               ADD.W   D0,D1

00005db8   3801                               MOVE.W  D1,D4

00005dba   5243                               ADDQ.W  #1,D3

00005dbc   b66effe8           L606            CMP.W   -24(A6),D3

00005dc0   65d8                               BCS     L605

00005dc2   b86e0008           L607            CMP.W   8(A6),D4

00005dc6   57c0                               SEQ     D0

00005dc8   4400                               NEG.B   D0

00005dca   4cdf04f8                           MOVEM.L (A7)+,D3-D7/A2

00005dce   4e5e                               UNLK    A6

00005dd0   4e75                               RTS

00005dd2   4e56fffc           L608            LINK    A6,#-4

00005dd6   48e71f30                           MOVEM.L D3-D7/A2/A3,-(A7)

 

All’indirizzo 5dc6 ci sono un SEQ d0 e NEG d0( il valore che restituirà la funzione prima di uscire all’indirizzo 5dd0 (RTS). Siccome viene negato d0 prima di uscire, il valore giusto deve essere 1 e non 0 (guardare le linee-guida se non capite). Quindi basterà sostituire (con HEX WORKSHOP) le due istruzioni (SEQ & NEG) con un Move.B #1, D0, cioè sostituire i byte 57c0 & 4400 con 103C0001 (guardare gli Opcode) e la nostra funzione ci restituirà sempre 1, cioè codice sempre valido!! :-)

 

Caricando di nuovo il progz. patchato nell’emulatore potete inserire un codice a caso e il progz. si registrerà per sempre…

                                                                    

PaStOrE

Pastore1@freemail.it