小商品軟件的加密方法

最近讀到《計算機世界》的文章《用VB給商品軟件加密的方法》,對此我也有比較多的實際體驗,和大家探討一下。

---- 我曾經參與了一些小商品軟件的開發工作,每次的加密工作總是讓人頭痛。既然是商品軟件,在目前的情況下,就不得不考慮防止非法拷貝的問題。

加密的方法很多,最終目的無非都是確認用戶具有合法的軟件使用權。所以,必須給合法用戶一個使用軟件的授權憑證,這種憑證是難以複制的。確實,采用加密狗做授權憑證是不現實的,加密狗的價格在小軟件的成本中占的比例太大了。由于小軟件一般是使用軟磁盤發布的,所以一般的方法是讓軟磁盤充當發行媒體和授權憑證的雙重角色,這種方法的成本是比較低的。《用VB給商品軟件加密的方法》中提到的辦法我認爲是行不通的。盜用者拷貝軟件時,一般是拷貝你出售的磁盤上的軟件包,而不是拷貝安裝以後程序所在目錄的內容。所以,要想防止非法拷貝,就需要安裝程序或者是應用程序具有確認鑰匙盤的功能。

---- 我涉及到的幾個産品按照時間順序來說,最初的是在DOS平台使用Turbo C++3.0開發的。後來的産品是在Windows 3.2下使用VB 4.0進行開發的。最近又改爲在Windows95/98下使用Delphi 4.0進行開發。

---- 在DOS平台下的軟磁盤加密技術很多,也比較成熟。我們采用的方法是直接調用中斷進行底層的磁盤訪問,在軟磁盤的非凡部位讀寫一些非凡的信息。這些信息使用一般的拷貝方法是無法複制的,這樣就可以達到加密的作用。接觸過軟磁盤加密的人都知道,這種方法有一定的缺陷,就是兼容性不強。比如在有些機型上,或者假如用戶的軟驅性能不夠好,都無法正確識別鑰匙盤。經過在實踐中不斷地完善,我們取得了比較好的效果。

---- 隨著操作系統的不斷升級,我們碰到了新的問題。Windows的版本越高,應用程序對底層的控制能力就越弱。比如使用VB開發,就無法直接對磁盤進行底層訪問。

---- 經過不斷的摸索,我們現在采取的辦法是把原來DOS程序中完成加密認證的部分獨立出來,編譯成一個加密認證程序。讓在Windows下使用VB、Delphi開發的應用程序啓動這個DOS加密認證程序進行底層讀寫,返回是否有鑰匙盤的判定結果以確定是否繼續執行。由于我們在DOS平台下的加密技術已經比較穩定,這是最簡便有效的方式。這種做法的前提是DOS程序在Windows 3.2/95/98下均可順利地執行。

---- 具體的實現方式是由應用程序調用Windows API啓動DOS加密認證程序,並等待該程序結束,判定其返回碼,以確定是否有鑰匙盤。爲此,需要對原來的DOS程序略加改動,將判定結果以返回碼的形式輸出,例如在Turbo C++ 3.0中使用exit(0)返回0,使用exit(1)返回1(至于DOS實現磁盤加密的方法由于資料很多,這裏不作具體介紹)。而Windows應用程序讀取到返回碼以後,就可以確定下一步的動作。

小商品軟件的加密方法
更多內容請看常用軟件加密寶典 加密與解密技術 軟件插件專題,或

---- 這裏要害的代碼是啓動一個DOS程序,等待它結束,並得到返回碼。請參看下面的Delphi函數WinExecAndWait32: Function WinExecAndWait32(FileName :

String; Visibility : integer):dWord;

var

zAppName:array[0..512] of char;

zCurDir:array[0..255] of char;

WorkDir:String;

StartupInfo:TStartupInfo;

PRocessInfo:TProcessInformation;

begin

StrPCopy(zAppName,FileName);

GetDir(0,WorkDir);

StrPCopy(zCurDir,WorkDir);

FillChar(StartupInfo,Sizeof(StartupInfo),#0);

StartupInfo.cb := Sizeof(StartupInfo);

StartupInfo.dwFlags := STARTF_USESHOWWINDOW;

StartupInfo.wShowWindow := Visibility;

if not CreateProcess(nil,

zAppName, { pointer to command line string }

nil, { pointer to process security attributes }

nil, { pointer to thread security attributes }

false, { handle inheritance flag }

CREATE_NEW_CONSOLE or { creation flags }

NORMAL_PRIORITY_CLASS,

nil, { pointer to new environment block }

nil, { pointer to current Directory name }

StartupInfo, { pointer to STARTUPINFO }

ProcessInfo)

then Result := 0 { pointer to PROCESS_INF }

else

begin

WaitforSingleObject(ProcessInfo.hProcess,INFINITE);

GetExitCodeProcess(ProcessInfo.hProcess,Result);

end;

end;

---- 在FileName中給出DOS加密認證程序的名稱(帶絕對路徑),在Visibility中給出是否需要DOS程序的窗口可見,一般設爲不可見。

這種方法在我們的多個小商品軟件中使用,效果良好。

---- 需要注重的是這種加密方法在Windows NT中無法運行,因爲NT不支持DOS程序直接訪問硬件。考慮到操作系統最終會過渡到Windows NT,程序無法直接訪問硬件,如何低成本地實現小商品的加密就是一個讓人關心的問題。這方面我們還在探索,歡迎有經驗的朋友介紹一下。

小商品軟件的加密方法
更多內容請看常用軟件加密寶典 加密與解密技術 軟件插件專題,或

企業級加密軟件選型攻略
  引言:市場有大大小小將近300家加密軟件企業,其中絕大多數許多廠商並不具備生産和銷售加密産品的合法資格,産品質量低劣,給用戶造成巨大損失。筆者曾參與國務院外交部、解放軍二炮、中國移動集團、深圳比亞迪集...查看完整版>>企業級加密軟件選型攻略
 
軟件注冊加密技術
摘要:本文主要從三個方面介紹了計算機軟件注冊與加密技術:DOS系統下軟件注冊與加密,Windows系統軟件注冊與加密以及共享軟件網絡注冊方法。文中介紹的許多方法現在仍在沿用,也有的方法和技術早已過時,但大都值得...查看完整版>>軟件注冊加密技術
 
給諾基亞第三版手機裏的短信隱藏加密的方法
給諾基亞第三版手機裏的短信隱藏加密的方法
以前在論壇裏有好多朋友提供的短信隱藏加密軟件,用了用發現都不行,諾基亞的好多手機都自帶一個“寫E生活”的軟件,雖然那些隱藏的短信在收件箱確實看不到了,可是打開“寫e生活--流金歲月”裏看看,隱藏的短信就都...查看完整版>>給諾基亞第三版手機裏的短信隱藏加密的方法
 
大A給短信加密的方法
我在壇子裏看到不少朋友問大 A 能不能給接收的短信加密 , 讓別人看不到 , 答案是肯定的 : 1: 待機狀態下 , 點上面的“信封”標簽 , 再點下面的“三”標記 ”, 選“新建文件夾” , 在“名稱”裏寫上你自己喜歡...查看完整版>>大A給短信加密的方法
 
縱談網絡加密及解密方法(上)
  進入信息和網絡化的時代以來,計算機正在我們的工作和生活中扮演著日益重要的角色。越來越多的用戶通過計算機來獲取信息、處理信息,同時將自己最重要的信息以數據文件的形式保存在計算機中。有人形容網絡好比是...查看完整版>>縱談網絡加密及解密方法(上)
 
縱談網絡加密及解密方法(下)
  進入信息和網絡化的時代以來,計算機正在我們的工作和生活中扮演著日益重要的角色。越來越多的用戶通過計算機來獲取信息、處理信息,同時將自己最重要的信息以數據文件的形式保存在計算機中。有人形容網絡好比是...查看完整版>>縱談網絡加密及解密方法(下)
 
Win XP的文件加密方法
很多時候我們是和別人共用一台電腦,爲了保護自己的隱私或機密文件,我們需要通過對文件加密來達到保護的目的。有人會說可以下載一款專用的文件加密軟件,其實文件加密是非常容易的,很多軟件都內置了文件加密功能,...查看完整版>>Win XP的文件加密方法
 
安全的ACCESS加密方法
安全的ACCESS加密方法 安全的ACCESS加密方法 安全的ACCESS加密方法徐長友 Microsoft的ACCESS數據庫,是我們常用的桌面數據之一,大多中小企業的數據庫管理系統都可以采用它,但其安全性一直令人擔猶,試...查看完整版>>安全的ACCESS加密方法
 
發一個加密的方法
//聲明加密字符生成的隨機數的位數 public const int LENGTH = 32; //聲明加密字符前後的分隔長度 public const int LEN = 4;///方法作用:根據參數對其加密 ///參數: /// string strEncrypt;欲加密的字符 ///...查看完整版>>發一個加密的方法
 
 
回到王朝網路首頁