NonStop 2006 v4.3.X Generic Patch |
|
|
|
Program Tipi:Okullar için hazırlanmış. |
|
OllyDbg v1.10,Dup2 |
|
|
|
|
Program serial le korunuyor.Serial HDD nosuna göre üretiliyor.Bulacağımız serial işimize yaramaz.Demo limitler veri alma yok birde baskı üzerine demo yazıyor.
Biz programa kayıtlı oldugu zaman aradığı degerler var diyecegiz.
Programı olldbg de yükleyip çalıştırın.Program kodları üstünde sag tus yapın.Search for==>All referenced text strings den
DEMO yazısını arayıp bulun.
0062B091 . C745 A4 DC0B4400 MOV DWORD PTR SS:[EBP-5C], 00440BDC satırına çift tıklayın.
0062B04F . FF52 04 CALL DWORD PTR DS:[EDX+4]
0062B052 . 33FF XOR EDI, EDI ; USER32.PeekMessageA
0062B054 . 66:393D 48A17800 CMP WORD PTR DS:[78A148], DI
0062B05B . 897D DC MOV DWORD PTR SS:[EBP-24], EDI ; USER32.PeekMessageA
0062B05E . 897D CC MOV DWORD PTR SS:[EBP-34], EDI ; USER32.PeekMessageA
0062B061 . 897D BC MOV DWORD PTR SS:[EBP-44], EDI ; USER32.PeekMessageA
0062B064 . 897D AC MOV DWORD PTR SS:[EBP-54], EDI ; USER32.PeekMessageA
0062B067 . 897D 9C MOV DWORD PTR SS:[EBP-64], EDI ; USER32.PeekMessageA
0062B06A . 897D 8C MOV DWORD PTR SS:[EBP-74], EDI ; USER32.PeekMessageA
0062B06D . 74 6D JE SHORT 0062B0DC
0062B06F . B9 04000280 MOV ECX, 80020004
0062B08E . 8945 CC MOV DWORD PTR SS:[EBP-34], EAX
0062B091 . C745 A4 DC0B4400 MOV DWORD PTR SS:[EBP-5C], 00440BDC ; UNICODE "Demo versiyonda eski versiyon verilerini alamazs"
0062B098 . C745 9C 08000000 MOV DWORD PTR SS:[EBP-64], 8
0062B09F . FF15 28124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarDup>>; MSVBVM60.__vbaVarDup
DI=C96C
DS:[0078A148]=FFFF

0062B054 . 66:393D 48A17800 CMP WORD PTR DS:[78A148], DI ==>WORD PTR DS:[78A148] memory bölgesi kayıt
kontrolü burada yapılıyor.
Şimdi düşünelim.Teorik olarak program açılırken buraya bir deger alması alması ve buradaki degere göre kayıtlı olup
olmadıgına karar vermesi gerekli.
Bunun da ASM kodu da
MOV WORD PTR DS:[78A148],XXXX böyle bir kod olması ve XXXX kodunun FFFF degerini alması lazım.
Bu asm kodunu program icinde bulmak için [78A148] i arayacagız.Dikkat ederseniz
0062B054 . 66:393D 48A17800 CMP WORD PTR DS:[78A148], DI satırında 78A148 tersinden yazılmış.Yani 48A17800
48A17800 dizilimini program kodlarında aratacagız.Programı kapatın.Yeniden Ollydbg de yükleyin çalıştırmayın.Program kodlarında CTRL+B yapın

HEX+04 Bölümüne 48A17800 yazın ve ok tusuna basın.
0058B676 . E8 B5150000 CALL 0058CC30
0058B67B . C745 FC 6C000000 MOV DWORD PTR SS:[EBP-4], 6C
0058B682 . 0FBF15 48A17800 MOVSX EDX, WORD PTR DS:[78A148] ==>ilk önce burada durdu ama aradıgımız yer degil.
0058B689 . 85D2 TEST EDX, EDX ; ntdll.KiFastSystemCallRet
0058B68B . 0F84 31040000 JE 0058BAC2
0058B691 . C745 FC 6D000000 MOV DWORD PTR SS:[EBP-4], 6D
0058B698 . 833D 98BC7800 00 CMP DWORD PTR DS:[78BC98], 0
Tekrar CTRL+B yapın ve ok tusuna basın.
0058D095 . F7DE NEG ESI
0058D097 . 4E DEC ESI
0058D098 . 66:8935 48A17800 MOV WORD PTR DS:[78A148], SI ==>İkinci seferde burada durdu.Aradıgımız yer olabilir.
0058D09F . 9B WAIT ;Buraya F2 ile breakpoint koyun.
0058D0A0 . EB 40 JMP SHORT 0058D0E2
0058D0A2 . 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-28]
0058D0A5 . 8D55 DC LEA EDX, DWORD PTR SS:[EBP-24]
0058D0A8 . 51 PUSH ECX
0058D0A9 . 52 PUSH EDX ; ntdll.KiFastSystemCallRet
0058D0AA . 6A 02 PUSH 2
0058D0AC . FF15 F4114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>; MSVBVM60.__vbaFreeStrList
0058D0B2 . 8D45 D0 LEA EAX, DWORD PTR SS:[EBP-30]
aramaya devam ediyoruz
005914B7 . FF15 3C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>; MSVBVM60.__vbaFreeVarList
005914BD . 83C4 14 ADD ESP, 14
005914C0 . 66:83BD 30FFFFFF 00 CMP WORD PTR SS:[EBP-D0], 0
005914C8 . 0F84 87030000 JE 00591855
005914CE . A1 88A07800 MOV EAX, DWORD PTR DS:[78A088]
005914D3 . 66:C705 48A17800 000>MOV WORD PTR DS:[78A148], 0 ==>Aslın da aradıgımız şart ama üzerinde dallanma komutu var.
005914DC . 85C0 TEST EAX, EAX ;yani şarta baglı.Bütün dallanma komutlarını noplamak gerekir
005914DE . 75 10 JNZ SHORT 005914F0 ;pratik olmaz.
005914E0 . 68 88A07800 PUSH 0078A088
005914E5 . 68 98E14300 PUSH 0043E198
005914EA . FF15 D4114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNew2>] ; MSVBVM60.__vbaNew2
005914F0 > A1 88A07800 MOV EAX, DWORD PTR DS:[78A088]
005914F5 . 8D4D D0 LEA ECX, DWORD PTR SS:[EBP-30]
Yukarıdaki gibi MOV WORD PTR DS:[78A148], 0 satırı bir cok yerde var ama bizim istedigimiz dizilişde degil.Ayrıca aldıgı degerler şarta bağlı.
0058D098 satırında F2 ile koyduğumuz breakpoint aktif iken programı calıstırın.

0058D098 . 66:8935 48A17800 MOV WORD PTR DS:[78A148], SI ==>burada durduk.
0058D09F . 9B WAIT
0058D0A0 . EB 40 JMP SHORT 0058D0E2
0058D0A2 . 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-28]
0058D0A5 . 8D55 DC LEA EDX, DWORD PTR SS:[EBP-24]
0058D0A8 . 51 PUSH ECX
0058D0A9 . 52 PUSH EDX
SI=FFFF
DS:[0078A148]=0000 ==>0058D098 satırında istediğimiz şartlar oluşmuş.( FFFF kötü kod [0078A148] memory bölgesine alınıyor.
0058D098 . 66:8935 48A17800 MOV WORD PTR DS:[78A148], SI ==>SI nin degeri FFFF biz sI yerine 0 yazacagız

ORİJİNAL KOD:
0058D098 66:8935 48A17800 MOV WORD PTR DS:[78A148], SI
0058D09F 9B WAIT
0058D0A0 EB 40 JMP SHORT 0058D0E2
0058D0A2 . 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-28]
PATCH:
0058D098 66:C705 48A17800 000>MOV WORD PTR DS:[78A148], 0
0058D0A1 90 NOP
0058D0A2 . 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-28]
Şimdi Patch yapılmış haliyle çalıstırın.Evet bakıyoruz.Program Full olmuş.Bütün limitler kalkmış.Lisansda kayıtlı gözüküyor.


Dup2 de generic patch yapmak isterseniz secilecek bölgeler ve kodlar aşağıda.
0058D095 . F7DE NEG ESI
0058D097 . 4E DEC ESI
0058D098 66:8935 48A17800 MOV WORD PTR DS:[78A148], SI
0058D09F 9B WAIT
0058D0A0 EB 40 JMP SHORT 0058D0E2
0058D0A2 . 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-28]
0058D0A5 . 8D55 DC LEA EDX, DWORD PTR SS:[EBP-24]
0058D0A8 . 51 PUSH ECX
0058D0A9 . 52 PUSH EDX
0058D0AA . 6A 02 PUSH 2
F7 DE 4E 66 89 35 48 A1 78 00 9B EB 40 8D 4D D8 8D 55 DC 51 52 6A 02
F7 DE 4E 66 C7 05 48 A1 78 00 00 00 90 8D 4D D8 8D 55 DC 51 52 6A 02

Bu dizilişi ne kadar uzun yazarsanız,program icin de aynı diziliş olma olasılıgı azalır.Patch amaçlanan yere yapılmış olur.
Bu patch programcı eger o yukarıdaki kod dizilişlerini değiştirmez ise bütün versiyonlarda çalışır.
Bu tutoriali yazmaktaki amacım programcılara ,programlarını daha iyi korumaları için yol göstermektir..
Son olarak şunu söyleyeyim:Bir programı kullanarak para kazanıyorsanız,o programı mutlaka satın alın.Emeğe değer verin...
Lisansız kullanımdan tutoriali hazırlayanlar sorumlu değildir.
Bu yazıda yazım yanlışları , bilgi hatası
olabilir.Eğer bir yanlış bulursanız bana mail atın düzeltmeye çalışırım.
E-Mail: kresuz