現如今不少軟件作者爲選擇一款合適的加密軟件而困惑。建議作者不要太依賴殼的保護,大多數殼是可以被攻破的,還是在自身保護上下些功夫。選擇殼的時候,更多的時候考慮其兼容性。
現在殼的發展一個趨勢就是虛擬機保護,利用虛擬機保護後,能大大提高強度,因此建議儘可能使用此類技術保護軟件。
如Themida ,WinLicense,EXECryptor等帶有虛擬機保護功能,因此得用好其SDK。
而VMProtect是一款純虛擬機保護軟件,效果很好,但也有缺點,就是會影響程序速度,因此在一些對速度要求很高的場合就不適合用了。VMProtect 1.22.3之前是免費版,可以支持EXE,DLL等文件。更高版本需要購買,其支持驅動的保護(慧都控件網支持提供最新版本免費試用,點擊下載)。現在流行的做法,先用VMProtect將你的核心代碼處理一下,再選用一款兼容性好的殼保護。
關鍵代碼自己定位
VMProtect並不像其他加殼軟件一樣容易操作,必須告訴VMProtect你要加密的代碼具體地址,這個對使用者有一定的要求,至少要有些解密基礎。
在這以一個記事本程序爲例來演示一下使用方法。
運行VMProtect後,打開NOTEPAD.EXE文件。單擊Dump標籤,輸入要加密的起始地址,光標來到要加密代碼起始地址後,點擊菜單“project/newprocedure”,會出現一個新的項目。
需要處理其他地址時,請依次操作。
注意事項:
- 用VMProtect處理,請多測試,如果不穩定,請調整被保護代碼的範圍。
- VMProtect對雙線程支持不是太好,請同一次僅處理一個線程內的代碼
用SDK標記代碼
VMProtect 支持SDK,可以編程時插入一個標記,然後在加密時,VMProtect會認出這些標記,並在有標記的地方進行保護。編譯後,VMProtect打開生成的這個exe文件後,點擊“Project”菜單下的“New procedure”,在彈出的對話框中有SDK中的地址。
Delphi 中的標記模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
asm db $EB,$ 10 , 'VMProtect begin' , 0
//標記開始處. end; //想保護的程序代碼 asm db $EB,$0E, 'VMProtect end' , 0
//標記結束處. end; VC的VMProtect的宏 : #define VMBEGIN __asm //標記開始處. { _emit 0xEB _emit 0x10 _emit 0x56 _emit 0x4D _emit 0x50 _emit 0x72 _emit 0x6F _emit 0x74 _emit 0x65 _emit 0x63 _emit 0x74 _emit 0x20 _emit 0x62 _emit 0x65 _emit 0x67 _emit 0x69 _emit 0x6E _emit 0x00 } //想保護的程序代碼 #define VMEND __asm //標記結束處. { _emit 0xEB _emit 0x0E _emit 0x56 _emit 0x4D _emit 0x50 _emit 0x72 _emit 0x6F _emit 0x74 _emit 0x65 _emit 0x63 _emit 0x74 _emit 0x20 _emit 0x65 _emit 0x6E _emit 0x64 _emit 0x00 } |