uPVC Designer v1.00

amois

Program Url: w*w.
Program Tipi: *

Araçlar:

 

SoftICE

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

Başlangıç

 

"... zafer ve bozgun, bu iki yalanci, ikisi de evirip cevirirken, sana tuzak kurarken aklinca, gulup gecebilirsen bunlara sen ..."

 

Yazı


Pvcinit.exe ile Firma, Firma Kodu, Seri No, Sure Kodu ve Ozel Kod bolumlerine degerler girmemiz gerekiyor. Sure Kodu ve Ozel Kod, sharaware oldugu icin program tarafindan belirlenmis durumda geliyor. Fakat, baska degerler girebiliyoruz. Kontrol sonucu, “onaylandi” veya “hatali” mesaji olusuyor. Register ekraninin basinda ise, makineye gore degisen bir kod olusuyor ve bendeki deger Bilgisayar No = “6C1D8E0B”.

Firma Kodu -> “1122334455667788” <- sallama deger
Seri No      -> “9988776655443322” <- sallama deger

[bpx hmemcpy] -> birkac tane [F12]

0167:0043429B CALL 0041240C
0167:004342A0 LEA EDX,[EBP-10]                 <- buradayiz
0167:004342A3 MOV ECX,00000008
0167:004342A8 MOV EAX,[EBP-14]                 <- 1122334455667788
0167:004342AB CALL 0042DE64                    <- Firma Kodu bos mu ?
0167:004342B0 TEST AL,AL
0167:004342B2 JZ 00434305
0167:004342B4 MOV EAX,[EBP-14]
0167:004342B7 PUSH EAX
0167:004342B8 MOV ECX,[004368FC]               <- RegistryCode
0167:004342BE MOV EDX,[004368F8]               <- Keys
0167:004342C4 MOV EAX,[EBP-08]
0167:004342C7 CALL 0042ACC0
0167:004342CC LEA EDX,[EBP-18]
0167:004342CF MOV EAX,[EBP-04]
0167:004342D2 MOV EAX,[EAX+0000029C]
0167:004342D8 CALL 0041240C
0167:004342DD MOV EAX,[EBP-18]                 <- fenerbahce (Firma)
0167:004342E0 PUSH EAX
0167:004342E1 MOV ECX,[00436900]               <- RegistryStr
0167:004342E7 MOV EDX,[004368F8]               <- Keys
0167:004342ED MOV EAX,[EBP-08]
0167:004342F0 CALL 0042ACC0
0167:004342F5 MOV DL,01
0167:004342F7 MOV EAX,[EBP-04]
0167:004342FA MOV EAX,[EAX+00000270]
0167:00434300 MOV ECX,[EAX]
0167:00434302 CALL [ECX+28]
0167:00434305 LEA EDX,[EBP-14]

Kodun devami, Seri No vb. Kontrol ediyor. Programin Firma Kodundan deger okudugu yeri bulmamiz gerekiyor. 434302’deki cagri oncesi -> [d eax] ->

016F:010CE0F0 CC E4 42 00 44 12 0C 01-D4 B2 0C 01 00 00 00 00 ..B.D...........
016F:010CE100 00 00 00 00 00 00 00 00-37 01 27 00 00 01 00 00 ........7.'.....
016F:010CE110 01 00 00 00 11 22 33 44-55 66 77 88 6C 1D 8E 0B ....."3DUfw.l...

Bu bolge bizim icin bir ipucu olabilir. [bpm 0010CE114] ->

0167:0042EF88 MOV [EBX+24],EAX                 <- 11223344
0167:0042EF8B MOV EAX,[ESI+04]
0167:0042EF8E MOV [EBX+28],EAX                 <- 55667788
0167:0042EF91 XOR EAX,EAX
0167:0042EF93 POP EDX
...

Sallama Firma Kodu, [ebx+24] bolgesine kopyalandi. Bu noktadan itibaren, [F10] ve Memory kontrol esliginde ilerleyelim.

0167:0042F562 LEA EDX,[EBP-0C]                 <- 1122334455667788
0167:0042F565 LEA EAX,[EBP-1C]
0167:0042F568 CALL 0042FA5C                    <- ??
0167:0042F56D TEST AL,AL
0167:0042F56F JNZ 0042F577
 

[bpx 42F568] -> [F8]

0167:0042FA5C ADD ESP,-08
0167:0042FA5F MOV ECX,[EDX]                    <- 11223344
0167:0042FA61 MOV [ESP],ECX
0167:0042FA64 MOV ECX,[EDX+04]                 <- 55667788
0167:0042FA67 MOV [ESP+04],ECX
0167:0042FA6B MOV EDX,ESP                      <- 1122334455667788
0167:0042FA6D XOR ECX,ECX
0167:0042FA6F CALL 0042E7E4                    <- ??
0167:0042FA74 MOVZX EAX,WORD PTR [ESP]         <- EDDE1C574B1E3252
0167:0042FA78 CMP EAX,0000D9F6                 <- eax=DEED
0167:0042FA7D SETZ AL
0167:0042FA80 POP ECX
0167:0042FA81 POP EDX
0167:0042FA82 RET

42FA67’deki cagri sonrasi, [esp] bolgesinde bir deger olusuyor ve bunun ilk 2 byte degeri D9F6 olmak zorunda. Simdi biz, oyle bir sallama serial girecegiz ki, bu ilk 2 byte D9F6 olsun. Cozum tabii ki Brute-Force. 42FA6F cagrisi cok karisik bir algoritma degil. 3 kez yinelenen bir algoritma ve sabit bir tablo vb. Cagri oncesi, [d eax] ile bir byte dizisi de var. Bu degerler, Bilgisayar No’ya bagli olarak degisiyor. Cunku, Firma Adi’ni degistirmemiz bir etki yaratmiyor.

42FA78’de kontrol edilen deger word yerine dword veya bir byte’lar dizisi olsaydi, isimiz cok daha zor olacakti. Buna dayanarak, Brute-Force’da kullanacagimiz sallama Firma Kodu degerinin ilk 4 byte’ini 00 00 00 00 olarak sabit alabiliriz. Kalan 4 byte’i degisken yapip, D9F6 degerini yakalamaya calisabiliriz. Eger basarili olamazsak, ilk 4 byte degerini 1 artirip tekrar tekrar denememiz gerekir ki, bu da yillar surebilir :)

...
0167:0042E80A MOV DWORD PTR [ESP+14],00000004
0167:0042E812 MOV ESI,00436828                   <- sabit tablo
0167:0042E817 MOV EDX,[ESP+0C]

Cagriyi biraz incelersek, 436828 den itibaren sabit bir tablo oldugunu ve Dump edilmesi gerektigini gorecegiz. Artik, sira geldi Brute-Force’a ->

.data

tablo_1        db 074h,081h,08ch,0afh,072h,075h,0d2h,0e9h        ; Bilgisayar No
               db 0a0h,0c4h,02bh,093h,004h,014h,0bbh,085h,0      ; 6C1D8E0B icin

LOC_00436828   db 000h,000h,000h,000h,003h,000h,000h,000h,001h   ; sabit tablo
               db 000h,000h,000h,002h,000h,000h,000h,001h,000h
               db 000h,000h,003h,000h,000h,000h,001h,000h,000h
               ...
 

sallama        db 000h,000h,000h,000h,000h,000h,000h,000h,0      ; baslangic degerimiz

sonuc          db 32h dup(?)
tur            db "%X",0
sayac_1        dd 0h

.code

start:

@dongu:
lea eax, tablo_1                         ; cagri oncesi [d eax] ile gorunen bolum
lea edx, sallama                         ; Firma Kodumuz
mov ecx, [edx]                           ; orjinal programdan
mov [esp], ecx
mov ecx, [edx+04]
mov [esp+04], ecx
mov edx, esp
xor ecx, ecx
call LOC_0042E7E4                        ; orjinal programdan
movzx eax, word ptr [esp]                ; ilk 2 byte
cmp eax, 0d9f6h                          ; firma kodu dogru mu ?
je @yaz                                  ; evet
call @uret                               ; dogru degil, sallama seriali degistir
jmp @dongu                               ; bir daha dene

@yaz:
dec sayac_1
invoke wsprintf, addr sonuc, addr tur, sayac_1
invoke MessageBoxA, 0, addr sonuc, addr sonuc, 0

@cikis:
invoke ExitProcess,0

@uret:
lea esi, sallama                         ; sallama serial offset degeri
mov eax, sayac_1                         ; sayac
mov dword ptr [esi+4], eax               ; 4 byte ileriye sayaci koy
inc sayac_1                              ; sayaci 1 artir
cmp sayac_1, 0ffffffffh                  ; tastik mi ?
je @cikis                                ; simdilik bulamadik / ilk 4 byte degismeli
retn

LOC_0042E7E4: ;Ref: 0042FA6F             ; orjinal programdan alinma
PUSH EBX
PUSH ESI
...
POP EBX
RETN

end start

Brute-Force sonucu cikan deger 00005C91 oldu. Ilk 4 byte 00 00 00 00 oldugu ve degistirmeye gerek kalmadigi icin firma kodumuz 00 00 00 00 91 5C 00 00 olacak. Bu degeri girince Firma Kodumuz onaylandi.

Sirada Seri No var. Tamamen ayni mantikla hareket edilmis / edecegiz. Sadece kontrol degeri 3C69 olarak degismis.

0167:0042FA87 MOV ECX,[EDX]
0167:0042FA89 MOV [ESP],ECX
0167:0042FA8C MOV ECX,[EDX+04]
0167:0042FA8F MOV [ESP+04],ECX
0167:0042FA93 MOV EDX,ESP
0167:0042FA95 XOR ECX,ECX
0167:0042FA97 CALL 0042E7E4
0167:0042FA9C CMP WORD PTR [ESP],3C69   
0167:0042FAA2 SETZ AL
0167:0042FAA5 POP ECX
0167:0042FAA6 POP EDX
0167:0042FAA7 RET

Brute-Force’da kucuk bir degisiklik yeterli olacak.

movzx eax, word ptr [esp]
cmp eax, 03c69h                           ; serial dogru mu ?
je @yaz                                   ; evet

Brute-Force sonucu cikan deger 00005FDB oldu. Ilk 4 byte 00 00 00 00 oldugu ve degistirmeye gerek kalmadigi icin Seri no 00 00 00 00 DB 5F 00 00 olacak. Seri No da onaylaninca, Program Seri Numarasi seklinde bir deger cikti ve bir yere not etmemiz tavsiye edildi. Registered olmamiza ragmen, 30 gunluk limit kalkmadi. Buna da bir goz atalim.

Sure olayi biraz daha karisik.

0167:0042F978 MOV ECX,[EDX+04]
0167:0042F97B MOV [ESP+04],ECX
0167:0042F97F MOV EDX,ESP
0167:0042F981 XOR ECX,ECX
0167:0042F983 CALL 0042E7E4
0167:0042F988 CMP WORD PTR [ESP],649B
0167:0042F98E JNZ 0042F9AD

Sure kontrolunun ilk bolumunu gecebilecek kodu bulmak icin Brute-Force’da ayni kucuk degisikligi yapacagiz.

movzx eax, word ptr [esp]
cmp eax, 0649bh                           ; sure kodu dogru mu ?
je @yaz                                   ; evet

Brute-Force sonucu 00002AFE degeri olustu -> 00 00 00 00 FE 2A 00 00

Bu degeri girdikten sonra, 42F983’deki cagri sonrasi [d esp] -> 9B 64 4C DB 94 21 7C 64

42F990 dan itibaren ikinci bir kontrol ile daha karsilasiyoruz.

0167:0042F98E JNZ 0042F9AD
0167:0042F990 MOV AX,[ESP+06]             <- ax = 647C
0167:0042F995 CALL 0042F82C               <- ax = ED75 oldu
0167:0042F99A FSTP REAL8 PTR [ESP+08]
0167:0042F99E WAIT
0167:0042F99F CALL 00406344               <- ST0 = 37545 ([wf] ile Floating Window'u acin)
0167:0042F9A4 FCOMP REAL8 PTR [ESP+08]
0167:0042F9A8 FSTSW AX
0167:0042F9AA SAHF
0167:0042F9AB JAE 0042F9B1
0167:0042F9AD XOR EAX,EAX                 <- kotu cocuk

Oncelikle, 647C degerimizin nasil ED75 oldugunu bulmaya calisalim. [bpx 42F995] -> [F8]

0167:0042F82C ADD ESP,-0C
0167:0042F82F TEST AX,AX
0167:0042F832 JBE 0042F84B
0167:0042F834 MOVZX EAX,AX                <- eax = 647C
0167:0042F837 ADD EAX,[00436724]          <- eax = 647C + 88F9 = ED75
0167:0042F83D MOV [ESP+08],EAX
0167:0042F841 FILD DWORD PTR [ESP+08]     <- 60789 = ED75h
0167:0042F845 FSTP REAL8 PTR [ESP]
0167:0042F848 WAIT
0167:0042F849 JMP 0042F860
...

Simdi de, Floating Point registerinde olusan 37545 degerine bakalim. [bpx 42F99F] ->

0167:00406344 ADD ESP,-18
0167:00406347 LEA EAX,[ESP+08]
0167:0040634B PUSH EAX
0167:0040634C CALL KERNEL32!GetLocalTime
0167:00406351 MOV CX,[ESP+0E]             <- cx = 0010h = 15
0167:00406356 MOV DX,[ESP+0A]             <- dx = 000Ah = 10
0167:0040635B MOV AX,[ESP+08]             <- ax = 07D2h = 2002
0167:00406360 CALL 00406314               <- ST0 = 37545
0167:00406365 FSTP REAL8 PTR [ESP]
0167:00406368 WAIT
0167:00406369 FLD REAL8 PTR [ESP]
0167:0040636C ADD ESP,18
0167:0040636F RET

[bpx 406360] -> [F8] -> birazcik takip

0167:004062B9 MOVZX ECX,WORD PTR [EBP-02] <- 7D2h = 2002 yili
0167:004062BD DEC ECX                     <- 7D1
0167:004062BE MOV EAX,ECX
0167:004062C0 MOV ESI,00000064            <- 64h = 100
0167:004062C5 CDQ
0167:004062C6 IDIV ESI
0167:004062C8 IMUL ESI,ECX,0000016D       <- 16Dh = 365
0167:004062CE MOV EDX,ECX
...
0167:004062ED ADD ESI,EAX
0167:004062EF SUB ESI,000A955A
0167:004062F5 MOV [EBP-08],ESI            <- esi = 92A9 = 37545
0167:004062F8 FILD DWORD PTR [EBP-08]

Burada, tarih ile ilgili, daha dogrusu yil & gun donusumu ile ilgili islemler var.

Su sekilde ozetleyecegim -> 1900 yilindan bugune kadar, 102 yil 10 ay 15 gun gecmis.

102*365 + 10*30 + 15 = 37230 + 300 + 15 = 37545 gun

Sallama Sure No sonucu olusan deger -> 9B 64 4C DB 94 21 7C 64

647C + 88F9 = ED75 < = 92A9h = 37545 olmali. Son 2 byte < = 92A9 - 88F9 = 09B0

Brute-Force’daki degisiklik su sekilde olacak,

movzx eax, word ptr [esp]
movzx ebx, word ptr [esp+6]
cmp eax, 0649Bh                             ; ilk sart saglandi mi ?
jne @devam                                  ;
cmp ebx, 009B0h                             ; peki ikinci sart ?
jbe @yaz                                    ; o zaman goster
@devam:
call @uret
jmp @dongu

Brute-Force sonucu 00061D77 degeri olustu -> 00 00 00 00 77 1D 06 00

Artik Sure Kodu da onaylandi. Kalan Sure = 64490 gun oldu. Yeterli bir sure. Bu islemden sonra, programin saklamamizi istedigi Program Seri Numarasi da degiserek, 287456609 oldu.

Ellemedigimiz bir tek Ozel Kod bolumu kaldi :))

0167:0042FAE7 CALL 0042E7E4
0167:0042FAEC MOVZX EAX,WORD PTR [ESP]
0167:0042FAF0 CMP EAX,00009C5B             <- Ozel Kod dogru mu ?
0167:0042FAF5 SETZ AL

Artik ne yapilmasi gerektigini biliyorsunuz.
 

Son Notlar

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