Ⅰ 軟體狗解密
軟體狗[Dongles]
1、認識軟體狗。[首先我對軟體狗作一簡單介紹,在後面我們將對各種軟體狗的加密和解密做詳細的講解。]
軟體狗是插在微機並行口上的一個軟體保護裝置,它包括主機檢查程序和密鑰(也稱加密盒)兩部分。主機檢查程序就是前面說的加密代碼的一部分,加密盒是用來存放密碼的。一般來說,軟體狗插在並行口上,不會影響列印機的正常工作。常見的軟體狗加密盒外形,如兩個一公一母的D行25針連接器倒接在一起,公頭(DB25/M)插在並行口上,母頭(DB25/F)可接列印機,相當於原來的並行口。整個軟體狗的硬體電路板就在這約5厘米見方的加密盒子里。
電路板上的公頭(DB25/F)之間的管腳是一一對應、直接相聯結的,以保證並行口的作用不變。存儲密碼或起信號加密變換作用的器件及其它輔助元件就跨接在這25根線上面,應用程序以特定的方式跟他們溝通、核對。除了某些設計不良的情況之外,一般不會影響列印機的正常工作,列印機工作時也不會影響它們。
為了防止程序被非法復制,所做的加密保護措施一般都包括兩部分。首先是要有保存密碼數據的載體,即密鑰;其次是夾雜在應用程序中的主機檢查程序,即加密代碼。密鑰應該能保證不易被解密、復制;如一般用磁碟做加密時,加密部分無法用一般的工具復制。另外,當檢查程序用特殊方法去讀密碼時,密碼應該能很容易地被讀出,而不致影響應用程序的正常執行。當發現密碼不對或密鑰不存在時,就讓主機掛起、重新起動或採用被的措施。
軟體狗經歷的「時代」
軟體狗的發展經歷了好幾代,至2001年初就已發展到了第四代。
第一代是存儲器型的加密鎖。這是最有歷史的加密鎖,內部只有存儲體,廠商只能對鎖進行讀、寫。軟體狗起信號加密變換作用的器件,最多隻簡單採用一些電阻、二極體等,檢查方法也比較簡單,很容易被人解密.常見的有原金天地的「軟體狗」、深思洛克的Keypro型、Rainbow的Cplus等。這種鎖的主要特點是廠商可以預先把自己的保密數據設置到鎖內,然後在軟體運行時隨機讀取,這樣防止了解密者通過簡單重復並口數據來解密,但解密者進一步分析一下數據規律就可以解決了,這就是常說的「埠」層的數據分析。這種加密鎖原理非常簡單,是種正在被逐步淘汰的產品,但是其原料成本極低,即使在很低的價位也有很好的利潤,加密廠商一般都不願放棄這種鎖;而很多廠商由於成本原因又不得不採用,因此這種鎖仍有一定的市場份額;
第二代是演算法不公開的加密鎖。硬體內部增加了單片機,即所謂內置CPU,廠商主要是利用演算法功能進行加密。加密鎖通常還增加了一些輔助功能,比如倒計數器、遠程升級等。軟體狗採用了低功耗TTL,COMS等邏輯元件,在電路上做了一些加密工作,檢查時也要比第一代軟體狗多一道手續,解密的難度自然也增加了。常見的有深思洛克的「深思Ⅰ」型,彩虹天地的SuperPro、微狗,ALADDIN的MemoHASP等。利用單片機,軟體與鎖之間的數據通訊建立了一個保密協議,數據都是經過加密的,解密者就難以分析出數據內容和規律了,因此對於這種鎖的數據分析就不是停留在「埠」層了,解密者轉向了「功能」層,就是對軟體中的函數調用進行分析。為了抵擋功能層的數據分析,這種鎖來了個「軟硬」兼施的策略。
「軟」的是指驅動程序內反跟蹤、外殼加密等等軟體工作,讓解密者難以在功能層上模擬,誰都靠的是對操作系統、微機系統的精確理解。誰都無法決勝,結果是加密驅動程序在不斷更新、膨脹。
「硬」的就是加密鎖內的演算法功能,這大大增加了解密難度,這是掌握在加密者手中的武器。但是,加密者只能設置演算法的參數,即所謂內含多少種演算法可選,而演算法內容並不知道。這樣就限制了廠商對演算法的使用,要麼預先記錄演算法結果然後在軟體運行時核對(使用碼表);要麼在軟體中至少變換兩次然後比較結果是否一致。如果解密者截獲這些數據,通過統計、分析就有可達到解密目的;
第三代加密鎖,即所謂「可編程」的加密鎖。1999年初,以北京深思洛克為代表推出了第三代加密鎖,「可編程」加密鎖概念的推出是軟體加密技術的一次進步。「可編程」加密鎖設計初衷是希望用戶能夠將軟體中重要的代碼或模塊「移植」到加密保護設備中運行,使軟體與加密鎖實現真正無縫鏈接。但由於成本限制,早期推出的幾款「可編程」加密鎖採用的低檔單片機給 「可編程」性造成了很大的局限,主要表現在:1、演算法變換的復雜度不夠高,2、指令編碼空間較小,3、程序區的空間較小。這些局限性使得用戶根本不可能利用「可編程」加密鎖實現理想的高強度加密方案。 軟體狗採用了PAL(Programmable Array Logic)、PEEL(Programmable Electrically Erasable Logic Device)、GAL(Generic Array Logic)等可編程器件,但目前流行的期間大概要算串列讀寫的EEPROM(Serial Electrically Erasable PROM)了。這些器件由於密碼編制的靈活性和製成密鑰後在程序中插入檢查的方便性,極大地增加了解密的難度。從使用的角度來看PAL、PEEL、GAL 等邏輯器件只能讀取數據,不能隨時寫入數據,密碼的重新設置比較麻煩;而EEPROM晶元可隨意讀寫,用在軟體狗上靈活性相當大,譬如可以為每一個軟體狗單獨設一個密碼,以增加解密的難度;另外,從EEPROM器件的電器性能上來說也非常適合做軟體狗;因此這種器件在軟體狗的設計中獲得了廣泛的應用,是當時軟體狗製作者的首選晶元。它象一般RAM存儲器一樣可讀寫(只不過讀寫是串列的),即使斷電後也能保存數據不變。常用的EEPROM型號是93C46,它是64×16bit的結構,也就是說一個93C46具有64個16位bit單元的容量,每次處理數據也都是16位。有的93C46,如 Microchip、ATMEL、CSi等品牌的93C46可以通過切換,變為128×8bit或64×16bit兩種模式,這對軟體狗製作來說就更靈活了,其加密效果也更好。當然也有人採用更大容量的93C56、93C66或容量小一點的93C06、93C26等EEPROM晶元。因為軟體狗是插在微機的並行口上,所以檢查程序是通過並行口的I/O地址去讀寫EEPROM。具體的讀寫方式跟硬體線路以及EEPROM的時序有關,因此,一般的檢查程序針對某一種硬體線路;但是這些程序大同小異,大體上是差不多的。
第四代軟體夠在第三代軟體狗基礎上,加入一個單片機晶元,如PIC16C5X。此晶元中存有特定的演算法程序,可將讀出的密鑰數據進行加密變換,以對抗邏輯分析儀。可以說,軟體狗發展到第四代,已經非常成熟了。在此技術上,各軟體狗研製公司又加入自己的電路設計,形成了各自的產品特色。
平時常見的狗主要有「洋狗」(國外狗)和「土狗」(國產狗)。這里「洋狗」主要指美國的彩虹和以色列的HASP,「土狗」主要有金天地(現在與美國彩虹合資,叫彩虹天地)、深思、堅石。總的來說,「洋狗」在軟體介面、加殼、防跟蹤等「軟」方面做得沒有「土狗」好,但在硬體上絕對「無法」 pj(應當說pj難度非常大):而「土狗」在「軟」的方面做得絕對稱得上世界第一,許多技術,如噪音、自檢測、演算法可變、碼表變換等等,可以說都很先進,而在硬體上不及國外,只要稍有單片機功力的人,都可復制。
現在狗的技術發展很快,針對不同的應用場合有不同的類型,如:
強勁狗:自由定義演算法的高強度加密方案
微狗: 面向單片機環境的高強度加密方案
USB狗: USB介面的微狗全兼容產品
軟體狗:面向單機環境的低成本加密方案
網路狗:面向網路環境的加密方案
卡式狗:面向網路環境的加密方案
軟體狗採取了各種的加密技術,目前較先進的加密技術有以下幾種:
AS技術:API函數調用與SHELL外殼加密結合,即使外殼被破壞,加密程序依然不能正常運行。
反跟蹤:
a.數據交換隨機噪音技術:有效地對抗邏輯分析儀分析及各種調試工具的攻擊。
b.迷宮技術:在程序入口和出口之間包含大量判斷跳轉干擾,動態改變執行次序,提升狗的抗跟蹤能力。
抗共享:可從硬體對抗並口共享器,由開發商選擇是否共享狗。
口令: 可由軟體開發商設置32位口令,口令錯誤將不能對存儲區進行讀寫。
時間閘:某些狗內部設有時間閘,各種操作必須在規定的時間內完成。狗正常操作用時很短,但跟蹤時用時較長,超過規定時間狗將返回錯誤結果。
單片機:硬體內置單片機,固化的單片機軟體保證外部不可讀,從而保證狗不可仿製。
存儲器:提供20位元組掉電保持存儲器供開發商存放關鍵數據、配置參數等信息。
市場上常見幾種軟體狗的簡單介紹
彩虹天地:在中國應該算是老大了,從第一代到第四代的產品都有,但它的主要產品還是第三代的微狗(TD-MH),該代產品中有干擾晶元,能隨時產生無用的干擾信號,更加有效的對抗邏輯分析儀;雖然有第四代的強勁狗(CS-QA),但好象有不少問題,所以推出的USB介面的加密鎖還是兼容微狗的。彩虹天地的加密強度不高,最簡單的pj方法就是隨便買一個狗,然後復製成要解的狗。
深思洛克:也是一個比較有名的,至2001年初最主要的產品就是第四代的深思Ⅲ型加密狗,特點就是用戶可在狗中定義自己的演算法,這大大加強了其保護能力,但它的CPU功能還不夠強,演算法上有漏洞,而且只提供一種加密方式,所以也是可以擊破的,並且也能硬體復制原狗。此類狗加密的產品有Pkpm 結構計算軟體、分析家股票軟體、圓方cad軟體等等。
深思 Ⅲ 的n階黑箱模型法:
深思 Ⅲ 的n階黑箱模型法並不是簡單的記憶,而是通過深思 Ⅲ 獨特的完全可編程使得深思 Ⅲ 鎖對於輸入和輸出呈現高階黑箱控制模型的特徵。每次調用代碼運行時使用鎖內存儲作為運算變數和參數,改變鎖的狀態影響後續的調用。用戶自定義的代碼沒有任何的說明書和特徵,甚至兩次相同的調用會返回不同的有用的結果。這是深思 Ⅲ 獨特之處。
以上加密範例並不要求加密者尋找復雜並難以預料的函數關系加以移植。
如果是採用0階黑箱模型那麼輸入與輸出具有直接的對應關系 y=f(x1,x2),其中x1,x2為本次輸入,y為本次輸出。這時如果函數關系簡單就很容易被解密者破譯,比如用迭代法、插值法和列表法等方法逼近;這就迫使加密者尋求復雜函數來防止解密者的破譯和模擬。但由於鎖內資源的限制使得軟體移植幾乎不可能。現在採用n階黑箱模型,就使得輸入與輸出的對應關系復雜化: yn=f(yn-1,yn-2,yn-3,...,y1,xn1,xn2),其中,y1,y2,...,yn-1為以前n-1次調用輸出或隱藏的結果, xn1,xn2為本次(第n次)調用的輸入參數。
面對這樣的復雜關系,解密者簡單地取消中間的任何一次調用都可能使後邊的結果發生錯誤,既使是簡單的函數關系也可以被這高階黑箱過程隱藏得難以推測。這樣,藉助於高階黑箱模型法很容易找到應用軟體中可以利用的公式或函數作為加密的對象。
n階黑箱模型法使用過程中一樣可以使用碼表法,例如,範例中的第一次調用。
但是,這樣的碼表法不同的加密點互相關聯,必須進行整體解密,這就大大地提高了加密強度。使用傳統的0階黑箱模型時,不同的加密點之間互不關聯只需各個擊破分別解密即可,其復雜度無法與n階黑箱模型相比。對於比較復雜的函數,盡管鎖內沒有足夠的資源,還是可以通過n階模型法進行加密處理我們可以將復雜函數化為簡單函數的運算組合,例如:y=(a-b)*(a+b)+c可以先計算(a-b)和(a+b)然後將結果相乘再加c。
n階模型嚴格說是不可解的(只是目前理論上,也請深思公司記住這一點),因為第n次輸出依賴於前n-1次輸入和輸出,而前n-1次輸出可能已部分或全部被隱藏,所以第n次輸出無法推測,至少推測n-1次輸入產生的輸出要比一次輸入產生的輸出復雜度有質的飛躍。
深思 Ⅲ 具有完備的指令系統,可以通過編程實現n階或任意階黑箱模型,每次調用互相關聯,並且可以絕對隱藏中間結果,只要使用得當,理論上是不可解的( 我的理論是沒有不可解的:)
Ⅱ 一般的軟體加密狗怎麼破解啊
硬體加密鎖,俗程「加密狗」,對於加密狗的破解大致可以分為三種方法,一種是通過硬體克隆或者復制,一種是通過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文件,這時候再運行應用軟體,軟體訪問加密狗的操作就全部會被攔截,攔截程序永遠會返回正確的數據給軟體,從而實現了模擬加密狗的運行。
以上是目前破解軟體加密狗(加密鎖)的一些常見思路,對於這種破解,軟體開發者還是有相應的一些對策的,下一回我將在《軟體加密鎖編程技巧》一文中具體介紹一下軟體開發者將如何編寫安全可靠的代碼,使得這種類似的破解方法失效。
Ⅲ T6企業管理軟體怎麼設置密碼
6.2加密方式說明1. T6-企業管理軟體V6.0新換了加密序列(46xxxxxx序列),其中財務會計、供應鏈管理、生產製造管理、BI決策分析改為按模塊組加密,其他產品還是按模塊加密。6.0版以前的程序不認46xxxxxx序列,6.0版的程序不認以前的加密序列。客戶要用T6-企業管理軟體V6.0版的程序,只能通過遠程注冊把加密狗變成46xxxxx序列,或者用通狗。2. 因部分機器更換新加密狗時出現無法識別但重啟後正常的現象,建議一旦更換加密狗後,插狗重啟機器。 設置用戶為了保證系統及數據的安全與保密,系統提供了角色管理和用戶管理功能,以便在計算機系統上進行操作分工及許可權控制。
角色是指在企業管理中擁有某一類職能的組織,這個角色組織可以是實際的部門,可以是由擁有同一類職能的人構成的虛擬組織。例如,實際工作最常見的會計和出納兩個角色。在設置了角色後就可以定義角色的許可權,當用戶歸屬某一角色後,就相應地擁有了該角色的許可權。設置角色的方便之處在於可以根據職能統一進行許可權劃分,方便授權。角色的管理包括角色的增加、刪除、修改等維護工作,在系統中根據實際工作的需要預置了相應的角色,企業在設置用戶時可以直接選擇相應的角色。
用戶是指有權登錄系統,對應用系統進行操作的人員,即通常意義上的「操作員」。每次注冊登錄系統,都要進行用戶身份的合法性檢查。只有設置了具體的用戶之後,才能進行相關的操作。
設置用戶是在系統管理功能中進行的。
系統允許以兩種身份注冊進入系統管理:一是以系統管理員的身份,二是以賬套主管的身份。
系統管理員負責整個系統的總體控制和維護工作,可以管理該系統中所有的賬套。以系統管理員身份注冊進入,可以進行賬套的建立、引入和輸出,設置操作員和賬套主管,設置和修改操作員的密碼及其許可權等。
賬套主管負責所選賬套的維護工作,主要包括對所選賬套進行修改、對年度賬的管理(包括創建、清空、引入、輸出以及各子系統的年末結轉、所選賬套的數據備份等),以及該賬套操作員許可權的設置。
1. 啟動並注冊系統管理
啟動系統管理的操作包括啟動系統管理模塊並進行注冊,即登錄進入系統管理模塊。系統允許用戶以系統管理員admin的身份,也可以以賬套主管的身份注冊進入系統管理。由於在第一次運行該軟體時還沒有建立核算單位的賬套,因此,在建立賬套前應由系統管理員admin進行登錄,此時並沒有為管理員admin設置口令,即其密碼為空,為了保證系統的安全性,可以更改系統管理員的密碼。
例1-1 以系統管理員「admin」的身份登錄系統管理。
操作步驟
(1) 單擊「開始」|「程序」|「用友T6-企業管理軟體」|「系統服務」|「系統管理」,打開「用友T6-企業管理軟體〖系統管理〗」窗口,如圖1-1所示。
圖1-1 「系統管理」窗口
(2) 在「系統管理」窗口中,單擊「系統」|「注冊」選項,出現「注冊〖系統管理〗」對話框。
(3) 在「注冊〖系統管理〗」對話框中,在「操作員」欄錄入「admin」後按回車鍵,如圖1-2所示。
圖1-2 由admin注冊系統管理
(4) 單擊「確定」按鈕(即不修改系統管理員的口令,默認口令為空),打開由系統管理員admin注冊的「系統管理」窗口,如圖1-3所示。
圖1-3 系統管理員登錄對話框
注意:
● 在實際工作中,為了保證系統的安全,必須為系統管理員設置口令。
● 在教學過程中,由於一台計算機供多個學員使用,為了方便則建議不為系統管理員設置口令。
● 如果以賬套主管的身份進入系統管理則應在啟動系統管理後,在操作員欄錄入賬套主管的編號或姓名,如果有口令還應錄入相應的口令。
2. 增加用戶
用戶和角色的設置可以不分先後順序,但對於自動傳遞許可權來說,應該首先設定角色,然後分配許可權,最後進行用戶的設置。這樣在設置用戶的時候,選擇其歸屬哪一個角色,則其自動具有該角色的許可權,包括功能許可權和數據許可權。在系統中已經預置了一系列企業常用的角色,如果這些角色不能滿足需要還可以再行設置。
一個角色可以擁有多個用戶,一個用戶也可以屬於多個不同的角色。
只有系統管理員才有權設置用戶。因此,定義系統用戶時,必須以系統管理員的身份注冊進入「系統管理」窗口,然後單擊「許可權」菜單中的「用戶」選項,進入「用戶管理」窗口後完成增加用戶、修改用戶和刪除用戶的操作。
例1-2 增加如表1-1 所示的用戶。
表1-1 用 戶 信 息
用 戶 編 號
用 戶 姓 名
用 戶 口 令
角 色
KJ001
李東
123456
賬套主管
KJ002
高寧
123456
KJ003
劉佳
123456
操作步驟
(1) 以系統管理員admin的身份在「系統管理」窗口中,單擊「許可權」|「用戶」選項,打開「用戶管理」對話框,如圖1-4所示。
圖1-4 「用戶管理」對話框
(2) 單擊「增加」按鈕,打開「增加用戶」對話框。
(3) 在「增加用戶」對話框中,輸入編號「KJ001」、姓名「李東」、口令「123456」,單擊選中所屬角色欄中「賬套主管」前的復選框,如圖1-5所示。
圖1-5 「增加用戶」對話框
(4) 單擊「增加」按鈕,確認。
(5) 重復(2)和(4)則可繼續增加用戶(操作員)高寧和劉佳。
注意:
● 用戶(操作員)編號在系統中必須唯一。
● 所設置的用戶(操作員)一旦被使用,則不能刪除。
● 在實際工作中可以根據需要隨時增加用戶(操作員)。
● 為保證系統安全、分清責任應設置用戶(操作員)口令。
● 在設置用戶時可以直接指定該用戶的角色,使該用戶直接擁有該角色相應的許可權。如果不指定該用戶的角色,則應在許可權設置中再設置該用戶所擁有的某一賬套的操作許可權。
3. 修改用戶
所設置的用戶(操作員)在未被使用前,可以進行修改。
例1-3 將「KJ003」的所屬部門修改為「財務部試用」。
操作步驟
(1) 以系統管理員「admin」的身份注冊進入「系統管理」。
(2) 單擊「許可權」|「用戶」,打開「用戶管理」對話框。
(3) 在「用戶管理」對話框中,單擊選中要修改的操作員「劉佳」所在行,再單擊「修改」按鈕,打開「修改用戶信息」對話框。
(4) 在「所屬部門」欄錄入「財務部試用」,如圖1-6所示。
圖1-6 修改操作員信息
(5) 單擊「修改」按鈕,系統自動保存並顯示修改後的用戶信息。