|
4T NOX 2.6 (Palm OS) |
||
|
Data |
by "Pastore" |
|
|
09/06/2001 |
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
|
Tools usati |
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