ICleaner v3.4.0.58 |
|
|
|
Program Tipi:Gereksiz dosyaları temizliyor. |
|
OllyDbg v1.10,PEiD |
|
|
|
|
ICleaner ASPack 2.12 ile packlı,trial ve serialle
korunuyor.Seriali bir sonraki açılışında kontrol ediyor.Ayrıca serial
cryptolanıyor. Yani gercek serial işi biraz zor.Bizde ikinçi acılışında kontrol
yaptıgı noktayı bulup oraya kayıtlı olduğunda gerekli olan degerleri yazacagız.
Programı kayıtlı hale getirecegiz.Ollydbg nin degişik özelliklerinde
bahsedecegim.(Winhex gibi kullanacagız.)Programı unpack yapın.İşe başlayalım.
Unpack yapılmış programı olldbg de yükleyip çalıştırın.Lisan bölümünde User Name:kresuz ,Registration Key:1A2B2C4D5E
yazıp register tuşuna basın.Bize kayıt işine tekrar açıldıgında bakacagını söyledi.
Şimdi tamam tuşuna basmayın ALT+M yapın veya resimdeki tuşa basın.
Önünüze gelen ekranı tıklayın ve CTRL+B yapın. ASCII bölümüne kresuz yazıp ok tuşuna basın.
Niye bunları yaptık:
1- Program tamam tusuna basarsak başka bir mesaj vermeden kapanıyor.Müdahale edemiyoruz.
2- Program girdigimiz ismi registere yazıyor ve bu isime göre serial üretiyor.Bunun için girdigimiz ismi okudugu yere
breakpoint koymamız gerekiyor.Bunun için yazdığımız ismi ram da aratıyoruz.Bulunca okudugu bölgeye breakpoint koyacagız.
Olldbg'u winhex gibi kullanacagız.Bu yöntem klasik breakpointlerin calışmadıgı zamanlarda çok gecerlidir.Programların
ya seriali veya ismi okudugu yeri kesin olarak yakalıyor.Bazende gercek seriali görebilirsiniz.(şanslı iseniz)
Bu kadar açıklama şimdilik yeter. Programda kaldıgımız yere dönelim.String arama ekranında ok. tuşuna basınca girdigimiz
ismi bulduk.
mouse ile ismin üzerine gelin soltusuna basarak ismin sonuna kadar gidip işaret koyun.Şimdi sağ tuş yapın ve resimdeki
sıraları takip edip DWORD yazılı bölümü tıklayın.
Bunu bu bölgeye bir şey yazıldıgında durması için yaptık.Programda register bölümüne dönün.Tamam tuşuna basın.
Program kapanacaktır. CTRL+F2 ile restart yapın.F9 a basın ve program durdu.
00404679 |. 5A POP EDX ; ICleaner.004046A4
0040467A |. 66:C74402 FE 0000 MOV WORD PTR DS:[EDX+EAX-2], 0
00404681 |. 83C0 08 ADD EAX, 8
00404684 |. 5A POP EDX ; ICleaner.004046A4
00404685 |. 8950 FC MOV DWORD PTR DS:[EAX-4], EDX
00404688 |. C740 F8 01000000 MOV DWORD PTR DS:[EAX-8], 1 ==>İlk önce burada durdu.F8 ile devam edin.
0040468F |. C3 RETN
004FE942 . 8B55 E4 MOV EDX, DWORD PTR SS:[EBP-1C]
004FE945 . B8 60A75200 MOV EAX, 0052A760
004FE94A . E8 A95CF0FF CALL 004045F8
004FE94F . 8D55 E0 LEA EDX, DWORD PTR SS:[EBP-20]
004FE952 . B8 F4EA4F00 MOV EAX, 004FEAF4 ; ASCII "RegCode"
004FE957 . E8 E4A2F8FF CALL 00488C40
004FE95C . 8B55 E0 MOV EDX, DWORD PTR SS:[EBP-20]
004FE95F . B8 64A75200 MOV EAX, 0052A764
004FE964 . E8 8F5CF0FF CALL 004045F8
004FE969 . 68 6CA75200 PUSH 0052A76C
004FE96E . 68 70A75200 PUSH 0052A770
004FE973 . 68 74A75200 PUSH 0052A774
004FE978 . B9 68A75200 MOV ECX, 0052A768
004FE97D . 8B15 64A75200 MOV EDX, DWORD PTR DS:[52A764] ==>Girdiğimiz sallama serial edx' de
004FE983 . A1 60A75200 MOV EAX, DWORD PTR DS:[52A760]
004FE988 . E8 6F98F8FF CALL 004881FC ==>Kontrol et.
004FE98D A2 5CA75200 MOV BYTE PTR DS:[52A75C], AL ==>Serial dogru ise AL=01 ve [52A75C] memory
==>bölgesine 1 yazılacak
004FE992 /EB 04 JMP SHORT 004FE998 ==>Memory bölgesini karşılastırmaya git.
004FE994 |EB DB EB
004FE995 |05 DB 05
004FE996 . |8901 MOV DWORD PTR DS:[ECX], EAX ; ICleaner.0052A764
004FE998 > \803D 5CA75200 00 CMP BYTE PTR DS:[52A75C], 0 ==>Memory bölgesi 0 mı?
004FE99F . 0F85 F8000000 JNZ 004FEA9D ==>degilse kayıtlı,0 ise demo calıştır.
004FE9A5 . 8D55 FC LEA EDX, DWORD PTR SS:[EBP-4]
Bizim şimdi yapmamız gereken BYTE PTR DS:[52A75C] memory bölgesine 1 yazmak.Bunu yapınca program registerli olacak.
Bunun icin 004FE98D satırına yani MOV BYTE PTR DS:[52A75C], AL yerine kod yazmamız gerekli.Yazacagımız kod,satır
sayısından fazla olacagı icin taşma olur,program çalışmaz.Mecburen program sonunda boş bir yere yazacağız.
004FE98D satırını programın sonundaki boş yere yönlendirecegiz.0051769B satırından sonra boş yerler var.
Unpack yapılmış dosyaya W32dasm ile bakın.İşe başlayalım
ORİJİNAL KOD
004FE98D A2 5CA75200 MOV BYTE PTR DS:[52A75C], AL
004FE992 EB 04 JMP SHORT 004FE998
004FE994 EB DB EB
004FE995 05 DB 05
004FE996 . 8901 MOV DWORD PTR DS:[ECX], EAX
004FE998 > 803D 5CA75200 00 CMP BYTE PTR DS:[52A75C], 0
PATCH YAPILINCA
004FE98D /E9 098D0100 JMP 0051769B ==>Bu satırı kod yazacağımız program sonundaki alana yönlendiriyoruz
004FE992 |90 NOP ==>Burada ki jumpu da nopluyoruz.Çünkü program sonunda dönüşü
004FE993 |90 NOP ;doğrudan karşılaştırmaya,004FE998 satırına yönlendireceğiz.
004FE994 |EB DB EB
004FE995 |05 DB 05
004FE996 . |8901 MOV DWORD PTR DS:[ECX], EAX
004FE998 > |803D 5CA75200 00 CMP BYTE PTR DS:[52A75C], 0 ==>Karşılaştırma yeri
004FE98D /E9 098D0100 JMP 0051769B yönlendirdigimizde ;
ORİJİNAL KOD
0051769B 0000 ADD BYTE PTR DS:[EAX], AL
0051769D 0000 ADD BYTE PTR DS:[EAX], AL
0051769F 0000 ADD BYTE PTR DS:[EAX], AL
005176A1 0000 ADD BYTE PTR DS:[EAX], AL
005176A3 0000 ADD BYTE PTR DS:[EAX], AL
005176A5 0000 ADD BYTE PTR DS:[EAX], AL
005176A7 0000 ADD BYTE PTR DS:[EAX], AL
005176A9 00 DB 00
005176AA 00 DB 00
005176AB 00 DB 00
PATCH YAPILINCA
0051769B 33C0 XOR EAX, EAX ==>Eax sıfır
0051769D 40 INC EAX ==>Eax'ı 1 artır =AL 01 oldu
0051769E A2 5CA75200 MOV BYTE PTR DS:[52A75C], AL ==>[52A75C] memory bölgesine 1 yaz
005176A3 ^ E9 F072FEFF JMP 004FE998 ==>Karşılaştırma ya [52A75C]=01 olarak geri dön.
Bu yaptıgınız degisiklikleri olldbg de baska bir isimle saklayın.Patch yapılmıs programı calıstırın.Evet ne trial ekranı,ne de
register bölümü kalmış. Abouta bakın.Registerlenmiş.
Koydugunuz breakpointleri görmek veya kaldırmak icin Ollydbg de DEBUG menu sunda Hardware breakpoints bölümüne bakın.
Bu tutoriali yazmaktaki amacım programcılara ,programlarını daha iyi korumaları için yol göstermektir..
Son olarak şunu söyleyeyim:Bir programı kullanarak para kazanıyorsanız,o programı mutlaka satın alın.Emeğe değer verin...
Lisansız kullanımdan tutoriali hazırlayanlar sorumlu değildir.
Bu yazıda yazım yanlışları , bilgi hatası
olabilir.Eğer bir yanlış bulursanız bana mail atın düzeltmeye çalışırım.
E-Mail: kresuz