|
EMAIL Maker v1.0 |
|
amois |
|
Program Tipi: * |
|
Araçlar:
SoftIce |
|
|
|
|
"Bisiklet, en verimli ulasim aracidir. En az enerji tuketimi ile hareket eden bir mekanizma olarak, insan ve bisikletin birlesimi, her turlu canlidan veya makineden daha iyi isler. Insan, bir bisiklete bindiginde enerji tuketimi, kilometrede bir gram agirlik icin 0.6 jule duser. Hareket eden hicbir hayvan veya makine bu degere ulasamaz. Bir insan, yururken tukettigi enerjiyi tuketerek, bisikletle (ruzgarin artan direnci de hesaba katildiginda) 2 veya 3 kat hizli yol alabilir."
|
Yazı |
Sallama serial “1907” -> [bpx
hmemcpy] -> [F12]
0167:0040267D
PUSH DWORD PTR [EDI]
<- buradayiz
0167:0040267F MOV ECX,ESI
0167:00402681 CALL 004026CE
<- ?
0167:00402686 TEST EAX,EAX
0167:00402688 JZ 004026AD
<- kotu cocuk
...
0167:004026AD XOR EAX,EAX
0167:004026AF PUSH EAX
0167:004026B0 PUSH EAX
0167:004026B1 PUSH 00406124
0167:004026B6 CALL 00402F9E
<- hata
[bpx 402681] ->
...
0167:0040277D PUSH EBX
<- 1907
0167:0040277E CALL ESI
<- uzunluk = 4
0167:00402780 CMP EAX,1E
<- 30 digit mi ?
0167:00402783 JZ 00402789
<- evet
Sallama serial “QWERTYUIOPASDFGHJKLZXCVBNM1907”
olsun.
...
0167:0040279D LEA EAX,[EBP-38]
<- tablo
0167:004027A0 MOV EDI,EBX
0167:004027A2 SUB EAX,EBX
0167:004027A4 MOV [EBP-18],EAX
0167:004027A7 JMP 004027AC
0167:004027A9 MOV EAX,[EBP-18]
0167:004027AC CMP BYTE PTR [EDI+EAX],01
<- ?
0167:004027B0 JNZ 004027BD
0167:004027B2 MOV AL,[EDI]
<- Q W E R ...
0167:004027B4 LEA ECX,[EBP-10]
<- ecx = 63F4D8
0167:004027B7 PUSH EAX
<- Q W E R ...
0167:004027B8 CALL 00402FB6
0167:004027BD INC DWORD PTR [EBP+08]
<- sayaci artir
0167:004027C0 PUSH EBX
<- QWERTYUIOP...
0167:004027C1 INC EDI
0167:004027C2 CALL ESI
<- uzunluk
0167:004027C4 CMP [EBP+08],EAX
<- hepsini okuduk mu ?
0167:004027C7 JL 004027A9
<- devam
40279D’de eax’e, sabit bir tablonun adresi ataniyor. Buradaki degere gore,
sallama serialden data okunuyor / okunmuyor. 4027AC’ye gore, tablodaki deger 01
degilse, sallama serialden data okunmuyor. Sayac 1 artirilarak sonraki karaktere
geciliyor.
016F:0063F4B0
01 01 02 02 02 01 02 01-01 02 01 01 02 02 02 02 ................
016F:0063F4C0 02 01 02 01 02 01 02 02-01 02 02 02 01 02 00 5F ..............._
Sallama serial -> “QWxxxExRTxYUxxxxxIxOxPxxAxxxSx”
olsun. Boylece, serialden “QWERTYUIOPAS”
karakterleri okunacak / isleme girecek.
[d
63F4D8] -> 6542A0 -> [d 6542A0] -> “QWERTYUIOPAS”
Dongu sonucunda [6542A0] bolgesinde sallama serialin ilgili digitleri yanyana
dizildi.
0167:004027C7
JL 004027A9
0167:004027C9 PUSH DWORD PTR [EBP-10]
<- “QWERTYUIOPAS”
0167:004027CC MOV ECX,[EBP-14]
0167:004027CF CALL 0040280B
<- basamaklari topla = 3BDh
0167:004027D4 MOV ECX,[EBP-14]
0167:004027D7 PUSH 004061F8
<- “HIREDKEYST??”
0167:004027DC MOV EDI,EAX
<- edi = 3BDh = 957
0167:004027DE CALL 0040280B
<- basamaklari topla = 395h
0167:004027E3 MOV ESI,EAX
<- esi = 395h = 917
0167:004027E5 SUB ESI,EDI
<- 395 – 3BD = FFFFFFD8
0167:004027E7 POP EDI
0167:004027E8 NEG ESI
<- 28h = 40
0167:004027EA SBB ESI,ESI
<- FFFFFFFF
0167:004027EC INC ESI
<- 0
Ilgili basamaklarimiz 4027D7’deki degere esitse Registered olacagiz. Yani,
sallama serialin ilgili basamaklarinin ASCII toplami 395h olmak zorunda.
Boylece, 4027E5’de esi=0 ve 4027EC’de esi=1 olacak ve bu deger eax’e atanacak.
402688’de JUMP yaparak Registered olacagiz.
KeyGen kodunu VB ile yazdim. Daha iyi anlasilmasi icin biraz aciklama gerekecek.
Bize gerekli 12 digitlik serialin basamaklarini Random olarak bulacagiz.
Digitlere bagli olarak da, ascii toplamimizi 395h ile kontrol edecegiz. Ornegin,
ilk 5 digitimiz rastgele “zzzzz” seklinde olursa, gecerli serial bulamayiz.
Neden mi ?
Ascii “z” =
122 -> 122*5 = 610 -> Kalan 7 digit icin minumum degerimiz 7*48 = 336 ->
610 + 336 = 946 > 917 -> cozum yok
Bu nedenle bu kontrol islemini formule donusturmek gerekecek. Serialde sadece
harf ve rakam bulundugunu kabul edecegiz.
0 ~ 9 -> 48 ~
57 <- ascii degerleri
A ~ Z -> 65 ~ 90
a ~ z -> 97 ~ 122
En kucuk degerimiz 48 ve en buyuk degerimiz 122 olabiliyor.
Ascii (digit)
+ (12 - Sira No) * 48 + toplam <= 395h = 917 olmali.
(12 - Sira No) nicin formulde var ? Ornegin, rastgele serialin 5.inci basamagini
sorgulayalim. Kalan 7 basamak icin. minimum verebilecegimiz deger 7*48 = 336
dir. 5.inci basamaga kadar olan bolumun ascii toplam degerini AST ile
gosterirsek ->
AST + Ascii
(5.inci digit) + 336 <= 917 olmalidir.
Bu sart saglanmiyorsa, 5.inci digitin ascii degeri, esitlik saglanana kadar
azaltilmalidir veya daha kucuk olacak sekilde Random olarak yeniden
bulunmalidir. Esitlik saglandiginda da, tekrardan harf veya rakam olup olmadigi
kontrol edilmelidir.
hedef = &H395
; hedef degerimiz 917
sonuc = "112221211211222221212122122212"
; onemli / onemsiz digitler
rastgele = ""
; 12 digit buraya yazilacak
For i = 1 To 11
; 11 digit bulunacak
uretec:
; Random sayi uretmek icin
Randomize
; ayni sayiyi uretmemesi icin
a = Int((75 * Rnd) + 48))
; 48 ile 122 arasinda uret
karakter = (a > 57 And a < 65) Or (a > 90 And a < 97) ;
harf / rakam kontrolu
If karakter = True Then a = a + 7
; harfe / rakama cevir
kontrol:
; hedef tasmasi kontrolu
ara_toplam = toplam + a + (12 - i) * 48
; toplam ascii degerimiz
If ara_toplam <= hedef Then
; hedefi geciyor muyuz ?
b = a
; hayir, gecmiyoruz
Else
a = a – 1
; evet geciyoruz, 1 azalt
karakter = (a > 57 And a < 65) Or (a > 90 And a < 97) ;
harf / rakam kontrol
If karakter = True Then a = a – 7
; harfe / rakama cevir
GoTo kontrol
; hedefi geciyor muyuz ?
End If
toplam = toplam + a
; ascii toplamimiz
rastgele = rastgele + Chr(b)
; 11 digitlik bolumu olustur
Next i
; devam et
son = hedef – toplam
; son digit tam olarak bulunmali
rastgele = rastgele + Chr(son)
; son digiti ekle
duzenle:
; onemsiz digitlerle birlestir
sayac = 1
For j = 1 To 30
; 30 digitli serial
tablo = Mid(sonuc, j, 1)
If tablo = "1" Then
; digit onemli mi ?
serial = serial + Mid(rastgele, sayac, 1)
; evet, onemli
sayac = sayac + 1
Else
serial = serial + "x"
; digit onemsiz, “x” koy
End If
Next j
; devam et
Ornek serial -> "abxxxJxhZxMaxxxxxXx0x0xx0xxx?x"
|
|
Bir programı kullanarak para kazanıyorsanız, programı satın alın.