|
WebCam v3.01 |
|
amois |
|
Program Tipi: Utility |
|
Araçlar:
SoftICE |
|
|
|
|
WebCamera ile ilgili bir utility :)) Mr_Stop tarafından minik eklentiler yapılmıştır
|
Yazı |
Register bolumune “amois” & “1907”
degerlerini girelim. [bpx hmemcpy] -> [F12]
0167:00415C1B
LEA EAX,[EBP-20]
<- 00 00 00
0167:00415C1E PUSH EAX
0167:00415C1F LEA EAX,[EBP-0120]
<- amois
0167:00415C25 PUSH EAX
0167:00415C26 CALL 00418E0C
<- ??
0167:00415C2B POP ECX
0167:00415C2C LEA EAX,[EBP-0220]
0167:00415C32 POP ECX
0167:00415C33 PUSH ESI
0167:00415C34 PUSH EAX
0167:00415C35 PUSH 0000040F
0167:00415C3A PUSH DWORD PTR [EBP+08]
0167:00415C3D CALL EDI
<- serial uzunluk = 4
0167:00415C3F PUSH 10
0167:00415C41 LEA EAX,[EBP-10]
0167:00415C44 PUSH EBX
0167:00415C45 PUSH EAX
0167:00415C46 CALL 0041A7D6
0167:00415C4B ADD ESP,0C
0167:00415C4E XOR EDX,EDX
0167:00415C50 PUSH 01
0167:00415C52 POP EBX
0167:00415C53 MOV AL,[EDX+EBP-0220]
<- 1 9 0 7
0167:00415C5A CMP AL,30
0167:00415C5C JL 00415C66
0167:00415C5E CMP AL,39
0167:00415C60 JG 00415C66
0167:00415C62 SUB AL,30
0167:00415C64 JMP 00415C74
0167:00415C66 CMP AL,41
0167:00415C68 JL 00415C72
0167:00415C6A CMP AL,46
0167:00415C6C JG 00415C72
0167:00415C6E SUB AL,37
0167:00415C70 JMP 00415C74
0167:00415C72 MOV AL,DL
0167:00415C74 TEST BL,DL
0167:00415C76 JZ 00415C84
0167:00415C78 MOV ECX,EDX
0167:00415C7A SHR ECX,1
0167:00415C7C MOV CL,[ECX+EBP-10]
0167:00415C80 OR CL,AL
0167:00415C82 JMP 00415C89
0167:00415C84 SHL AL,04
0167:00415C87 MOV CL,AL
0167:00415C89 MOV EAX,EDX
0167:00415C8B SHR EAX,1
0167:00415C8D INC EDX
0167:00415C8E CMP EDX,10
0167:00415C91 MOV [EAX+EBP-10],CL
0167:00415C95 JB 00415C53
0167:00415C97 MOV EAX,[EBP-20]
<- ?
0167:00415C9A CMP EAX,[EBP-10]
<- ?
0167:00415C9D JZ 00415E2D
<- :)
415C97’de eax = 7CB45D45 oluyor. [d
ebp-20] ->
016F:0079F800
45 5D B4 7C D6 23 03 4A-6F 1D DB 03 7F 3A 08 08
E].|.#.Jo.
Ayni sekilde, [d ebp-10] ->
016F:0079F810
19 07 46 67 89 AB CD EF-00 00 00 00 00 00 00
00 ..Fg.........
415C53 ile 415C95 arasindaki dongu, girdigimiz seriale Ascii to Hex fonksiyonu
uyguluyor. Bu islem 415C8E’den goreceginiz gibi 10h kez tekrarlaniyor. Yani,
girmemiz gereken serial 16 basamakli gibi gorunuyor. Biz, 4 basamakli serial
girdigimiz halde, sonuna eklentiler geldi. Bunu donguden anlayabiliyoruz zaten.
Sallama serial olarak, “1234567890ABCDEF” girersek, [d
ebp-10] ->
016F:0079F810
12 34 56 78 90 AB CD EF-00 00 00 00 00 00 00 00
.4Vx............
Girmemiz gereken seriali biliyoruz. Peki KeyGen ? [0079F800] bolgesindeki
degerler nasil olusuyor ? 415C26’daki cagri oncesi, bos bir bolge ve username
push edilyor. Cagri sonrasinda, bu bos olan bolume degerler ataniyor. Cagri
oncesi ->
016F:0079F800
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
Cagri sonrasi ->
016F:0079F800
45 5D B4 7C D6 23 03 4A-6F 1D DB 03 7F 3A 08 08 E].|.#.Jo... :..
[bpx 415C26] -> [F8]
-> biraz takip ve memory kontrol sonucu
...
0167:00418DB6 LEA EAX,[ESI+18]
<- amois
0167:00418DB9 PUSH EAX
0167:00418DBA PUSH ESI
<- ?
0167:00418DBB CALL 00401000
<- ?
Cagri oncesi [d esi] ->
016F:0079F628
01 23 45 67 89 0B CD E3-FE DC BA 98 76 54 32 10 .#Eg........vT2.
Cagri sonrasi [d esi] ->
016F:0079F628
45 5D B4 7C D6 23 03 4A-6F 1D DB 03 7F 3A 08 08 E].|.#.Jo...:..
401000’den itibaren cok uzun ve sozde karmasik bir algoritma mevcut. Sabitler
MD5’in aynısı olmakla beraber algoritma MD5 özelliğine uymuyor.
Yapmamiz gereken, 401000’den itibaren kodu aynen almak. Dikkat etmemiz gereken
iki nokta var. 418DBA’daki [d esi], 418DB9’daki
[d eax] bolgelerini aynen kopya etmemiz gerekiyor.
Bu bolgelerden [d eax] olani biraz ilginc aslinda.
016F:0079F640
61 6D 6F 69 73 80 00 00-00 00 00 00 00 00
00 00 amois...........
016F:0079F650 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
016F:0079F660 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
016F:0079F670 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
Gordugunuz
gibi, username’in sonuna 80 ile baslayan bir bolum eklenmis. Eger, bu 80 ve
sonrasindaki 00 lari atlarsaniz, sonuca gidemezsiniz.Bu 80 Hash fonksiyonlarında
padding dediğimiz birşey.Bu fonksiyonlar belli bir uzunluk olduktan sonra çalıştığından
ekleme yapılıyor.
.data
isim db "amois",0
isim_uz dd 0h
sonuc db 32h dup(?)
temp db 50h dup(?)
tur db "%X",0
tablo db 001h, 023h, 045h, 067h, 089h, 00bh,
0cdh, 0e3h
db 0feh,
0dch, 0bah, 098h, 076h, 054h, 032h, 010h
db 028h,
002h, 000h, 000h, 000h, 000h, 000h, 000h
tablo2 db 080h, 000h, 000h, 000h, 000h, 000h,
000h, 000h
db 000h,
000h, 000h, 000h, 000h, 000h, 000h, 000h
...
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h,
000h, 000h
.code
start:
invoke StrLen, addr isim
; username uzunlugunu bul
mov isim_uz, eax
lea esi, temp
invoke MemCopy, addr isim, addr temp, isim_uz
; username’i temp bolgesine kopyala
add esi, isim_uz
; esi’de username bitis offseti var
invoke MemCopy, addr tablo2, esi, 59
; tablo2’yi temp bolgesine kopyala
xor ecx, ecx
; cagri oncesi ayarlar
xor edx, edx
; orjinal programdan alinma
mov ebx, 03bh
mov edi, 40h
lea esi, tablo
lea eax, temp
push eax
push esi
call @401000
; MD5 blah blah
mov eax, dword ptr [tablo]
invoke wsprintf, addr sonuc, addr tur, eax
invoke MessageBox, 0, addr sonuc, addr sonuc, 0
@cikis:
invoke ExitProcess, 0
@401000:
mov dword ptr [esp-010h], ebp
; 596 satirlik bir kod :(
... ;
ret
end start
“amois”icin 455DB47C degerini girince 415C9D’deki kontrolde jump yaptik. Ama, bu
serialin yanlis oldugunu soyleyen bir MessageBox cikti. Yani, kandirildik.
0167:00415C97
MOV EAX,[EBP-20]
0167:00415C9A CMP EAX,[EBP-10]
0167:00415C9D JZ 00415E2D
<- Kandirmaca
0167:00415CA3 LEA EAX,[EBP-20]
0167:00415CA6 PUSH EAX
0167:00415CA7 LEA EAX,[EBP-0120]
0167:00415CAD PUSH EAX
0167:00415CAE CALL 00418E0C
<- ?
0167:00415CB3 MOV EAX,[EBP-20]
<- :)
0167:00415CB6 POP ECX
0167:00415CB7 CMP EAX,[EBP-10]
<- ?
0167:00415CBA POP ECX
0167:00415CBB JZ 00415CD5
<-
415CA3’de iken [d ebp-20] ->
016F:0079F800
45 5D B4 7C D6 23 03 4A-6F 1D DB 03 7F 3A 08 08 E].|.#.Jo...:..
415CA7’de iken [d ebp-0120] ->
016F:0079F700
61 6D 6F 69 73 00 00 00-86 09 97 16 58 88 5C 71 amois.......X.\q
cagri sonrasi ->
016F:0079F800
?? ?? 7D BF BA DF 64 E1-DD 0D 07 25 56 E0 66 CF ..}...d....%V.f.
Artik gecerli seriali bulduk. Peki KeyGen algoritmasinda nasil bir degisiklik
yapacagiz? Program, 418DBB’deki algoritmayi 2 kez cagiriyor. 1.incisini yukarida
inceledik. 2.inci kez geldiginde neler oluyor ?
0167:00418DB6
LEA EAX,[ESI+18]
<-
0167:00418DB9 PUSH EAX
0167:00418DBA PUSH ESI
<-
0167:00418DBB CALL 00401000
<-
[d eax] ->
016F:0079F5A4
61 6D 6F 69 73 80 00 00-00 00 00 00 00 00 00 00 amois...........
[d esi] ->
016F:0079F58C
45 5D B4 7C D6 23 03 4A-6F 1D DB 03 7F 3A 08 08 E].|.#.Jo...:..
cagri sonrasi ->
016F:0079F58C
?? ?? 7D BF BA DF 64 E1-DD 0D 07 25 56 E0 66 CF ..}...d....%V.f.
Yapmamiz gereken 401000’deki rutini bir kez daha cagirmak olacak.
xor ecx, ecx
xor edx, edx
mov ebx, 03bh
mov edi, 40h
lea esi, tablo
lea eax, temp
push eax
push esi
call @401000
lea esi, tablo
; eklenecek
lea eax, temp
;
push eax
;
push esi
;
call @401000
;
mov eax, dword ptr [tablo]
Gordugunuz gibi degisiklik oldukca basit. [temp] bolgesindeki degerlerde
degisiklik yok ve aynen kullanilabilir. [tablo] bolgesindeki degerlerimiz ilk
cagri sonucunda degismisti. Bize bu degismis hali gerekiyor zaten. Bu nedenle
direkt push edebildik.
|
|
Bir programı kullanarak para kazanıyorsanız, programı satın alın.