ShareMax 5.41

kresuz
Program Url:www.huarab.go.to
Program Tipi:Şifreli yayınlar için Decoder programı
     Araçlar:
OllyDbg v1.10,RDG v0.6.3,Dup 2
Basit ( )  Orta (X)  Zor ( )  Pro ( )


Başlangıç

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.
Yazı

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.


Son Notlar
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