一本到国产在线精品国内,国产大屁股视频免费区无卡,精品国产日韩aV在线免费观看,国产欧美日韩综合精品一区二区

建立先進(jìn)理念和體系,創(chuàng)造更好技術(shù)和工藝,開創(chuàng)不凡業(yè)績和局面

當(dāng)前位置:首頁>芯片解密>瀏覽正文

軟件狗[Dongles]的加密與解密技術(shù)(3)

來源:龍人計(jì)算機(jī)研究所 作者:站長 時(shí)間:2006-11-04 11:30:50

軟件狗[Dongles]的加密與解密技術(shù)(3)

三、操作指南

1、BITSHELL參數(shù)的詳細(xì)說明

BITSHELL可以用KEY環(huán)境變量來設(shè)定一些參數(shù),這樣可以簡化使用過程。設(shè)置方法如下:

SET KEY=[SCHEMExx,][STAY,][CHECKOVL]

BITSHELL各項(xiàng)參數(shù)的意義如下:

(1)參數(shù)SCHEMExx,若給出則依用戶的要求使用指定的變形算法,否則將隨機(jī)抽取一種加密算法。BITSHELL2.0共有20種算法可選。

每一種算法都有自己的特點(diǎn),有的加密難度大但解碼時(shí)間長,這種算法適合加密重要的代碼不是特別大的軟件,如算法三和十二;還有的加密難度適中但解碼速度快,如算法一,適合加密大型軟件。

每個(gè)用戶可以根據(jù)自己的特點(diǎn)選擇,如加密不同的版本用不同的算法,加密不同的程序用不同的算法。如選算法十五可給出SCHEME15,選算法十九可給出SCHMEM19等,依次類推。

(2)參數(shù)STAY用來選擇在加密程序執(zhí)行完畢后,是否駐留監(jiān)控程序。默認(rèn)值為不駐留監(jiān)控。

如果加密FoxPro編譯的程序,必須加參數(shù)SET KEY=STAY,以監(jiān)控覆蓋模塊。

(3)參數(shù)CHECKVOL如果被加密的程序中有覆蓋模塊,此參數(shù)是用來選擇是否檢查覆蓋模塊。對(duì)于用CLIPPER編譯出來的軟件,加密時(shí)設(shè)置該參數(shù)非常有必要。默認(rèn)值不檢查覆蓋模塊。

BITSHELL參數(shù)都是可選的,如果不設(shè)置,都有相應(yīng)的默認(rèn)值。默認(rèn)的設(shè)置為:

(1)SCHEME為隨機(jī)挑選算法
(2)不駐留檢測程序(加密FoxPro編譯的軟件,設(shè)定為駐留檢測)
(3)不檢查覆蓋模塊

2、使用BITSHELL

BITSHELL的商品盤是加密的,用戶可以將其安裝在NOVELL網(wǎng)絡(luò)服務(wù)器上使用,源盤不能復(fù)制。如果只是臨時(shí)使用一次也可不用安裝,將BITSHELL源盤放入軟驅(qū)中直接使用。方法:

BITSHELL<源程序>[<目標(biāo)程序>]

如果不設(shè)置目標(biāo)程序,加密的結(jié)果直接覆蓋在源程序上。加密所用算法可用環(huán)境變量KEY來設(shè)置。

例如:①BITSHELL C:TEST.EXE
②BITSHELL TEST.EXE SAMPLE.EXE
③A:BITSHELL D:TEST.EXE C:TEST.EXE

其中<源程序>是需要加密的程序路徑名。源文件必須是可執(zhí)行文件以COM或EXE為后綴。如果缺省<目標(biāo)程序>則直接在<源程序>上加密。如果還想保留未加密的程序,就不要缺省<目標(biāo)程序>,并且保證源程序名與目標(biāo)程序名不同。

[說明]
(1)BITSHELL系統(tǒng)本身是加密的,不能復(fù)制。
(2)經(jīng)BITSHELL加密的軟件,可以拷貝,散發(fā),任意運(yùn)行,除非被加密的程序有自己的反拷貝介質(zhì)。
(3)經(jīng)BITSHELL加密的軟件不能還原為未加密狀態(tài)。
(4)經(jīng)BITSHELL加密的軟件無法跟蹤,無法反匯編。

四、BITSHELL高級(jí)技巧

1、源程序嵌入式保護(hù)措施

軟件開發(fā)者在其軟件開發(fā)完成以后,再在關(guān)鍵地方鏈入以下函數(shù)。當(dāng)鏈接成功后,用BITSHELL.EXE將用戶軟件加密。這套被加密的軟件運(yùn)行時(shí),就可以檢測該程序是否被解密修改,以采取響應(yīng)的反擊措施,如拒絕執(zhí)行等等。

用戶可參考以下流程加密:

(1)將自己的軟件(SAMPLE.C)編好,調(diào)試通過。

SAMPLE.C
#include<stdio.h>
main()
{
printf("This is my sample program! \n");
}

(2)在SAMPLE.C重要的地方調(diào)用加密函數(shù)。

SAMPLE.C
#include<stdio.h>
main()
{
/* Insert BITSHELL function call */
id (BL_ComeIn()==0)
{
printf("Error! \n")
return(255);

printf("Thin is my sample program! \n");}

(3)編譯SAMPLE.C成為SAMPLE.OBJ后,再將SAMPLE.OBJ和BLOBJ.OBJ鏈接成SAMPLE.EXE。
QCL /AL SAMPLE.C BLOBJ.OBJ

(4)用BITSHELL加密,鍵入命令執(zhí)行:
BITSHELL SAMPLE.EXE SALE.EXE
軟件加密過程完成了!
如果被加密的程序SALE.EXE被解密或修改,就會(huì)提示錯(cuò)誤,然后退出。

2、使用BITSHELL須知
請不要使用PKLITE,LZEXE或EXEPACK進(jìn)行壓縮商品程序。
建議高級(jí)語言程序設(shè)計(jì)者,如有可能將所用程序設(shè)計(jì)語言的啟動(dòng)代碼作修改,改變程序的入口點(diǎn),避免被截獲。在程序內(nèi)部識(shí)別BITSHELL的嵌入式模塊最好采用隨機(jī)調(diào)用。

加密時(shí)用環(huán)境變量指定參數(shù)。生產(chǎn)一批軟件,用同一種變形算法,萬一軟件有漏洞,新版本的軟件可換一種變形算法。加密后的文件放在硬盤上,可提高加密速度。超大文件加密后,再用PKZIP等壓縮后,放入商品軟件盤上。

3、注意事項(xiàng)

(1)運(yùn)行BITSHELL系統(tǒng),或運(yùn)行經(jīng)BITSHELL加密的程序系統(tǒng),如果安裝了駐留型的調(diào)試跟蹤器(如:Soft-ICE,GameBuster等),請先拆除之,否則程序?qū)⒕芙^運(yùn)行,因?yàn)檫@樣有跟蹤解密的嫌疑。

(2)使用BITSHELL加密商品軟件的開發(fā)者,不要將BITSHELL系統(tǒng)盤上的任何文件和信息,以任何方式提供給最終用戶。不要將自己所用的BITSHELL的版本,序列號(hào)和變形算法透漏出去。

五、系統(tǒng)提供的可鏈接函數(shù)

函數(shù)BL-ComeIn(BLOBJ.OBJ).........................[1]
C語言說明:
extern unsigned long BL_ComeIn(void);
說明:
利用這個(gè)函數(shù)可判斷是否運(yùn)行過反跟蹤程序,同時(shí)還返回程序的PSP段地址和機(jī)器的ROM檢查和,供用戶程序進(jìn)一步檢查。這是一個(gè)與加密外殼相關(guān)的函數(shù),這樣可使用戶程序與加密軟件融為一體。對(duì)PSP段地址和ROM檢查和的判斷不要隔的太近。
入口參數(shù):無
出口參數(shù):如果出錯(cuò),返回 0FFFFFFFFH ;
(DX:AX=0FFFFFFFFH)
如果成功,返回一個(gè)無符號(hào)的長字。
其中:
低字節(jié)是ROM檢查和,高字是PSP段地址。
(AL=ROM檢查和,DX=PSP段地址)
注意:ROM檢查和計(jì)算方法:
累加ROM(0xF000:0xE000)處開始字節(jié),長度為0x100。
獲取PSP段地址方法:
MOV AH,62H
INT 21H
BX就是該程序的PSP段地址。
調(diào)用建議:
不要每次運(yùn)行都去檢查該函數(shù),用適當(dāng)頻率、在關(guān)鍵的地方調(diào)用這個(gè)函數(shù)。

C Usage Example:
/*
* function:BL_ComeIn
*/

extern unsigend long far BL_ComeIn(void);
/* Error return 0xFFFFFFFF,Success Return
* Lo Byte is checksum,Hi Word is PSP segment
*/

void My_BL_ComeIn()
{
unsigned long ComeIn;
unsigned short int ROM_CheckSum;
unsigned int PSPsegment;
ComeIn=BL_ComeIn();
if (ComeIn==0xffffffff)
{
printf("\nERROR:not loaded from BITSHELL shell ! \n");
{
else
{
ROM_CheckSum=ComeIn&0xff;
PSPsegment =ComeIn>>16;
printf("nBITSHELL On Entry:\N");
printf("ROM checksum is %x\nh",ROM_CheckSum);
printf("PSP segment is %xh\n",PSPsegment);

inregs.h.ah=0x62;
intdos(&inregs,$outregs);
printf("n This program PSP segment is %xh\n",outregs.x.bx);
{
{