E-Mail Man v3.1.1

amois

Program Url: w*w.dcm-services.com
Program Tipi: E-Mail Manager

Araçlar:

 

SoftICE

Basit (x)  Orta (x)  Zor ( )  Pro ( )

Başlangıç

E-Mail yoneticisi tarzinda bir program.

 

Yazı

 

Visual Basic 5 ile hazirlanmis. Register bolumune, amois_fb ve 19071907 degerlerini girelim.

Enter’a basmadan once [bpx __VbaStrCmp] breakpoint’ini koyalim. Bu Trick, cogu VB4 & VB5 programinda ise yariyormus. 

017F:004549A0 CALL [MSVBVM50!__vbaStrCmp]
017F:004549A6 MOV EDI,EAX                                 <-- Buradayiz

[d edx] ile nerenin karsilastirildigina bakalim.

0187:004D902C 61 00 6D 00 6F 00 69 00-73 00 5F 00 66 00 62 00 a.m.o.i.s._.f.b.﷓
0187:004D903C 00 00 31 00 00 00 69 00-66 00 00 00 6C 02 00 A0 ..1...i.f...l... 

Aradigimiz bu degil tabii. [F5] а Breakpoint tekrar calisti --> [F11]

017F:00454E02 CALL [MSVBVM50!__vbaStrCmp]
017F:00454E08 MOV EDI,EAX                                <-- Buradayiz


[d edx] ile nerenin karsilastirildigina bakalim.

0187:004E4FB8 33 00 54 00 31 00 50 00-37 00 55 00 57 00 4D 00 3.T.1.P.7.U.W.M.﷓
0187:004E4FC8 32 00 34 00 53 00 50 00-34 00 32 00 39 00 33 00 2.4.S.P.4.?.?.?


Evet, aradigimizi bulduk galiba. ??? yerleri kopya cekmemeniz icin degistirdim.

Gecerli serial bulmak icin SmartCheck de kullanabilirdik. Hatta, daha kolay bile olurdu. SmartCheck ile inceleme yaparken, baska bir 16 basamakli sayiyla karsilasiyoruz. Bu sayi, girdigimiz User Name’e bagli olmayan sabit bir sayi. [9SUZ5MR5H5918721]

KeyGen algoritmasini cozmek icin SmartCheck yararli olamadi. SoftIce ile arastirma yapinca, olayin biraz zor oldugunu fark ettim. Cunku, 512 karakterden olusan sabit bir tablo var. Yukaridaki sabit sayi ve gecerli serial bu tablodan aliniyor. Ayrica, 999888 seklinde baska bir sabit sayi daha var.

Butun bu zorluklara ragmen, KeyGen yapabilmemiz icin fazla bir engel yok. Madem gecerli serialin yerini biliyoruz, bunu MessageBoxA ile gosterebiliriz. Yalniz, Visual Basic WideChar ile calisiyor ve gecerli seriali MessageBoxA ile gosterebilmemiz icin ek bir islem yapmamiz gerekecek.

017F:00454E02 CALL [MSVBVM50!__vbaStrCmp]
017F:00454E08 MOV EDI,EAX                       <-- [d edx] а serial
...
017F:00454E24 TEST DI,DI 
017F:00454E27 JZ 004551D6                       <-- Kotu cocuk

017F:004551D6 MOV EAX,80020004
017F:004551DB MOV [EBP-68],EAX
...
017F:00455236 CALL [MSVBVM50!rtcMsgBox]         <-- Hata
017F:0045523C LEA EAX,[EBP-70] 


Gecerli serialin karakterleri arasinda 00 lar var. Bu 00 lari degistirmeden edx degerini PUSH edip MessageBoxA yi cagirirsak, sadece ilk karakter olan “3” u gorecegiz. Ben, bu 00 lari 20 lerle (bosluk) doldurmayi deneyecegim. 454E08 den itibaren kodumuzu ekleyelim. 

0167:00454E08 PUSHAD                            <--  Register lari sakla
0167:00454E09 MOV EAX,EDX                       <--  eax = serialin offseti
0167:00454E0B INC EAX                           <--  bir byte ileri git
0167:00454E0C XOR EBX,EBX                       <--  ebx = 0 (sayac)
0167:00454E0E MOV ECX,00000020                  <--  ecx = 20 (bosluk karakteri)
0167:00454E13 MOV [EAX],CL                      <--  00 in uzerine 20 yi yaz
0167:00454E15 ADD EAX,00000002                  <--  eax 2 artiyor
0167:00454E1A INC BL                            <--  sayacimizi 1 artir
0167:00454E1C CMP BL,0F                         <--  15 karakter yazdik mi ?
0167:00454E1F JNZ 00454E13                      <--  Hayir, geri don
0167:00454E21 PUSH 00                           <--  MessageBoxA ya basliyoruz
0167:00454E23 PUSH EDX                          <--  [d edx] gecerli serial
0167:00454E24 PUSH EDX

0167:00454E25 PUSH 00
0167:00454E27 CALL USER32!MessageBoxA           <--  seriali goster
0167:00454E2C POPAD                             <--  Register lar eski hallerinde
0167:00454E2D JMP 0045523C                      <--  Hata sonrasina zipla


Bu kucuk rutin calisinca serial su sekilde degisti.

0187:004E4FB8 33 20 54 20 31 20 50 20-37 20 55 20 57 20 4D 20 3 T 1 P 7 U W M
0187:004E4FC8 32 20 34 20 53 20 50 20-34 20 32 20 39 20 33 20 2 4 S P 4 ? ? ?. 

Simdi, hata mesaji yerine gecerli seriali gorebiliyoruz. Karakterler arasinda bosluklar var tabii ki. Yontem tamamen bana aittir ve guzel olmayabilir. Cok daha kisa veya degisik sekillerde yapilabilir. Ornegin, WideCharToMultiByte fonksiyonu kullanilarak, serial direkt olarak 00 lardan arindirilabilir. Yapanlar Board’a mesaj ativersin.

 

Son Notlar

Bir programı kullanarak para kazanıyorsanız, programı satın alın.