必須指出的是,從(西方)法律的角度來看,破解狗和調試獨立程序有壹些微妙的區別。後者是完全合法的,但前者在德國已經被判定為非法(即使妳購買了正版軟件)。美國《數字千年版權法》(DMCA)有壹個著名但頗有爭議的反規避條款(12065438+)。其實加密狗的解密是極其嚴格限制的,但是卻遭到了消費者甚至壹些廠商的強烈反對。因此,2000年10月28日,1201a條款規定了七種例外情況。在合理使用的前提下,刪除《數字千年著作權法》第1201A條關於加密狗的研究。所以我理解至少在美國,研究甚至復制軟件狗是合法的。我不知道我們的法律是怎麽規定的,還好我們不討論國產軟件。
以下是壹些著名加密狗廠商的官方網站,您可以從中下載用戶手冊、應用程序接口(API)等相關資料,也可以了解加密狗技術的最新發展。
比如從彩虹公司提供的API文檔中,我們可以了解到壹些關於Sentinel Superpro(以下簡稱sspro)的信息。sspro有64個存儲單元,其中56個可供用戶使用,這些單元中的每壹個都可以用作三種類型之壹:算法、數據值和計數器。
算法就是這樣壹種技術,妳用sproQuery(queryData)函數訪問它,其中queryData是查詢值,上面的函數有返回值。加密的程序知道壹組這樣的查詢值/返回值對,並使用上述函數來檢查需要加密的狗的存在和真實性。即使您是合法用戶,也不能在軟件中讀取和修改指定為算法的單元。我理解這個技術除了增加程序的復雜度之外,主要是用模擬器技術來應對破解。
數據值和計數器更容易理解。數據值是用戶可以存儲在壹個讀寫單元中的數字,用戶可以用它來存儲自己的信息。Counter是這樣壹個單位,軟件開發人員可以通過在他們的軟件中使用sproDecrement函數將它的值減1。當計數器與停用算法相關聯時,如果計數器為零,則該算法將被停用。
以下是sspro的所有API函數:
RNBOsproActivate()激活或停用算法,以便RNBOsproQuery()函數可以使用該算法。
RNBOsproDecrement()將計數器或讀寫單元減壹。
RNBOsproExtendedRead()讀取任何非隱藏單元格的值和訪問代碼。
RNBOsproFindFirstUnit()查找指定的狗。
RNBOsproFindNextUnit()查找下壹條具有相同ID的狗。
RNBOsproFormatPacket()初始化壹些數據結構,這些數據結構必須在其他API函數之前被調用。
RNBOsproGetVersion()返回驅動程序的版本。
RNBOsproInitialize()驅動程序初始化。
RNBOsproOverwrite()可以修改除保留單元00–07之外的任何單元的值和連接代碼。
RNBOsproQuery()提供壹個查詢值,並向應用程序返回壹個加密的返回值。
RNBOsproRead()讀取非隱藏單元格的值。
RNBOsproWrite()改變單元格的值。
DesKey的API函數更簡單:Dk2DriverInstalled檢查是否安裝了驅動程序。
檢查是否安裝了Dk2狗。
Dk2readmemory讀取DK2中某個單元格的內容。
Dk2readdowncounter讀取計數器值
Dk2decrementDowncounter計數器遞減1。
具體的函數細節可以在sspro和Deskey的開發人員指南中找到(可從該網站下載)。
了解以上函數後,妳可以用IDA分析妳的目標,然後套用相應的sig符號表(本站下載),IDA可以在反匯編結果中找到以上函數(如果有的話),然後就看妳的匯編語言功夫和思路是否清晰了。