Adres Bank v4.02

amois

Program Url: w*w.siberya.com.tr
Program Tipi: Utility

Araçlar:

 

SoftICE

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

Başlangıç

 

"Yenilsen de yensen de, taraftarin seninle. Iyi gunde, kotu gunde, seninle birlikte."

 

Yazı


Acilistaki nag screende, bir urun numarasi cikiyor. Programin icinden Registration bolumu yok. Key File veya Registry korumasi var. RegMon ile takip ettigimizde,

HKLM\SOFTWARE\Siberya\AdresBank\ClassID SUCCESS "36B2760B1340079B"     <- Urun No
HKLM\SOFTWARE\Siberya\AdresBank\ClassNo NOTFOUND                       <- ??

Bu bolume sallama serial olarak “1907” giriyoruz. Artik programin bu bolumden data aldigi yeri bulmak gerekiyor. Cesitli yontemler mevcut. Registry icin mevcut breakpointler kullanilabilir. Veya, trace sirasinda memory'de urun no search ettirilebilir. Yani, search sonuccuz kaliyorsa, henuz program bu datayi okumamis demektir. Hangi CALL dan sonra oldugunu sirasiyla bulmak gerekir. Daha sonra, yukaridan asagiya inerek gercek dongu bulunabilir. Veya, nag screen ipucu olarak kullanilabilir. Nag’in ciktigi cagridan geriye donuk bir inceleme yapilabilir.

QueryValueEx HKLM\SOFTWARE\Siberya\AdresBank\ClassID                   <- API

Breakpoint olarak RegQueryValueExA kullanacagiz.

[bpx RegQueryValueExA IF *(esp->4)==’Clas’ DO “D esp->14;”

Registry'de “Clas” ile baslayan bir adresten data okundugu sirada breakpoint calisacak. Bizde ise, ClassID ve ClassNo olmak uzere iki bolum var. RegMon’a gore “1907” nin okundugu bolum 6.inci QueryValueEx API’si. Bu nedenle 6.inci breakpointten sonra [F12]

0167:006CEA63 CALL ADVAPI32!RegQueryValueExA
0167:006CEA68 TEST EAX,EAX                                             <- Buradayiz

Su anda siberya.dll dosyasindayiz. Data window’da

016F:01851858 31 39 30 37 00 00 00 00-00 00 00 00 00 00 00 00 1907............

sallama seriali gorebiliyoruz. Artik bu noktadan itibaren kodu trace edecegiz. Memory kontrolune dikkat etmeyi unutmuyoruz. Birazcik [F10] takibi ve,

...
0167:006D0115 MOV EAX,[EBP-18] <- 36B2760B1340079B
0167:006D0118 MOV EDX,[EBP-20] <- 1907
0167:006D011B CALL 00693D88

Bu iki deger bazi dongulere giriyor. Buyuk ihtimal Memory’de baska bolumlere kopyalaniyorlar veya benzeri islemler. [F10] ile devam,

...
0167:006D022A MOV EDX,[EBP-50]                                         <- Bu da ne ?
0167:006D022D LEA EAX,[EBP-28]
0167:006D0230 CALL 00693A90

6D022A’da iken [d edx] ->

016F:018519DC 36 44 58 30 48 52 56 39-00 00 00 00 00 00 00 00 6DX0HRV9........

Sazan gibi atlayip, “1907” degerini “6DX0HRV9” veya "3644583048525639" ile degistirmemiz sonucsuz kalacak :(. [F10] ile devam edelim bakalim.

0167:006D021F LEA EDX,[EBP-50]
0167:006D0222 MOV EAX,[EBP-28]                                        <- 36 B2 76 0B 13 40 07 9B
0167:006D0225 CALL 006CF7A8
0167:006D022A MOV EDX,[EBP-50]
0167:006D022D LEA EAX,[EBP-28]
0167:006D0230 CALL 00693A90
0167:006D0235 LEA EDX,[EBP-54]
0167:006D0238 MOV EAX,[EBP-1C]                                        <- 36 B2 76 0B 13 40 07 9B
0167:006D023B CALL 006CF7A8
0167:006D0240 MOV EDX,[EBP-54]                                        <- 6DX0HRV9
0167:006D0243 LEA EAX,[EBP-1C]
0167:006D0246 CALL 00693A90
0167:006D024B SHR DWORD PTR [006D2820],02
0167:006D0252 LEA EDX,[EBP-58]
0167:006D0255 MOV EAX,[EBP-24]                                        <- 19 07
0167:006D0258 CALL 006CF7A8
0167:006D025D MOV EDX,[EBP-58]                                        <- 19 47
0167:006D0260 LEA EAX,[EBP-24]
0167:006D0263 CALL 00693A90
0167:006D0268 MOV EAX,[EBP-1C]                                        <- 6DX0HRV9
0167:006D026B MOV EDX,[EBP-24]                                        <- 19 47
0167:006D026E CALL 00693D88                                           <- ?
0167:006D0273 JNZ 006D0296

Artik algoritmanin merkezindeyiz. Oncelikle 6D026E’deki cagri ilgimizi cekiyor. 2 deger push edilip 6D0273 de kontrol ediliyor. Manual olarak 6D026B’de iken [ebp-24] bolgesini [ebp-1c] ye esitlememiz sonucsuz kaliyor. Peki, 6D0258’deki cagri “1907” olan sallama seriali alip “19 47” sonucunu nasil veriyor ? Ayrica, 6D023B’deki cagri urun no’yu alip nasil 6DX0HRV9 degerini veriyor ? Veya bu deger nedir, ne ise yarar ? Goruldugu gibi su an cevapsiz bircok soru var. Ilk olarak gecerli serial bulmaya calismamiz en dogrusu. CALL 6CF7A8 cagrisi, bu bolumde 3 kez cagrildigi icin kritik bir noktada duruyor. Oncelikle “1907” nin nasil degistigini bulmaya calisalim. [bpx 6D0258] -> [F8]

...
0167:006CF4CE MOV BYTE PTR [EBP-0D],01
0167:006CF4D2 LEA EAX,[EBP-14]
0167:006CF4D5 XOR EDX,EDX
0167:006CF4D7 MOV DL,[EBP-0D]
0167:006CF4DA MOV ECX,[EBP-04]
0167:006CF4DD MOV DL,[EDX+ECX-01]                                     <- 19, 07
0167:006CF4E1 MOV ECX,[EBP-08]                                        <- FC, 40734D
0167:006CF4E4 SHR ECX,10                                              <- 00, 40
0167:006CF4E7 XOR DL,CL                                               <- 19, 47
0167:006CF4E9 CALL 00693BA0
0167:006CF4EE MOV EDX,[EBP-14]
0167:006CF4F1 MOV EAX,[EBP+08]
0167:006CF4F4 CALL 00693C80
0167:006CF4F9 MOV EAX,[EBP+08]
0167:006CF4FC XOR EAX,EAX
0167:006CF4FE MOV AL,[EBP-0D]
0167:006CF501 MOV EDX,[EBP-04]
0167:006CF504 MOVZX EAX,BYTE PTR [EAX+EDX-01]                         <- 19, 07
0167:006CF509 ADD EAX,[EBP-08]                                        <- [ebp-08]= FC, 40734D
0167:006CF50C IMUL DWORD PTR [EBP-0C]                                 <- [ebp-0c]= 3B1B
0167:006CF50F ADD EAX,[EBP+0C]                                        <- [ebp+0c]= 7F16
0167:006CF512 MOV [EBP-08],EAX                                        <- 40734D
0167:006CF515 INC BYTE PTR [EBP-0D]
0167:006CF518 DEC BYTE PTR [EBP-0E]
0167:006CF51B JNZ 006CF4D2

Burada bir dongu var. 6CF4E7 de DL degeri, 1.turda 19, 2.turda 47 degerini aldi. Benim gorusum su sekilde oldu; 6D026E deki cagriya dayanarak, girmemiz gereken serial yukaridaki dongu sonucu “6DX0HRV9”, yani 36 44 58 30 48 52 56 39 degerini almali. O zaman buyurun Brute-Force’a ->

.data

hedef db 036h,044h,058h,030h,048h,052h,056h,039h,0        ; bulmamiz gereken
sonuc db 32h dup(?)                                       ; serial buraya
sabit_1 dd 03b1bh                                         ; orjinal programdan
sabit_2 dd 07f16h                                         ; orjinal programdan
degis_1 dd 0fch                                           ; orjinal programdan
sayac_2 dd 0h
sayac_3 dd 0h

.code

start:

@dongu:
mov edx, sayac_3                                         ; Brute-Force icin 00’dan basliyoruz
mov ecx, degis_1                                         ; ilk basta FCh degeri olmali
shr ecx, 10h                                             ; orjinal programdan
xor dl, cl                                               ; orjinal programdan
lea eax, hedef                                           ; hedef’in offset degeri
add eax, sayac_2                                         ; 1 byte al, 36 44 58 30 48 52 56 39
cmp dl, byte ptr [eax]                                   ; esitler mi
je @ayar                                                 ; o zaman sonuc’a yaz
inc sayac_3                                              ; sayac_3 1 artir
jmp @dongu                                               ; yeniden dene

@ayar:
mov eax, sayac_3                                         ; gecerli serial sayac_3’da
lea esi, sonuc                                           ; sonucu yazacagimiz bolumun offset degeri
add esi, sayac_2                                         ; her dongude 1 ileri git
mov byte ptr [esi], al                                   ; serilali byte olarak koy
mov eax, sayac_3                                         ; gecerli serial byte olarak eax’de
add eax, degis_1                                         ; orjinal programdan
imul sabit_1                                             ; orjinal programdan
add eax, sabit_2                                         ; orjinal programdan
mov degis_1, eax                                         ; orjinal programdan
inc sayac_2                                              ;
cmp sayac_2, 08h                                         ; hedef uzunlugunu gectik mi ?
mov sayac_3, 0                                           ; sayac_3 u sifirla
jne @dongu                                               ; kalan byte lari bulmaya devam et

Brute-Force sonucu, “36 03 46 D0 3B 56 EE 33” degerini bulduk. Registry’den ClassNo bolumunu degistirince “Kayitli kullanici” oluverdik. Boylece, KeyGen algoritmasinin 1.bolumu tamamlanmis oldu.

Peki, urun numarasi “36 B2 76 0B 13 40 07 9B” ile, hedef degerimiz “36 44 58 30 48 52 56 39” arasindaki iliski nasil?

[bpx 6D023B] -> [F8]

Birazcik [F10] takibi sonucu, yine Brute-Force’da kullandigimiz donguye geldik. Sadece, baslangic degerimiz olan FCh degiserek 3F2h olmus. Kalan sabit degerler degismemis.

.data

kaynak db 036h,0b2h,076h,0bh,013h,040h,07h,09bh,0
sonuc db 32h dup(?)
tur db "%X",0
sabit_1 dd 03b1bh
sabit_2 dd 07f16h
degis_1 dd 03f2h
sayac dd 0h

.code

start:

@dongu:
lea esi, kaynak                                        ; 36 B2 76 0B 13 40 07 9B <- urun no
add esi, sayac
movzx edx, byte ptr [esi]
mov ecx, degis_1                                       ; baslarken 3F2h
shr ecx, 10h
xor dl, cl                                             ; 36 44 58 30 48 52 56 39
lea edi, sonuc                                         ; sonucu buraya yazacagiz
add edi, sayac
mov byte ptr [edi], dl
movzx eax, byte ptr [esi]                              ; 36 B2 76 0B 13 40 07 9B
add eax, degis_1
imul sabit_1
add eax, sabit_2
mov degis_1, eax
inc sayac
cmp sayac, 08h                                         ; kaynak uzunlugunu gectik mi ?
jne @dongu                                             ; devam et

Dongu sonucunda “6DX0HRV9” yani “36 44 58 30 48 52 56 39” degerleri olustu.

Bu iki bolumun birlestirilmesi isini size birakiyorum. Full olarak KeyGen source vermek dogru olmaz.

Program sahibi icin de bir cift lafim olacak. "Makinemde SoftIce yuklu olmasi, size sorgusuz sualsiz makineyi OFF durumuna getirme hakkini vermez. Siz kim oluyorsunuz da bu hakki kendinizde goruyorsunuz ? Arka planda calisan uygulamalarim ne olacak? Makineyi direkt olarak OFF yapmak yerine, bir uyari mesaji verebilirdiniz. Kaldi ki bu da dogru bir davranis olmaz. Makinemde istedigim programi calistirma hakkima karisamazsiniz. Karistiniz da ne oldu sanki ? Buyrun, KeyGen algoritmasi yukarida.

Hicbir zaman direkt olarak kullanilabilecek dosya / serial vermedim / vermeyecegim. Yukaridaki KeyGen source’unu cok daha kullanisli ve genel bir halde de verebilirdim. Fakat, amacim bu degil. Ben, kullandiginiz algoritmayi cozerken zevk aldim dogrusu. Butun olarak bakildiginda, fena bir algoritma degil.

Yeni versiyonda, AntiSoftIce bolumlerini kaldirmaniz veya Computer OFF yapmak yerine uyari mesaji verdirmeniz daha “fair” bir davranis olacaktir."

 

Son Notlar

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