illustrate v5.2

amois

Program Url: w*w.davidgould.com
Program Tipi: 3dMax plugin

Araçlar:

 

SoftICE, Icedump

Basit ( )  Orta (x)  Zor ( )  Pro ( )

Başlangıç

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 :(

 

Son Notlar

Bir programı kullanarak para kazanıyorsanız, programı satın alın.