|
illustrate v5.2 |
|
amois |
|
Program Tipi: 3dMax plugin |
|
Araçlar:
SoftICE, Icedump |
|
|
|
|
3dMax icin plugin.
|
Yazı |
Authorization bolumunde, verilen bir Application ID icin serial girmemiz
isteniyor. Bu Application ID, ilk basta urkutucu gorunuyor tabii ki. Bendeki
deger -> "1050102-6D0208-1388003B-3D80D78C"
-> 28 digit -> Adamlar, cracker'lari bastan korkutmus oluyorlar. Cunku, nette bu
program icin KeyGen mevcut degil. Serial bolumune "1907"
sallama degerini girelim. [bpx hmemcpy] -> biraz [F12]
0167:048FDDDE
MOV EAX,[ESI+14]
<- eax = 3D80D78C
0167:048FDDE1 XOR ECX,ECX
0167:048FDDE3 MOV CX,[ESI+10]
<- cx = 003B
0167:048FDDE7 PUSH EAX
0167:048FDDE8 PUSH ECX
0167:048FDDE9 CALL 048E3F94
<- ??
0167:048FDDEE ADD ESP,08
0167:048FDDF1 TEST EAX,EAX
<- eax = BD1BA :)
0167:048FDDF3 JNZ 048FDE17
0167:048FDDF5 PUSH 0498809C
0167:048FDDFA PUSH 39
0167:048FDDFC CALL [0499498C]
0167:048FDE02 ADD ESP,08
0167:048FDE05 PUSH 04988078
0167:048FDE0A CALL 048E3940
<- Hata
0167:048FDE0F ADD ESP,04
0167:048FDE12 JMP 048FDF60
0167:048FDE17 MOV ECX,[ESP+08]
<- ecx = 1907h
0167:048FDE1B CMP ECX,EAX
<- esitler mi ?
0167:048FDE1B JNZ 048FDE05
<- kotu cocuk
Yukaridaki koda bakin lutfen. Application ID'ye aldanip cekinmemiz
gerekmiyormus. Gecerli seriali bulduk. Peki, KeyGen ne olacak ? [bpx
48FDDE9] ->
0167:048E3F94
JMP 048E9620
<- zipla
0167:048E9620 MOV EAX,[ESP+08]
<- eax = 3D80D78C
0167:048E9624 TEST EAX,EAX
0167:048E9626 JZ 048E96B4
0167:048E962C MOV ECX,[ESP+04]
<- ecx = 003B
0167:048E9630 CMP ECX,31
0167:048E9633 JLE 048E96B4
0167:048E9635 CMP ECX,3C
0167:048E9638 JGE 048E96B4
0167:048E963A LEA EDX,[EAX*2+EAX]
<- edx = B88286A4
0167:048E963D ADD ECX,-14
<- ecx = 3B-14 = 27
0167:048E9640 LEA EDX,[EDX*4+EAX]
<- edx = 1F8AF21C
0167:048E9643 SHL EDX,04
<- edx = F8AF21C0
0167:048E9646 ADD EDX,EAX
<- edx = 362FF94C
0167:048E9648 SHL EDX,08
<- edx = 2FF94C00
0167:048E964B SUB EDX,EAX
<- edx = F2787474
0167:048E964D LEA EAX,[EDX*4+EAX+00269EC3]<- eax = 789481F
0167:048E9654 SHR EAX,10
<- eax = 789
0167:048E9657 AND EAX,00007FFF
<- eax = 789
0167:048E965C CMP ECX,27
0167:048E965F JA 048E96B4
0167:048E9661 XOR EDX,EDX
0167:048E9663 MOV DL,[ECX+048E96EC] <- dl =
0B
0167:048E9669 JMP [EDX*4+048E96B8]
0167:048E9670 ADD EAX,000BCA31
<- eax = BD1BA :)
0167:048E9675 RET
KeyGen algoritmasi basit gibi gorunse de, birkac onemli noktasi var.
1- Kontrol etmemiz gereken 048E96B4 adresi
var. Cunku, program buraya 48E9626, 48E9633, 48E9638 ve 48E965F den gelebilir.
0167:048E96B4
XOR EAX,EAX
0167:048E96B6 RET
Program, bir sekilde 48E96B4'e gelirse, eax=0 olarak geri donecek ve 48FDDF3'de
jump yapmayip hata verecek. Yani, Application ID kontrolu yapiyor. Kisaca, bizim
KeyGen ile ilgili degil.
2- 48E9663'de DL'ye nasil deger ataniyor ?
48E96EC'de bir tablo var ve ecx kadar ilerdeki deger DL'ye ataniyor. Bu tabloyu
KeyGen yazabilmek icin dump etmemiz gerekecek. Peki, uzunlugu ne kadar ?
48E965F'ye gore maximum 27h olabilir.
0030:048E96EC
00 00 0C 0C 0C 0C 0C 0C-0C 0C 01 0C 0C 0C 0C 0C ................
0030:048E96FC 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 02 03 ................
0030:048E970C 04 05 06 07 08 09 0A 0B-90 90
90 90 90 90 90 90 ..........
48E9663->de iken ecx=27 -> 48E96EC->den itibaren 27h=39 kadar ilerlersek
0B degerini buluruz.
3- 048E9669'de iken nasil JMP
[EDX*4+048E96B8] komutu ile 048E9670'ye zipladik ? edx=0B ve 0B*4+48E96B8=48E96E4
oluyor. Burada karsimiza, dump etmemiz gereken ikinci bir tablo cikiyor.
Uzunlugu ne kadar ? DL, 48E96EC'deki tablodan maximum 0Ch degerini alabilecegi
icin, uzunluk = 0C*4 = 30h
0030:048E96B8
B0 96 8E 04 AC 96 8E 04-A6 96 8E 04 A0 96 8E 04 ................
0030:048E96C8 9A 96 8E 04 94 96 8E 04-8E 96 8E 04 88 96 8E 04 ................
0030:048E96D8 82 96 8E 04 7C 96 8E 04-76 96 8E 04 70 96
8E 04 ....|...v...p...
0030:048E96E8 B4 96 8E 04 00 00 0C 0C-0C 0C 0C 0C 0C 0C 01 0C .........
[048E96E4]
deki degere bakacak olursaniz, 048E9670
oldugunu gorursunuz. Diger adreslerde neler oluyor acaba ?
048E96B0 add
eax, 00000003
048E96B3 ret
048E96AC add eax, 00000021
048E96AF ret
048E96A6 add eax, 0000E3A2
048E96AB ret
048E96A0 add eax, 0000F21A
048E96A5 ret
...
Sadece eax’e eklenen deger degisiyor. 048E9669’de JUMP yapmak yerine, KeyGen’de
kullanacagimiz ikinci tabloyu modifiye ederek sonuca gidebiliriz.
0030:048E96B8
03 00 00 00 21 00 00 00-A2 E3 00 00 1A F2 00 00 ................
...
Tabloyu duzenledikten sonra, 048E9669’daki bolumu degistirmemiz gerek.
mov ecx,
[edx*4+048E96B8]
add eax, ecx
ecx’e atanan deger edx’e bagli olarak degisecek ve eax’e eklenecek. Baska
cozumler de uretilebilir tabii ki.
KeyGen yazabilmemiz icin gerekli datalara sahibiz. Ama, "…beyin
gucu ve bilgi birikiminin deger ve saygi gormesi, hepimizin icinde bulundugu
bilisim sektorunun en hizli sekilde ilerlemesi icin …" bu sefer ASM
kodu vermeyecegim :(
|
|
Bir programı kullanarak para kazanıyorsanız, programı satın alın.