The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>The</strong> Serials – Computer ID<br />
Do sada smo obradili programe koji generisu serijske brojeve na<br />
osnovu unetog imena. Ono sto preostaje u ovom opusu je generisanje<br />
serijskih brojeva na osnovu nekog hardwareskog parametra, to jest na<br />
osnovu computer IDa. Ono sto vecini korisnika nije jasno je da svaki<br />
program za sebe generise poseban computer ID, koji se razlikuje od<br />
programa do programa. Iako se serijski broj zasniva na nekom computer IDu<br />
sam princip generisanja je isti posto se serijski broj opet generise na osnovu<br />
neke konstante. Za potrebe ovog dela knjige sa interneta sam skinuo sledeci<br />
crackme …\Casovi\Cas3\abexcm5.exe Posto je Abexov program pisan u TASMu<br />
jedini alat koji ce nam trebati je OllyDBG. Otvorite Olly i ucitajte ovaj fajl u<br />
njega. Kao sto primecujemo ovo je jako kratak program, pocinje na adresi<br />
00401000 a zavrsava se na adresi 00401171. Takodje su ocigledne dve<br />
poruke koje se nalaze u programu, "<strong>The</strong> serial you entered is not correct!" i "Yep,<br />
you entered a correct serial!". Primeticemo komandu RET 10 na adresi<br />
00401069 koja oznacava da stvaran deo za proveru serijskog broja ne<br />
pocinje na adresi 00401056 nego na adresi 0040106C, stoga cemo postaviti<br />
break-point na tu adresu.<br />
00401069 |. C2 1000 RET 10<br />
0040106C |> 6A 25 PUSH 25<br />
0040106E |. 68 24234000 PUSH abexcm5.00402324<br />
00401073 |. 6A 68 PUSH 68<br />
00401075 |. FF75 08 PUSH DWORD PTR SS:[EBP+8]<br />
00401078 |. E8 F4000000 CALL <br />
Sa F9 cemo startovati program i bez ikakvog unosenja serijskog broja cemo<br />
pritisnuti Check. Normalno, program je zastao na break-pointu. Evo sta se<br />
desava... Prvo program ucitava nas uneti serijski broj u memoriju na adresi<br />
00401078. Dalje se prosledjuju parametri funkciji koja vraca ime particije na<br />
kojoj se nalazi, to jest takozvani volume label na adresi 00401099.<br />
0040107D |. 6A 00 PUSH 0<br />
0040107F |. 6A 00 PUSH 0<br />
00401081 |. 68 C8204000 PUSH abexcm5.004020C8<br />
00401086 |. 68 90214000 PUSH abexcm5.00402190<br />
0040108B |. 68 94214000 PUSH abexcm5.00402194<br />
00401090 |. 6A 32 PUSH 32<br />
00401092 |. 68 5C224000 PUSH abexcm5.0040225C<br />
00401097 |. 6A 00 PUSH 0<br />
00401099 |. E8 B5000000 CALL <br />
Na adresi 004010A8 se poziva funkcija lstrcatA koja spaja dva stringa. Prvi<br />
string je volume label a drugi je uvek isti i jednak je 4562-ABEX.<br />
0040109E |. 68 F3234000 PUSH abexcm5.004023F3 ; /StringToAdd = "4562-ABEX"<br />
004010A3 |. 68 5C224000 PUSH abexcm5.0040225C ; |ConcatString = ""<br />
004010A8 |. E8 94000000 CALL ; \lstrcatA<br />
Dalje na adresi 004010AF pocinje loop koji se izvrsava dva puta i sluzi za<br />
menjanje prva cetiri slova ili broja iz volume labela.<br />
004010AD |. B2 02<br />
MOV DL,2<br />
004010AF |> 8305 5C224000>/ADD DWORD PTR DS:[40225C],1<br />
004010B6 |. 8305 5D224000> |ADD DWORD PTR DS:[40225D],1<br />
004010BD |. 8305 5E224000> |ADD DWORD PTR DS:[40225E],1<br />
004010C4 |. 8305 5F224000> |ADD DWORD PTR DS:[40225F],1<br />
004010CB |. FECA<br />
|DEC DL<br />
004010CD |.^ 75 E0<br />
\JNZ SHORT abexcm5.004010AF<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 76 <strong>of</strong> 293