Corso 9 |
|
|
1/7/2000 |
by wonder |
|
|
Published by Quequero |
|
Grazie per la soluzione......Ma almeno lo potevi reversare o no? Mi fai il QuePad e non mi fai WinRar.....hihiihi |
||
| UIC's form |
|
UIC's form |
Difficoltà |
(x)NewBies ()Intermedio ( )Avanzato ( )Master |
Salve a tutti. Questo tute rappresenta una soluzione per il Corso 9 della UIC. Scusatemi tanto ma l'ho scritto di corsa.
Introduzione |
Tools usati |
SoftIce
Hex
WorkShop solo se volete modificare il programma permanentemente.
URL o FTP del programma |
Notizie sul programma |
Essay |
Ebbene in questo tute craccheremo il programma usando un approccio Live! Cio' significa
che tutto cio' che faremo sara' fatto mentre il programma e' in memoria eseguendo il suo
code. Cracchare questo programma e' molto semplice. Cio' non vuol dire che la protezione
non sia buona. Anzi tutt'altro. Infatti, mi vorrei congratulare con i/il programmatori/e
che hanno scritto questa protezione. Veramenti bravi! Sfortunamente in questo tute non vi
mostrero' la vera protezione del programma. Il tempo scarseggia. :(
Va bene.... si parte....
Lanciate il programma. Cliccate su Options e poi cliccate su Registration. Come vedete ci
sono due linee dove dovete mettere il nome e il seriale
Ok! E' giunta l'ora di lanciare SoftIce. La prima cosa da fare e' mettere un bel bpx
getDlgItemTextA. Fatto? Bravi! Uscite dal SoftIce e mette un Nome ed un KeyCode.
Dopodiche' cliccate sul bottone OK. A questo punto SoftIce dovrebbe presentarsi SoftIce.
Ctrl+D e SoftIce si presenta di nuovo. Questo e' il punto in qui ci troviamo:
:00409D23 Call 0044D419
Primo breakpoint. Questa e' la
chiamata per getDlgItemTextA
:00409D28 lea eax, dword ptr [ebp+FFFFFE98]
:00409D2E push eax
:00409D2F lea edx, dword ptr [ebp+FFFFFE98]
:00409D35 push edx
:00409D36 Call 0044D31D
:00409D3B push 00000046
:00409D3D lea ecx, dword ptr [ebp+FFFFFE50]
:00409D43 push ecx
:00409D44 push 00000066
:00409D46 mov eax, dword ptr [ebp+08]
:00409D49 push eax
:00409D4A Call 0044D419
Secondo breakpoint. Questa e'
la chiamata per getDlgItemTextA
Dopo il second breakpoint dovrete schiacciare F12 per uscire dalla funzione e ritornare
nel code del WinRar. Schiacciate F10 sino a quando non arrivate qua:
:00409DA9 call 004272C0
Questa e' una chiamta molto
importante.
:00409DAE add esp, 00000008
Lo stack viene aggiustato
:00409DB1 test eax, eax
Questo
test e' usato per vedere se la registrazione e' valida o meno
:00409DB3 jne 00409DE1
Se EAX
e' zero non siamo registrati. Cambiare questa istruzione in un jmp non serve a niente.
Anche se cambiate l'ultima istruzione in un jmp o se cambiate EAX = 1, non vi servira' a
niente. Provate! Vedete non siete ancora registrati. Comunque noterete anche che il
programma vi crea una nuova file. La nuova file e' Rar.ini e vedrete che ha conservato le
vostre informazioni per la registrazione.
Per poter cracckare questo programma dobbiamo andare a vedere che cosa succede dentro la
funzione 004272C0 poiche e' quest'ultima a ritornare il valore 0 o 1
nel registro EAX. Quindi entrate dentro ed andiamo a vedere l'ultima operazione che viene
eseguita usando EAX. Eccoci qua:
:0042754C E84FC10100 call 004436A0
Un'altra funzione. Non ci
interessa in questo caso.
:00427551 83C40C add esp, 0000000C
Lo stack viene aggiustato
:00427554 85C0 test eax, eax
Controlliamo EAX
:00427556 0F94C0 sete al
:00427559 83E001 and eax, 00000001
:0042755C A37C154500 mov dword ptr [0045157C], eax
Questa mi appare un po'
sospetta. Controlliamola.
Vede l' ultimo passo. Sta' copiando il valore di EAX in una variabile. Ed e' per questo
che cambiare il jump di priva non serve a niente. E' questa variable che tiene conto se
sei registrato/a o meno. Per esserne sicuri togliamo tutti i breakpoint dal SoftIce (bc *)
e poi mettiamo un altro breakpoint. Stavolta pero' lo mettiamo contro la variable [0045157C]. Allora questo e' la syntax... bpm 0045157C. Torniamo al
programma WinRar e chiudiamolo. Vedrete a questo punto che SoftIce appare un paio di
volte. Allora siete convinti ora.... Ancora un altro test. Ricarichiamo il programma in
memoria... Tada'!! E gia' ancora una volta il programma manipola quella variable [0045157C]. Questa e' la parte importante del codice:
:0042755C mov dword ptr [0045157C], eax
Ancora una volta la memoria [0045157C] viene
usata come flag
:00427561 mov edx, dword ptr [0045155C]
Ormai e' fatta. Abbiamo capito tutto. La memoria [0045157C] non e'
altro che una flag che dice al programma se e' registrato o meno. Infatti se cambiate il
valore in memoria di [0045157C] e mette 1 come valore vedrete che
siete belli e registrati. :) A questo punto se volete potete pure usate l' hex editor e
cambiare i byte di questa operazione. Mi raccomando mantenete la stessa lunghezza
dell'operazione. Cambiate troppo e il programma crash.
Feel the code, Luke
|
Vorrei ringraziare Que, Syscalo e soprattutto AnrdreaGeddon che durante questa lezione mi ha aiutato molto nel scoprire errori nei miei calcoli del KeyCode. Grazie per la vostra pazienza e per il vostro aiuto. Avrei voluto scrivere il tute sul keygen soprattutto dopo tutte quelle nottate sprecate, ma il tempo mi scappa via. :(. Sara' per la prossima volta. :)
Disclaimer |
| UIC's page of reverse engineering, scegli dove andare: |
| Home Anonimato Assembly ContactMe CrackMe Links |
| NewBies Forum Lezioni |
| Tools Tutorial |
| UIC |