|
xGuest Inviter bot v1.81 |
|
amois |
|
Program Tipi: Utility |
|
Araçlar:
SoftICE |
|
|
|
|
"Yenilsen de yensen de, taraftarin seninle. Iyi gunde, kotu gunde, seninle birlikte."
|
Yazı |
Program, PE-Compact ile korunmus. Unpack islemini sizlere birakiyorum.
“amois”
ve “1907”
degerlerini girdikten sonra, program tekrardan baslamak istiyor. RegMon ile
inceledigimiz zaman ,
HKEY_CURRENT_USER\Software\xGuest\TfmMain\RegistrationKey
<- 1907
HKEY_CURRENT_USER\Software\xGuest\TfmMain\UserName
<- amois
Programin buralardan data okumasini bekleyecegiz.
[bpx
RegQueryValueExA if *(esp->8) == ‘User’ do “d esp->14;”] veya
[bpx RegQueryValueExA if *(esp->8) == ‘Regi’ do “d
esp->14;”] olabilir.
Breakpoint calistiktan sonra, Memory’de “amois” ve / veya “1907” icin search
ederek ilerleyelim. Yani, programin bu verilerle bir islem yaptigi bolumu
bulacagiz. Verilerin bulundugu Memory bolgesine breakpoint koyarak, kisa yoldan
sonuca gitmek mumkun.
[s
0 l ffffffff ‘amois’]
veya
[s
0 l ffffffff ‘1907’]
yaparak, degerlerin memorydeki yerlerini arastirin. [bpm
XXXXXXXX] ile bu bolgelere breakpoint koyun. Breakpoint calistiktan
sonra, [F10] ile trace ederek ne oldugunu anlamaya
calisin. Ornegin, bir cagri oncesinde bu degerler push ediliyor ve cagri sonunda
“5” veya “4” degerlerini aliyorsa (“amois” = 5, “1907” = 4), 99% string uzunlugu
hesaplaniyordur.
Genelde, user name, karakter bazinda bir algoritmaya tabii tutulur. Buradan bir
deger cikar. Bu deger sallama serial ile karsilastirilir veya tekrardan ikinci
bir isleme girer. Onemli olan, user name’in karakter bazinda isleme girdigi
bolumu bulmaktir.
Sallama serialler ise, genelde karakter bazinda bir isleme girmez. Direkt veya
Hex. donusumu yapildiktan sonra karsilastirma yapilir. Bu anlattiklarim, cok iyi
korunan programlarda degisse de, bircok program icin gecerlidir.
...
0167:004D286A MOV EAX,[EBP-10]
<- 1907
0167:004D286D MOV EDX,[EBP-0C]
<- ?
0167:004D2870 CALL 00403FD8
<- esitler mi ?
0167:004D2875 JNZ 004D2897
<- kotu cocuk
Goruldugu gibi, sallama serial hicbir islemden gecmeden direkt olarak olmasi
gereken ile karsilastiriliyor.
KeyGen algoritmasi da biraz yukarida duruyor.
0167:004D283D
MOV EDX,00000001
<- sayac
0167:004D2842 MOV ECX,[EBP-08]
<- amois
0167:004D2845 MOVZX ECX,BYTE PTR [EDX+ECX-01] <- a m o i s
0167:004D284A MOV ESI,0001046A
<- sabit deger
0167:004D284F SUB ESI,ECX
0167:004D2851 IMUL ESI,[004DF144]
<- [004DF144]'de sabit bir deger var
0167:004D2858 ADD EBX,ESI
0167:004D285A INC EDX
0167:004D285B DEC EAX
0167:004D285C JNZ 004D2842
User name, karakter bazinda bir donguden geciyor ve gecerli serial olusuyor.
.data
isim db "amois",0
; user name
isim_uz dd 0h
; degisken
sonuc db 32h dup(?)
; kullanacagimiz gecici alan
tur db "%X",0 ; sonucu Hex. olarak yazacagiz
.code
start:
invoke StrLen, addr isim
; user name uzunlugunu bul
mov isim_uz, eax
; isim uzunlugu isim_uz degiskeninde
xor ebx, ebx
; dongu oncesi ayarlar
mov edx, 01
; orjinal programdan
@dongu:
lea ecx, isim
; isim offset degeri ecx’de
movzx ecx, byte ptr [edx+ecx-01]
; a m o i s
mov esi, 01046ah
; orjinal programdan
sub esi, ecx
;
imul esi, 0??h
; bu deger orjinal programdan
add ebx, esi
;
inc edx
; sonraki karakter
dec isim_uz
; isim uzunlugunu 1 azalt
jnz @dongu
; karakter kaldi mi ?
; dongu sonucu
ebx’de gecerli serial
@yaz:
invoke wsprintf, addr sonuc, addr tur, ebx ; ebx degerini Hex. olarak sonuc'a yaz
invoke MessageBoxA, 0, addr sonuc, addr isim, 0 ; serial ve user name'i goster
@cikis:
invoke ExitProcess, 0 ; programdan cik
end start
|
|
Bir programı kullanarak para kazanıyorsanız, programı satın alın.