|
Talisman v2.21 |
|
amois |
|
Program Tipi: Utility |
|
Araçlar:
SoftICE |
|
|
|
|
Desktop gorunumunu degistiren bir utility.
|
Yazı |
Register bolumune “amois” & “1907”
degerlerini girelim. [bpx hmemcpy] -> birkac tane [F12]
0167:0047AE32
CALL 0042AFEC
0167:0047AE37 CMP DWORD PTR [EBP-0C],00
<- Buradayiz
0167:0047AE3B JZ 0047AFA1
0167:0047AE41 LEA EDX,[EBP-10]
0167:0047AE44 MOV EAX,[EBX+000002E4]
0167:0047AE4A CALL 0042AFEC
<- uzunluk = 5
0167:0047AE4F CMP DWORD PTR [EBP-10],00
<- girdi var mi ?
0167:0047AE53 JZ 0047AFA1
<- hayir yok
0167:0047AE59 LEA EDX,[EBP-0C]
0167:0047AE5C MOV EAX,[EBX+000002E0]
0167:0047AE62 CALL 0042AFEC
<- uzunluk = 4
0167:0047AE67 MOV EAX,[EBP-0C]
<- “1907”
0167:0047AE6A CALL 0040810C
<- Hex’e cevir = 0773h
0167:0047AE6F MOV [EBP-14],EAX
0167:0047AE72 FILD DWORD PTR [EBP-14]
0167:0047AE75 CALL 00402998
0167:0047AE7A MOV [EBP-04],EAX
0167:0047AE7D LEA EDX,[EBP-08]
0167:0047AE80 MOV EAX,[EBX+000002E4]
0167:0047AE86 CALL 0042AFEC
0167:0047AE8B XOR ESI,ESI
0167:0047AE8D MOV EAX,[EBP-08]
<- “amois”
0167:0047AE90 CALL 00403CEC
<- uzunlugu = 5
0167:0047AE95 TEST EAX,EAX
0167:0047AE97 JLE 0047AEAC
0167:0047AE99 MOV EDX,00000001
0167:0047AE9E MOV ECX,[EBP-08]
<- “amois”
0167:0047AEA1 MOVZX ECX,BYTE PTR [EDX+ECX-01]
0167:0047AEA6 ADD ESI,ECX
0167:0047AEA8 INC EDX
0167:0047AEA9 DEC EAX
0167:0047AEAA JNZ 0047AE9E
<- dongu var
0167:0047AEAC MOV [EBP-14],ESI
0167:0047AEAF FILD DWORD PTR [EBP-14]
0167:0047AEB2 CALL 00402998
<- eax = 219h
0167:0047AEB7 IMUL EAX,EAX,00000309
<- eax = 65D??h oldu
0167:0047AEBD MOV ESI,EAX
0167:0047AEBF CMP ESI,[EBP-04]
<- esitler mi ?
0167:0047AEC2 JNZ 0047AF87
<- kotu cocuk
Username’e bagli olarak, 47AE9E ~ 47AEAA arasindaki dongude bir deger
hesaplaniyor. Yani, username’deki karakterlerin ASCII degerleri toplaniyor. Daha
sonra bu deger 47AEB7’de 309h ile carpilip bir sayi bulunuyor. Bu sayinin,
girdigimiz serilain Hex degerine esit olmasi gerekiyor. Yani, cok basit bir
algoritma.
KeyGen yazarken kullanabilecegimiz GetCommandLine
parametresini aciklamaya calisacagim. Ornegin, yukaridaki algoritmayi ASM olarak
kodladiktan sonra, olusan exe’miz talis.exe olsun.
Herhangi bir username icin gecerli serial bulmanin bir yolu da,
talis.exe’yi parametreli olarak calistirmaktir.
Ornegin, “talis amois”. Amacimiz, yazacagimiz ASM
kodu ile exe dosyasinin sonuna eklenen parametreyi alip, username olarak
kullanmak ve sonucu bir messagebox’da gostermek.
Parametre olarak bosluk kullanmanin sakincalari olabilir. Dosyayi
calistirdigimiz directory’de bosluk karakteri varsa isler karisir.
GetCommandLine fonksiyonu, dosyanin bulundugu
dizinin adini tam olarak verdigi icin, “c:\program
files\talis amois” seklindeki bir adres 2 adet bosluk karakteri icerir.
Bu nedenle ayirac olarak, “-“ kullanmak daha
mantikli. Gerci, directory adinda “-“
karakteri varsa, yine problem cikacaktir.
.data
isim dd 0h
; parametreden gelecek username icin offset degeri
sonuc db 32h dup(?)
; sonucu buraya yazacagiz
tur db "%lu",0
; long integer olarak
.code
start:
call @parametre_al
; kullanicinin girdigi parametreyi al
invoke StrLen, isim
; uzunlugunu bul
xor esi, esi
mov edx, 01
@dongu:
mov ecx, isim
; username offset degeri isim’de
...
; program alip yaziverin
...
jnz @dongu
imul eax, eax, 0309h
; eax = gecerli serial
invoke wsprintf, offset sonuc, offset tur, eax ;
invoke MessageBoxA, 0, offset sonuc, isim, 0
; kontrol icin username de gorunsun
@cikis:
invoke ExitProcess, 0
@parametre_al:
invoke GetCommandLine
; kullanicinin girdigi komutu aynen al
mov edi, eax
; offset degeri = edi
cld
; direction flag = 1
mov al, 02dh
; “-“ karakteri aranacak
mov cx, 0ffh
; en fazla 255 karakter
repne scasb
; “-“ karakteri bulana kadar git
mov isim, edi
; “-“ karakterinin yeri + 1
ret
end start
|
|
Bir programı kullanarak para kazanıyorsanız, programı satın alın.