欧洲一区二区三区免费视频,欧美精品少妇一区二区三区,精品亚洲免费视频,色婷婷精品久久二区二区蜜臀av

經典案例

聯系方式

公司名稱:昆山華航電子有限公司
公司電話:0512-50139595
公司郵箱:eric@kshuahang.com
公司地址:江蘇省昆山市善浦西路

您當前的位置:首頁 > 技術資源 > 芯片解密

軟件狗[Dongles]的加密與解密技術(4)

軟件狗[Dongles]的加密與解密技術(4)

五、一個簡單的例子

這里我們一起看一下經BITSHELL加密后的程序的情況。
采用一個極簡單的例子,用DEBUG生成一個 TEST.COM文件:

C:/>DEBUG
-A
876B:0100 MOV AL,0
876B:1012 MOV DX,260
876B:0105 OUT DX,AL
876B:0106 INT 20
8760:0108
-RCX
CX 0000
:8
-N TEST.COM
-W
Writing 00008 bytes
-Q

用BITSHELL對TEST.COM進行加密:

C:/>BITSHELL TEST.COM
BITSHELL(tm)Version 2.01
Copyrighe(c) 1989-1995 by Yellow Rose SoftWare Workgroup

Scheme 6 (CodeKey shift repeated)

9K
Total encryption size is 9K

Encryption completed successfully.

再用DEBUG來看一下加密后的TEST.COM:

C:/DEBUT TEST.COM
-R
AX=0000 BX=0000 CX=4CBC DX=0000 SP=00C0 BP=0000 SI=0000 DI=0000
DS=877C ES=877C SS=878C CS=878C IP=021C NV UP EI PL NZ NA PO NC
878C:021C FA CLI
-U
878C:021C FA CLI
878C:021D 8CCC MOV SP,CS
878C:021F 8ED4 MOV SS,SP
878C:0221 BC4D25 MOV SP,254D
878C:0224 9C PUSHF
878C:0225 51 PUSH CX
878C:0226 52 PUSH DX


878C:0227 56 PUSH SI
878C:0228 57 PUSH DI
878C:0229 55 PUSH BP
878C:022A 0E PUSH CS
878C:022B 1F POP DS
878C:022C 2E CS:
878C:022D 8C061000 MOV[0010],ES
878C:0231 2E CS:
878C:0232 C606480080 MOV BYTE PTR [0048],80
878C:0237 0E PUSH CS
878C:0238 07 POP ES
878C:0239 BEAD24 MOV SI,24AD
-U


...... ......


-Q

可以看到經加密后TEST.COM文件變長了很多,這是因為在程序外面加了一層外殼。同時,您也發現了加密后的程序沒法反編譯;如果您再跟蹤一下,您又會發現加密后的程序已經無法跟蹤了。如果您手頭有Turbo Debugger或Soft-ICE等等,它們也是無效的。

看起來,這是一個比較好的加密工具,尤其是它提供的函數可以嵌入源代碼中,跟軟件狗配合起來,達到內外結合的加密效果,大家不妨一試。 |||||
==================================================

雖然加密方法那么多,但是道高一尺,魔高一丈,隨著加密技術的發展,解密技術也進一步蓬勃發展起來,目前可用于解密的工具有SOURCE、DEBUG、SYMDEB、TURBO DEBUG、SOFT-ICE、TRW2000等等。這些工具的功能一個比一個強,更何況還有那么多“專業”解密高手,似乎任何加密技術到了他們手里都會迎刃而解。說來說去,您可能會想,你仍然沒有最終解決軟件的加密問題嗎。是的,本來嗎,加密和解密就是一對矛盾的統一體,某一階段的優 只能看是哪一方先亮出了新招,誰都不敢說他的加密方法別人破譯不了,或者說他能破譯任何加密方法。如此看來,我們所做的工作只在于盡量減少被解密的可能性,以贏得時間進行下一步的開發。

軟件解密就是要想辦法把加密代碼攻破,具體到軟件狗上,即是找到檢查程序,然后干掉它。因此,如果我們在應用程序的不同地方多做幾次檢查,就可以讓解密者浪費更多的時間。這對I/O速率很快的軟件狗來說是很方便的,不像軟盤加密那樣檢查起來既費時又不方便。

一個好的程序員會把程序設計得簡單易懂,具有結構化,但這也給解密者帶來了方便,所以程序不要寫得太規則,另外還要加上一些“廢話”,以干擾解密者。

另外一種不破壞程序結構化,也不需要寫“廢話”就可以有效干擾解密者,提高解密難度和復雜性的方法是,把子程序全部用宏改寫。這樣匯編出的程序是一串串很難看出結構的指令,進出堆棧的數據和各種傳遞的參數以及積存器暫存數的存取相距很遠,嵌套很深,分析起來很傷腦筋。第三代軟件狗的存取程序就是全部用這種方法寫的。

很多軟件加密技術的研制者對Soft-ICE很頭疼,因為它的解密功能太強了,但是您只要在程序中調用一下INT 7,就能防止它的跟蹤,您不妨試試看。

在用解密工具跟蹤程序時,執行時間顯然要比平常的長,另外一般都用鍵盤來操作,用顯示器或打印機作輸出,所以采用執行時間檢查或者在關鍵程序部分禁止鍵盤中斷,以及禁止顯示器或打印機輸出(修改INT 10H 或INT 17H 中斷)等都是較好的方法。例如在第三代軟件狗編程中用到的方法:


...... ......
...... ......
;................MACRO.....................
;. 計時反跟蹤 .
;..........................................
;-----------------------------------------[+]
;保存時間
;-----------------------------------------[+]
TimeSave macro
ifndef debug-Time
push ds
push cs:[_const_word_0_]
pop ds ;ds=0000H
push ds:[046ch] ;把時鐘記數值
pop cs:start_time ;保存到start_time
pop ds
endif
endm

;-----------------------------------------[+]
;檢查程序執行時間,超過5秒則主機被掛起
;-----------------------------------------[+]
TimeTest macro
ifndef debug_Time
push es
push ax
push cs:{_const_word_0_]
pop es ;es=0000H
mov ax,es:[46ch] ;得到新的時間記數值
sub ax,cs:start_time;
cmp ax,18*5 ;執行時間超過5秒嗎?
ja $+4 ;是,則主機被掛起
pop ax
pop es
endif
endm

;..................MACRO...................
;. 鍵盤反跟蹤 .
;..........................................

;-----------------------------------------[+]
;禁止鍵盤中斷
;-----------------------------------------[+]
KbdOff macro
ifndef debug-Kbd
mov cs:_tmpB_,al ;保存al
mov al,02h ;禁止鍵盤中斷
out 21h,al
mov al,cs:_tmpB_ ;恢復al
endif
endm

;-----------------------------------------[+]

;檢查鍵盤中斷,若被開放則主機被掛起
;-----------------------------------------[+]
KbdTest_jmp macro
ifndef debug_Kbd
push ax
in al,21h
test al,02h ;鍵盤中斷被開放?
jz $+3 ;是是,則掛起
pop ax
endif
endm

...... ......
...... ......

另外,如果我們把關鍵部分的程序加以編碼,運行時再譯碼出來,這也增加了解密的難度,因為解密者必須懂得編碼、譯碼規則才能修改可執行文件,而這些規則加密者一般是不會泄露的。

多種軟件加密方法的綜合,以及幾種加密技術交叉使用,足以讓許多解密者知難而退。因為必須了解所有的加密技術原理才有可能解密,這就增加了難度,畢竟能夠精通各種加密方法的人不多。例如有就把軟件狗加密技術和磁盤加密技術結合起來做。


上一篇:軟件狗[Dongles]的加密與解密技術(3)
下一篇軟件狗[Dongles]的加密與解密技術(5)
溫馨提示:
凡在本公司進行電路板克隆業務的客戶,必須有合法的PCB設計版權來源聲明,以保護原創PCB設計版權所有者的合法權益;
【 字體: 】【打印此頁】 【返回】【頂部】【關閉

主站蜘蛛池模板: 晴隆县| 葫芦岛市| 吕梁市| 武城县| 茌平县| 新乐市| 渭源县| 西丰县| 忻城县| 临猗县| 宿松县| 九龙县| 新津县| 康马县| 特克斯县| 唐河县| 卢龙县| 巍山| 简阳市| 夏邑县| 和政县| 大关县| 南陵县| 和静县| 钟山县| 酉阳| 柳江县| 灵丘县| 都昌县| 汨罗市| 宁海县| 襄城县| 长宁县| 丰顺县| 青神县| 桂林市| 莱州市| 康定县| 盘山县| 体育| 从江县|