分析加密狗
① 怎樣解密(破解)加密狗
硬體加密鎖,俗程「加密狗」,對於加密狗的破解大致可以分為三種方法,一種是通過硬體克隆或者復制,一種是通過SoftICE等Debug工具調試跟蹤解密,一種是通過編寫攔截程序修改軟體和加密狗之間的通訊。
硬體克隆復制主要是針對國產晶元的加密狗,因為國產加密狗公司一般沒有核心加密晶元的製造能力,因此有些使用了市場上通用的晶元,破解者分析出晶元電路以及晶元里寫的內容後,就可以立刻復制或克隆一個完全相同的加密狗。不過國外的加密狗就無法使用這種方法,國外加密狗硬體使用的是安全性很好的自己研製開發的晶元,通常很難進行復制,而且現在國內加密狗也在使用進口的智能卡晶元,因此這種硬體克隆的解密方法用處越來越少。
對於Debug調試破解,由於軟體的復雜度越來越高,編譯器產生的代碼也越來越多,通過反匯編等方法跟蹤調式破解的復雜度已經變得越來越高,破解成本也越來越高,目前已經很少有人願意花費大量精力進行如此復雜的破解,除非被破解的軟體具有極高的價值。
目前加密鎖(加密狗)的解密破解工作主要集中在應用程序與加密動態庫之間的通訊攔截。這種方法成本較低,也易於實現,對待以單片機等晶元為核心的加密鎖(加密狗)具有不錯的解密效果。
由於加密鎖(加密狗)的應用程序介面(API)基本上都是公開的,因此從網上可以很容易下載到加密狗的編程介面API、用戶手冊、和其它相關資料,還可以了解加密狗技術的最新進展。
例如,某個國內知名的美國加密狗提供商的一款很有名的加密狗,其全部編程資料就可以從網上獲取到,經過對這些資料的分析,我們知道這個加密鎖(加密狗)有64個內存單元,其中56個可以被用戶使用,這些單元中的每一個都可以被用為三種類型之一:演算法、數據值和計數器。
數據值比較好理解,數據值是用戶存儲在可讀寫的單元中的數據,就和存儲在硬碟里一樣,用戶可以使用Read函數讀出存儲單元裡面的數據,也可以使用Write函數保存自己的信息到存儲單元。
計數器是這樣一種單元,軟體開發商在其軟體中使用Decrement函數可以把其值減一,當計數器和某種活動的(active)演算法關聯時,計數器為零則會封閉(deactive)這個演算法。
演算法單元較難理解一些,演算法(algorithm)是這樣一種技術,你用Query(queryData)函數訪問它,其中queryData是查詢值,上述函數有一個返回值,被加密的程序知道一組這樣的查詢值/返回值對,在需要加密的地方,用上述函數檢查狗的存在和真偽。對於被指定為演算法的單元,軟體上是無法讀和修改的,即使你是合法的用戶也是如此,我理解這種技術除了增加程序復雜性以外,主要是為了對付使用模擬器技術的破解。
此加密鎖(加密狗)的所有API函數調用都會有返回值,返回值為0的時候表示成功。
因此,破解思路就出來了,就是使用我們自己的工具(如VB、VC等)重新編寫構造一個和加密狗API一樣的DLL動態庫文件,裡面也包含Read、Write等全部API中包含的函數,使用的參量及返回值和原來的函數一樣,所有函數返回零。然後對Query、Read函數進行處理,返回應用軟體需要的數值即可。
這個新的DLL文件編寫成功後,直接替換掉原來的DLL文件,這時候再運行應用軟體,軟體訪問加密狗的操作就全部會被攔截,攔截程序永遠會返回正確的數據給軟體,從而實現了模擬加密狗的運行。
以上是目前破解軟體加密狗(加密鎖)的一些常見思路,對於這種破解,軟體開發者還是有相應的一些對策的,下一回我將在《軟體加密鎖編程技巧》一文中具體介紹一下軟體開發者將如何編寫安全可靠的代碼,使得這種類似的破解方法失效。
② 高手指點一下解加密狗的軟體 (打狗棒)怎麼用啊
打狗棒是利用80386/80486的VM86技術模擬軟體狗, 來實現解密的. 進行解密時,軟體先帶狗運行, 用打狗棒得到軟體狗的相關數據; 然後拿去軟體狗, 運行打狗棒, 則軟體可以無狗運行了.
運行環境
它運行在DOS 3.0以上版本, 注意, 不支持HIMEM.SYS和QEMM.EXE, 因此, CONFIG.SYS的配置最好如下:
FILES=30
BUFFERS=30
安裝軟體
把軟盤上的CANE.EXE和*.LAD拷貝到硬碟上即可(未加密).
運行軟體
在安裝軟體的當前目錄鍵入CANE /H, 然後回車, 則顯示幫助信息:
-------------------------HELP------------------------
CANE -----Emulate the softdog
CANE /Axxx -----Analyse the softdog,xxx=extend mem kept
CANE /R -----Read the softdog file
CANE /W -----Write the softdog file
CANE /U -----Free memory and to dos
CANE /H -----Help
其中, CANE 表示模擬軟體狗運行軟體.CANE /Axxx 表示分析軟體狗相關的數據, xxx表示為數據留出的擴展內存數(以K為單位).CANE /R 表示讀已分析的軟體狗的數據.CANE /W 表示把分析的軟體狗的數據寫到文件中.CANE /U 表示把打狗棒程序從內存中撤消.CANE /H 表示幫助.
因此, A> 要解密一個軟體狗, 步驟如下:
⑴. 把軟體狗插到列印口, 進入到打狗棒所在的目錄, 鍵入CANE /Axxx(其中xxx為要留的以K為單位的擴展內存數),然後運行要解密的軟體.
⑵. 運行完畢後, 回到打狗棒所在的目錄, 運行CANE /W, 把軟體狗相關的數據寫到當前目錄下的文件中.
⑶. 運行CANE /U 退出VM86模式,回到實模式下.
B> 要無狗運行軟體, 則在打狗棒所在的目錄下運行CANE然後回車, 再運行CANE /R然後回車, 再運行原來的軟體即可.
軟體中附帶UCDOS5.0單用戶版的解密數據(參考數據, 對於不同用戶數據不一定相同),即CANE0378.LAD和CANE03BC.LAD.
LAD的數據格式
LAD文件的數據格式如下:
第1,2位元組: 未用
第3,4,5,6: 數據長度
第7位元組開始(存放數據): 屬性 埠 數據
...
其中屬性佔1個位元組, 00H: 輸入一位元組
01H: 輸入一字
10H: 輸出一位元組
11H: 輸出一字
埠佔2個位元組, 為輸入/輸出數據的埠, 如並口數據埠為0378H
數據是輸入輸出的數據, 如果屬性為X個位元組, 則佔X位元組,
程序的編譯和連接
在當前目錄下, 鍵入命令行: pasm cane, 然後回車即可.
注意, 必須在PATH中設置BORLANDC++的路徑. 例如, 如果BORLANDC++的目錄為C:\BORLANDC, 則在AUTOEXEC.BAT文件的PATH中加入C:\BORLANDC\BIN