ShareMax 5.41 |
|
|
|
Program Tipi:Şifreli yayınlar için Decoder programı |
|
OllyDbg v1.10,RDG v0.6.3,Dup 2 |
|
|
|
|
ShareMax 5.41 programının zaman kontrolünü kaldıracağız.Program ASProtect SKE v2.2 ile korunmuş,Visual Basic ile yazılmış.İşimiz biraz zor.Dup 2 ile loader yapacağız.Ayrıca Ollydbg de Visual Basic için koyduğumuz breakpointlerden bahsedeceğiz.
Çünkü normalde koyduğumuz messagebox breakpointleri Visual Basic de çalışmıyor.
Ollydbg v1.10 cekin.İşe başlayalım.
Programa RDG ile bakıyoruz.RDG nin PEİD e göre avantajı ayrıca hangi dilde yazıldığınıda gösteriyor.
Hide debugger yüklü Ollydbg'u açın F3 ile ShareMax.exe dosyasını yükleyin F9 ile yüklenmiş olan programı çalıştırın.
Eger önünüze siyah bir ekran gelirse o bölümü [X] işaretine basarak kapatın.Alt+E yapın önünüze gelen Modül listesinden
ShareMax.exe nin üzerine çift tıklayın kodları şimdi görürsünüz.Çalışan programa dönün.Register bölümünde sallama bir
şeyler yazın.OK tuşuna basın.Hata mesajını gösterdi.
Şimdi işimiz bu mesajın nerden geldiğini bulmak ve engellemek.Hata mesajında tamam tusuna basın .tekrar register
bölümüne gelin.sallama bir serial yazın OK tusuna basmadan Ollydbgye geçin.ALT+E yapın ve Breakpoint için aşagıdaki
resimdeki sıraları takip edin.Visual Basic de messagebox için rtcMsgBox a bpx konuyor.

rtcMsgBox a bpx koyduktan sonra programa dönün.OK. tusuna basın.Breakpoint çalıştı ollydbg ye düştük.
msvbvm60.dll içindeyiz.
msvbvm60.rtcMsgBox 6A8> 55 PUSH EBP ==>breakpoint çalıstı buraya geldik.
6A8B2F2A 8BEC MOV EBP, ESP ==>F8 ile ilerleyin
6A8B2F2C 83EC 4C SUB ESP, 4C
6A8B2F2F 8B4D 14 MOV ECX, DWORD PTR SS:[EBP+14]
6A8B3020 E8 1EB6F9FF CALL 6A84E643 ==>hata mesajını gösteren call
6A8B3025 FF75 E4 PUSH DWORD PTR SS:[EBP-1C]
6A8B3028 8BF8 MOV EDI, EAX ==>Buraya F2 ile breakpoint koyun ki
;Hata mesajından dönüşü takip edebilelim.
;Hata mesajına dönün.Tamam tuşuna basın.
;Ollydbg de program kodlarına döndük F8 ile ilerleyin.
msvbvm60.dll den çıktık.ShareMax.exe içindeyiz.
00432058 8D DB 8D ==>Ana programa döndügümüz yer.ama asprotect kodları saklıyor
00432059 4D DB 4D ; CHAR 'M'
0043205A E8 DB E8
0043205B FF DB FF
0043205C D6 DB D6
0043205D 8D DB 8D
0043205E 55 DB 55 ; CHAR 'U'
0043205F A4 DB A4
00432060 8D DB 8D
00432061 45 DB 45 ; CHAR 'E'
00432062 B4 DB B4
Kodların üzerinde Ctrl+A yapın
00432058 . 8D4D E8 LEA ECX, DWORD PTR SS:[EBP-18] ==>Şimdi kodları görebiliyoruz.
0043205B . FFD6 CALL NEAR ESI ; msvbvm60.__vbaFreeStr
0043205D . 8D55 A4 LEA EDX, DWORD PTR SS:[EBP-5C]
00432060 . 8D45 B4 LEA EAX, DWORD PTR SS:[EBP-4C]
00432063 . 52 PUSH EDX
00432064 . 8D4D C4 LEA ECX, DWORD PTR SS:[EBP-3C]
00432067 . 50 PUSH EAX
00432068 . 8D55 D4 LEA EDX, DWORD PTR SS:[EBP-2C]
0043206B . 51 PUSH ECX ;
0043206C . 52 PUSH EDX
00432058 . 8D4D E8 LEA ECX, DWORD PTR SS:[EBP-18] den itibaren yukarı dogru gidiyoruz.
Amaç kontrol noktasını bulabilmek için 00432058 8D4D E8 LEA ECX, DWORD PTR SS:[EBP-18] den itibaren yukarı
çıkıyoruz ki buraya atlama yapan kodları bulalım.
00431EEC E8 13E1ED03 CALL 04310004 ==>karşılaştır.serial doğru ise AX sonucu 1 olacak.
00431EF1 24 E8 AND AL, 0E8
00431EF3 29FA SUB EDX, EDI
00431EF5 FFFF ??? ; Unknown command
00431EF7 66:85C0 TEST AX, AX ==> AX=0 serial yanlış
00431EFA 0F84 EE000000 JE 00431FEE ==> AX=0 ise hata mesajına git.
00431F00 68 8C5A4000 PUSH 405A8C ; UNICODE ")Uf*jh+dj,rl-pn.&p/`r0wt1~v2*x3Ez45|5-~6<"
00431F05 E8 96FE0000 CALL 00441DA0 ;
00431F0A 8BD0 MOV EDX, EAX
00431F0C 8D4D E8 LEA ECX, DWORD PTR SS:[EBP-18]
00431F0F E8 ECE02D01 CALL 01710000
00431F14 D8B9 04000280 FDIVR DWORD PTR DS:[ECX+80020004]
00431F1A B8 0A000000 MOV EAX, 0A
00431F1F 894D AC MOV DWORD PTR SS:[EBP-54], ECX
00431F22 894D BC MOV DWORD PTR SS:[EBP-44], ECX
00431F25 BB 08000000 MOV EBX, 8
00431F2A 8D55 94 LEA EDX, DWORD PTR SS:[EBP-6C]
00431F2D 8D4D C4 LEA ECX, DWORD PTR SS:[EBP-3C]
00431F30 8945 A4 MOV DWORD PTR SS:[EBP-5C], EAX
00431F33 8945 B4 MOV DWORD PTR SS:[EBP-4C], EAX
00431F36 C745 9C E87D4000 MOV DWORD PTR SS:[EBP-64], 407DE8 ; UNICODE "Done" ==> ip ucu
00431F3D 895D 94 MOV DWORD PTR SS:[EBP-6C], EBX
00431F40 E8 BBE02D01 CALL 01710000
00431F45 96 XCHG EAX, ESI
00431F46 8B45 E8 MOV EAX, DWORD PTR SS:[EBP-18]
00431F49 8D4D A4 LEA ECX, DWORD PTR SS:[EBP-5C]
00431F4C 8945 DC MOV DWORD PTR SS:[EBP-24], EAX
00431F4F 8D55 B4 LEA EDX, DWORD PTR SS:[EBP-4C]
00431F52 51 PUSH ECX
00431F53 8D45 C4 LEA EAX, DWORD PTR SS:[EBP-3C]
00431F56 52 PUSH EDX
00431F57 50 PUSH EAX
00431F58 8D4D D4 LEA ECX, DWORD PTR SS:[EBP-2C]
00431F5B 6A 40 PUSH 40
00431F5D 51 PUSH ECX
00431F5E 897D E8 MOV DWORD PTR SS:[EBP-18], EDI
00431F61 895D D4 MOV DWORD PTR SS:[EBP-2C], EBX
00431F64 FF15 A0104000 CALL NEAR DWORD PTR DS:[4010A0] ; msvbvm60.rtcMsgBox
00431EFA /0F84 EE000000 JE 00431FEE ==>Orijinal kod.
00431EFA 90 NOP ==>patch lı hali.Yalnız bu işlem kalıcı olmuyor
00431EFB 90 NOP ;sadece teşekkür mesajını cıkarıyor
00431EFC 90 NOP ;kalıcı olması için CALL 04310004 sonucunda
00431EFD 90 NOP ;AX=01 olması gerekli.
00431EFE 90 NOP
00431EFF 90 NOP
Şimdi bize tam crack yapmamız için esas gerekli olan,ikinci kısıtlama mesajını[süre doldu]yakalamamız lazım.(Yukarıda yaptığımız iş kozmetik di.
Bize dup da kod yazarken örnek olacak.)Bu mesaj sanırım 10 - 15 dakika sonra çıkıyor.rtcMsgBox a yine F2 ile breakpoint koyup bekleyin.
msvbvm60.rtcMsgBox 6A8B2F29 55 PUSH EBP ==>breakpoint çalıstı buraya geldik.
6A8B2F2A 8BEC MOV EBP, ESP ==>F8 ile ilerleyin
6A8B2F2C 83EC 4C SUB ESP, 4C
6A8B2F2F 8B4D 14 MOV ECX, DWORD PTR SS:[EBP+14]
6A8B2F32 53 PUSH EBX
6A8B2F33 56 PUSH ESI
6A8B301F 52 PUSH EDX ==>EDX=00195AE4, (UNICODE "Register Yo3r Co.y ...T'ial Peri")
6A8B3020 E8 1EB6F9FF CALL 6A84E643 ==>Süre doldu mesajını gösteren call ;
6A8B3025 FF75 E4 PUSH DWORD PTR SS:[EBP-1C]
6A8B3028 8BF8 MOV EDI, EAX ==>Buraya F2 ile breakpoint koyun ki
;Hata mesajından dönüşü takip edebilelim.
;Hata mesajına dönün.Tamam tuşuna basın.
;Ollydbg de program kodlarına döndük F8 ile ilerleyin.
msvbvm60.dll den çıktık.ShareMax.exe içindeyiz.
00440AA6 FF15 A0104000 CALL NEAR DWORD PTR DS:[4010A0] ; msvbvm60.rtcMsgBox
00440AAC 8D4D E8 LEA ECX, DWORD PTR SS:[EBP-18] ==>>Süre doldu mesajından sonra döndügümüz yer.
00440AAF FF15 24124000 CALL NEAR DWORD PTR DS:[401224] ;
Şimdi kontrol noktasını bulabilmek için 00440AA6 FF15 A0104000 CALL NEAR DWORD PTR DS:[4010A0] den itibaren yukarı çıkıyoruz ki
buraya atlama yapan kodları bulalım.
00440909 FF15 3C104000 CALL NEAR DWORD PTR DS:[40103C]
0044090F 83C4 0C ADD ESP, 0C
00440912 66:3BFB CMP DI, BX ==>Süreyi karşılaştır
00440915 0F84 B5010000 JE 00440AD0 ;Süre dolmadı ise Çalışmaya devam.(Atlamayı yapan komut)
0044091B 8B16 MOV EDX, DWORD PTR DS:[ESI] ;Ollydbg de üzerine geldiğinizde kırmızı atlama çizgisini görürsünüz.)
0044091D 56 PUSH ESI
0044091E FF92 0C070000 CALL NEAR DWORD PTR DS:[EDX+70C]
00440915 0F84 B5010000 JE 00440AD0 ==>Orijinali
00440915 /E9 B6010000 JMP 00440AD0 ==>Patch lı hali (Devamlı atla.Süre kontrol sonucu önemli değil.)
0044091A |90 NOP
Nereleri patch yapacağımız noktaları bulduk.Ama ASProtect SKE v2.2 den dolayı doğrudan patch yapamıyoruz.Ya unpack yapacağız,veya program hafızada açılınca
loaderle patch yapacağız.Programın EXE sine doğrudan bir şey yapamıyoruz.
İlk değiştireceğimiz yer 00431EFA/0F84 EE000000 JE 00431FEE idi.
Burada dikkat edecegimiz nokta toplam byte sayısı
0F84 EE000000
0F-84-EE-00-00-00 yani 6 byte
Patch lı hali
00431EFA 90 NOP
00431EFB 90 NOP
00431EFC 90 NOP
00431EFD 90 NOP
00431EFE 90 NOP
00431EFF 90 NOP
Yukarıdaki patch lı kodu dup 'a şöyle yazın.
Virtual Address orijinal Patch
00431EFA 0F 90
00431EFB 84 90
00431EFC EE 90
00431EFD 00 90
00431EFE 00 90
00431EFF 00 90
İkinci değişecek yer (Bize gerekli olan yer)
00440915 0F84 B5010000 JE 00440AD0 ==>Orijinali
00440915 /E9 B6010000 JMP 00440AD0 ==>Patch lı hali
0044091A |90 NOP
Orijinal kod 0F84 B5010000 Patch E9 B6010000
0F-84-B5-01-00-00 6 byte E9- B6-01-00-00 5 byte bu nedenle 1 tane nop(90) ilave ediyoruz.
E9- B6-01-00-00-90
Virtual Address orijinal Patch
00440915 0F E9
00440916 84 B6
00440917 B5 01
00440918 01 00
00440919 00 00
0044091A 00 90
Adresler ve yazacağımız kodlar belli.Dup2 için 00440915 başlangıç noktamız.
Virtual Address orijinal Patch
00440915 0F E9
00440916 84 B6
00440917 B5 01
00440918 01 00
00440919 00 00
0044091A 00 90
00431EFA 0F 90
00431EFB 84 90
00431EFC EE 90
00431EFD 00 90
00431EFE 00 90
00431EFF 00 90
Şimdi Dup2 yi açın. Yukarıdaki kodları Dup 2 ye yazın.Bunun için resimlerdeki sıraları takip edin.Hepsi bukadar.



Hazırladığınız loaderi programın oldugu dizine kopyalayın.Loaderi calıstırın. programda limitler kalkacaktır.
Notlar:Eger Patch yaparken opcode leri bilmiyorsanız (je= 74 veya 0F84 ,jne 75 veya 0F85 gibi )bunları ollydbg de manuel
olarak yazın.Ollydbg karsılıklarını gösterecekdir.Daha önceki yazılara bakın.
Patch yaptığınız satır kac byte dan oluşmuş iyice bakın.Çünkü loader e byte byte yazılıyor.
Ollydbg nin bir kolaylığı daha :
00431EFA /0F84 EE000000 JE 00431FEE
kod 6 byte lık bir kod ve tek bir satırda.Bunu byte ve satır satır nasıl yazabiliriz.Satır noları ne olacak.
Ollydbg de kodu gecici olarak nop layın satır nolarını byte sayısı kadar otomatik olarak dizer.
kod tek satırda 00431EFA dan baslıyor.nop layınca olldbg diger satır noları kendisi dizdi.
00431EFA 90 NOP
00431EFB 90 NOP
00431EFC 90 NOP
00431EFD 90 NOP
00431EFE 90 NOP
00431EFF 90 NOP
Sadece byte sayısı kadar kod yazın.Fazla yazmayın.Program normal calısmaz.Yazdıgınız byte sayısı toplam sayıdan az ise
gerikalan kadar nop (90) yazın.Yazmamız gereken kod eger toplam byte sayısını gececekse program sonunda boş bir
yere yönlendirip kodları oraya yazabiliriz.
DzA Patcher v1.3 de de aynı işlemlerle loader yapabilirsiniz.
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.