Easy CD Ripper v1.32

amois
Program Url: www.8to32.com/org/
Program Tipi: MP3 Maker
     Araclar:
SoftIce, IceDump
Basit (x)  Orta (x)  Zor ( )  Pro ( )


Baslangic

Audio CD den MP3 yapma ve cesitli formatlara donusturme.
Yazi

Petite 2.2 ile korunmus. SoftIce Loader ile yukleyelim. (exe dosyasinin adi uzun oldugu icin ecr.exe seklinde degistirdim)

[map32 ecr]

Owner Obj Name Obj# Address      Size    Type 
ECR 	    0001 017F:00401000 00091000 CODE RW
ECR .petite 0002 0187:00492000 00001000 UDATA RW
ECR 	    0003 0187:00493000 00003000 IDATA RW
   ...

Ilk section 401000~492000 arasinda --> [d 492000]

0030:00491FE0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??
0030:00491FF0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??
0030:00492000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0030:00492010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

Programin 492000 ye kadar olan bolumu unpack etmesini bekleyelim. [bpm 491FF0] -->

0030:00491FD0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0030:00491FE0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0030:00491FF0 6B 8D 7B 3C 3B F6 5B 48-5E 25 D2 BF 66 F9 7E 0F

Su an 00 00 larla dolmus durumda. Breakpoint hala aktif --> [F5] -->

0030:00491FE0 19 79 C7 CA D9 8E D8 1B-B7 9B 7A EF 9D EE 53 0D
0030:00491FF0 6B 8D 7B 3C 3B F6 5B 48-5E 25 D2 BF 66 F9 7E 0F
0030:00492000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

Evet, unpack islemi tamamlandi. [\tracex 401000 492000] -->

017F:0048EFC4 PUSH EBP 					<-- OEP
017F:0048EFC5 MOV EBP,ESP

[\dump 400000 C9000 c:\dump.exe] --> Peditor --> OEP=48EFC4 --> Sections --> Ilk section Fix
Su anda Petite den arinmis dosyaya sahibiz. SoftIce Loader ile yukledikten sonra da, tracex kullansaydik, OEP yi yine bulacaktik. Ama biraz beklememiz gerekecekti. Eger, dump.exe bilgisayari resetledikten sonra calismazsa Import Table i yeniden duzenleyin.

Register bolumune sallama degerler girelim. --> [bpx hmemcpy] --> Enter --> [F12] --> [F10]
Simdi yavas yavas ilerleyelim ve degiskenleri kontrol edelim.

:00484A3C call 0042FEA0
:00484A41 mov eax, dword ptr [ebp-08] 			<-- [d eax]    <-- amois_fb

484A41 de girdigimiz User Name eax e ataniyor. Artik dikkatli olmamiz lazim. Cunku heran dogru serial ile karsilasabiliriz veya serialin hesaplandigi rutine rastlayabiliriz.

:00484ACA call 004071D4
:00484ACF mov eax, dword ptr [00492E00] 		<-- [? eax]    <-- serial

Evet, girdigimiz User Name icin gecerli seriali bulduk. Burada dikkat etmemiz gereken bir nokta var. Girecegimiz bazi User Name ler icin, eax degeri negatif oluyor. Yani, girdigimiz her User Name gecerli degil. Cozumu ise baska bir User Name girmek. Simdi de hata mesaji yerine gecerli seriali gostermeye calisalim.

:0044DEEB call 0044CE74
:0044DEF0 test al, al 					<-- buradan giris yapabiliriz
:0044DEF2 je 0044DEFA
...
:0044DF08 push ebx
:0044DF09 push edi
:0044DF0A push esi 					<-- "That registration code is not.."
:0044DF0B mov eax, dword ptr [ebp-04]
:0044DF0E mov eax, dword ptr [eax+24]
:0044DF11 push eax
:0044DF12 call 00407144 				<-- Hata <-- MessageBoxA

Hatada cikan Text in memory de sabit bir yeri yok. Yani 44DF0A daki esi hep farkli oluyor. Gecerli serial [00492E00] da duruyor. Hata vermeden once, buradaki degerimizi String e cevirip, esi deki memory bolgesine yazarsak gorev tamamlaniyor. Hatayi veren cagrinin yukarisindaki karsilastirma gereksiz gorunuyor. Buradan kendi yazacagimiz koda ziplayabiliriz. Kodumuzu nereye yazacagimiza gelince, 484ACF den sonra kullanilmayan bir yer olabilir. Veya serial i yanlis girdigimiz icin pass gecilen bir bolum olabilir. Veya NOP la dolmus bir bolge olabilir. Neresi olacagina siz karar vereceksiniz. Dikkatli olmazsaniz program kilitlenebilir. Bu nedenle, belirlediginiz bolgeye programin ne zaman ugradigini iyi belirleyin. Ben kendime 484AEC den baslayan bolgeyi sectim.

0167:0044DEF0 CALL 00484AEC 				<-- seriali esi deki adrese yaz 
0167:0044DEF5 NOP 
...
0167:0044DF09 PUSH EDI 
0167:0044DF0A PUSH ESI 					<-- esi degeri bizim icin onemli 
...
0167:0044DF12 CALL USER32!MessageBoxA 			<-- hata

CALL 484AEC cagrisi ile serialimiz hex degeri olarak esi deki memory bolumune yazildi.

0167:00484AEC MOV EAX,[00492E00] 
0167:00484AF1 PUSH EAX 					<-- serial (hex degeri)
0167:00484AF2 LEA EAX,[00492E00]
0167:00484AF8 PUSH EAX 					<-- offset degeri
0167:00484AF9 MOV WORD PTR [00492E00],5825 		<-- string e cevir
0167:00484B02 PUSH ESI 					<-- nereye yazacak ?
0167:00484B03 CALL USER32!wsprintfA 			<-- yaz
0167:00484B08 POP EAX 					<-- eax=esi
0167:00484B09 POP EAX 					<-- eax=492E00
0167:00484B0A POP EAX 					<-- eax=serial
0167:00484B0B XOR EAX,EAX
0167:00484B0D RET 

[00492E00] daki degeri eax e atadik. Daha sonra buranin offset degerini atadik. Su anda eax gecerli serialin hex degerini iceriyor. MessageBox da duzgun gosterebilmek icin string e cevrilmesi gerek. Bunu da 5825 (X%) ile sagladik. Eger uzun ve garip karakterler gosteriyorsa --> User Name gecersizdir. Baska bir User Name deneyin.

Son Notlar

Bir programi kullanarak para kazaniyorsaniz, programi satin alin.