|
Cool Find v1.15 |
|
amois |
|
Program Tipi: Utility |
|
Araçlar:
SoftICE |
|
|
|
|
"Yenilsen de yensen de, taraftarin seninle. Iyi gunde, kotu gunde, seninle birlikte."
|
Yazı |
User name “amois” ve sallama serial “1907”
girdikten sonra, program tekrar baslamak istiyor. Girdigimiz degerleri, Key file
veya Registry’den kontrol edecek. RegMon ile inceledigimiz zaman,
HKEY_LOCAL_MACHINE\Software\Cool Find\Serial1
<- C2 10 19 17 14 17 0A 17 1A 17 33 ...
HKEY_LOCAL_MACHINE\Software\Cool Find\Serial2
<- 499602d2h <- 1234567890
HKEY_LOCAL_MACHINE\Software\Cool Find\User Name
<- amois
Programin buradan data okudugu yeri bulmamiz gerekiyor.
[bpx RegQueryValueExA if *(esp->8) == ‘Seri’ do “d
esp->14;”]
0167:0044096F
CALL EDI
0167:00440971 TEST EAX,EAX
<- buradayiz
0167:00440973 JZ 00440999
0167:00440975 MOV EAX,[ESP+0C]
0167:00440979 TEST EAX,EAX
0167:0044097B JZ 00440984
0167:0044097D PUSH EAX
0167:0044097E CALL [ADVAPI32!RegCloseKey]
0167:00440984 LEA ECX,[ESP+10]
0167:00440988 CALL 005281AF
0167:0044098D POP EDI
0167:0044098E POP ESI
0167:0044098F XOR EAX,EAX
0167:00440991 POP EBX
0167:00440992 ADD ESP,00000118
0167:00440998 RET
0167:00440999 PUSH ESI
0167:0044099A CALL 004017D0
<- eax = 983433F9 oldu
0167:0044099F MOV ECX,[ESP+20]
<- 499602D2 oldu
0167:004409A3 ADD ESP,04
0167:004409A6 CMP ECX,EAX
<- esitler mi ?
0167:004409A8 JNZ 004409BF
<- kotu cocuk
Girdigimiz sallama serial gecerli olmadigi icin, 499602D2h = 1234567890 sekline
cevrilerek Registry’e yazilmis. Daha sonra da, 4409A6’da olmasi gereken ile
karsilastirilmis. Ilk basta gecerli seriali 983433F9 olarak buldugumuzu
dusunuyoruz. Fakat, bu degeri girdigimiz halde, Registry’deki Serial2 degeri
499602D2 degismemis. Bunun anlami su; girdigimiz 983433F9 degeri de bir takim
islemlerden gecmis, ama gecerli olmadigi icin Registry’e 499602D2 olarak
yazilmis.
Bu noktada, programin nerede Registry’e deger yazdigini bulmamiz ve burada bir
ipucu aramamiz gerekiyor.
SetValueEx
HKLM\SOFTWARE\Cool Find\User Name SUCCESS "amois"
SetValueEx HKLM\SOFTWARE\Cool Find\Serial2 SUCCESS
0x499602D2
“amois” ve “983433F9”
degerlerini girdikten sonra [bpx RegSetValueExA] ->
0167:00498930
CALL ESI
0167:00498932 TEST EAX,EAX
<- Buradayiz
0167:00498934 JNZ 00498962
0167:00498936 MOV EDX,[ESP+18]
0167:0049893A PUSH EDX
0167:0049893B CALL 004026D0
<- eax = 499602D2 oldu
0167:00498940 MOV ECX,[ESP+08]
[bpx 49893B] -> [F8]
...
0167:004981DB
MOV EAX,[ECX-08]
<- eax = 8, serial uzunluk
0167:004981DE MOV [EBP-3C],EAX
0167:004981E1 CMP EAX,0B
<- 11 digit mi ?
0167:004981E4 JZ 00498214
0167:004981E6 MOV DWORD PTR [EBP-24],499602D2
<- boo
Girmemiz
gereken serial 11 digit olmak zorunda. [F10] ile
devam ->
0167:00498214
PUSH 03
<- 3 digit al
0167:00498216 LEA EDX,[EBP-2C]
0167:00498219 PUSH EDX
0167:0049821A MOV ECX,ESI
0167:0049821C CALL 0051C680
0167:00498221 MOV [EBP-44],EAX
0167:00498224 MOV EAX,[EAX]
<- 983
0167:00498226 MOV [EBP-40],EAX
0167:00498229 PUSH 0059DC78
<- CF-
0167:0049822E PUSH EAX
0167:0049822F CALL 004EF132
<- esitler mi ?
Serialin ilk 3 digiti de “CF-“ olmali -> “CF-983433F9”
olarak girdigimizde, Registry’deki Serial2 degerimiz -> "Serial2"=dword:9d202???
oldu. [F10] ->
0167:00498278
PUSH ECX
<- 983433F9
0167:00498279 CALL 00403049
<- eax = 983433F9 oldu
0167:0049827E ADD ESP,04
0167:00498281 MOV [EBP-1C],EAX
0167:00498284 MOV ESI,[005AFB38]
<- ??
0167:0049828A XOR ESI,EAX
<- esi = 9D202??? oldu
0167:0049828C MOV [EBP-38],ESI
Girdigimiz serilalin 4.uncu digitinden itibaren 8 digitlik bolumu, [005AFB38]
deki degerle XOR islemine girerek 9D202??? oldu. Ve bu deger Serial2 bolumune
yazildi.
Serial2’de olmasi gereken degerimizin 983433F9 oldugunu biliyoruz. Hangi sayi
[005AFB38] deki degerle XOR islemine girince 983433F9 degerini verir ? Bu degeri
de kendiniz buluverin.
Peki KeyGen ?
"Serial1"=hex:c2,10,19,17,14,17,0a,17,1a,17,33,17,1c,17,16,03 <-
amois
"Serial1"=hex:c2,10,19,17,14,17,0a,17,1a,17,33,17,1c,17,16,03 <-
fenerbahce
User name’in degismesi, Serial1 uzerinde bir etki yaratmiyor. O zaman program,
“User Name” den data okuduktan sonra, bazi islemler yapip 983433F9 degerini
buluyor.
[bpx RegQueryValueExA if *(esp->8) == ‘User’ do “d
esp->14;”]
[F10] ile takip ettigimizde, yine 44099A’daki
cagriya gelecegiz. Yani, KeyGen algoritmasi burada. [bpx
44099A] -> [F8] -> Birazcik takip
0167:00498151
MOV EAX,[ESI]
<- amois
0167:00498153 LEA ECX,[ESP+04]
0167:00498157 PUSH ECX
0167:00498158 MOV EDX,[EAX-08]
<- 5 <- amois uzunluk
0167:0049815B PUSH EDX
0167:0049815C PUSH EAX
0167:0049815D CALL 00401F32
<- ?? blah blah
0167:00498162 MOV EAX,[005AFB38]
<- eax=5141??? sabit deger
0167:00498167 MOV ECX,[ESP+10]
<- ecx=9D202??? oldu
0167:0049816B ADD ESP,0C
0167:0049816E XOR EAX,ECX
<- eax=983433F9 oldu
49815D’deki cagri yaklasik 2960 satirdan olusuyor. Ne kadar uzun olursa, o kadar
zor olacak sanki ? Hic de oyle degil dogrusu. Bu cagriyi ASM koduna cevirebilen
utility’ler mevcut. IDA’yi da kullanabilirsiniz.
.data
isim db "amois",0
; user name
isim_uz dd 0h
; user name uzunluk degeri icin
sonuc db 32h dup(?)
;
cop db 32h dup(?)
;
.code
start:
invoke StrLen, addr isim
; user name uzunlugunu bul
mov isim_uz, eax
lea eax, isim
; orjinal programdan
lea ecx, cop
;
push ecx ;
mov edx, isim_uz
;
push edx
;
push eax
;
call LOC_00401F32
; serial algoritmasi
mov ecx, dword ptr [cop]
; gecerli serial ecx’de
@cikis:
invoke ExitProcess, 0
LOC_00401F32: ;Ref: 0049815D
; algoritma basliyor
JMP LOC_0049FCC0
; yaklasik 2960 satir
CALL LOC_00401F32
; blah blah
LOC_0049FCC0: ;Ref: 00401F32
SUB ESP,000000180h
...
JNZ LOC_004A2D30
LOC_004A2D57: ;Ref: 004A2D2A
POP ESI
RETN
;
end start
|
|
Bir programı kullanarak para kazanıyorsanız, programı satın alın.