❶ 加密狗加密後文件打開變亂碼
完,你肯定被垃圾加密給坑了由於他加密演算法的問題解密後沒法還原你的文檔,就等於第一次你加密的時候就已經把文件刪除了除非請編這個加密程序的人能還原文件了因為只有他知道演算法,問題是如果他的演算法有誤的話那他就是神仙估計也還原不了了
❷ 加密狗如何破解
本文介紹的是軟體加密狗破解的一般思路和方法。做為軟體開發者,研究好軟體加密的確很重要,不過也很有必要多了解一些關於加密狗解密和破解的知識,加密和破解就像矛和盾一樣,對於解密知識了解的越多,那麼編寫的加密代碼就越好,要知道加密永遠都比解密要容易的多,只有知己知彼,方能百戰百勝。
硬體加密鎖,俗程「加密狗」,對於加密狗的破解大致可以分為三種方法,一種是通過硬體克隆或者復制,一種是通過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文件,這時候再運行應用軟體,軟體訪問加密狗的操作就全部會被攔截,攔截程序永遠會返回正確的數據給軟體,從而實現了模擬加密狗的運行。
❸ 有破解加密狗的教程嗎
加密狗怎麼破解狗是什麼?狗是一種智能型計算機軟體加密工具。它有一個安裝在微機後部的並行口上的硬體電路,同時有一套適用於各種語言的介面軟體和工具軟體。 當被狗保護的軟體運行時,程序向插在計算機上的軟體保護鎖發出查詢命令。軟體保護鎖迅速計算查詢並給出響應。正確的響應保證軟體繼續運行。如果軟體保護鎖被拔掉,程序將不能運行。復雜的軟硬體技術結合在一起以防止非法發布和使用。採用狗保護軟體只能在指定的裝有狗的微機才能運行,使用時很不方便,如果不小心狗損壞,軟體就不能運行,真是欲除而後快!
目前市面常見的狗技術有聖天諾(Sentinel)和HASP等。現在狗的技術發展很快,針對不同的應用場合有不同的類型,如:
強勁狗: 自由定義演算法的高強度加密方案
微狗: 面向單機環境的高強度加密方案
USB狗:USB介面的微狗全兼容產品
軟體狗: 面向單機環境的低成本加密方案
網路狗: 面向網路環境的加密方案
卡式狗: 面向網路環境的加密方案
現在的狗一般採取了各種的加密技術,目前較先進的加密技術有如下幾種:
①AS技術: API函數調用與SHELL外殼加密結合,即使外殼被破壞,加密程序依然不能正常運行。
②反跟蹤:
1.數據交換隨機雜訊技術:有效地對抗邏輯分析儀分析及各種調試工具的攻擊。
2.迷宮技術:在程序入口和出口之間包含大量判斷跳轉干擾,動態改變執行次序,提升狗的抗跟蹤能力。
③抗共享: 可從硬體對抗並口共享器,由開發商選擇是否共享狗。
④口令: 可由軟體開發商設置32位口令,口令錯誤將不能對存儲區進行讀寫。
⑤時間閘: 某些狗內部設有時間閘,各種操作必須在規定的時間內完成。狗正常操作用時很短,但跟蹤時用時較長,超過規定時間狗將返回錯誤結果。
⑥單片機: 硬體內置單片機,固化的單片機軟體保證外部不可讀,從而保證狗不可仿製。
⑦存儲器: 提供200位元組掉電保持存儲器供開發商存放關鍵數據、配置參數等信息。
1、普通的狗一般是通過讀取I/O埠的狗來進行驗證的,因此可用SOFTICE或其它調試工具來監視I/O埠。一般常用的指令:
BPIO -h 278 R
BPIO -h 378 R
2、要注意的是,用上面2中所提的方法只能對付一般的應用程序,也就是等級為3 的普通程序,這些程序屬於直接讀取狗的那一類,基本上使用像 SOFTICE 之類的調試工具就可以輕易的解開了,現在世面 上有不少使用 VxD 來讀取狗的程序,VxD 屬於等級 0 ,也就是最高等級,理論上是不可能攔截得了的,這也是為什麼有許多廠商要使用 .VxD 來讀狗的原因。
3、其它常用函數斷點
CreateFileA (讀狗驅動程序), DeviceIOControl, FreeEnvironmentStringsA (對付HASP非常有效). Prestochangoselector (16-bit HASP』s), 』7242』 查找字元串 (對付聖天諾).
❹ 加密狗加密的軟體怎麼破解
首先要知道你使用的軟體是什麼加密方式,還有使用的是什麼加密狗加密的
常用解密方法
1、反匯編後靜態分析: W32Dasm、IDA Pro
2、用調試工具跟蹤動態分析:SoftICE、TRW2000
3、針對各種語言的反匯編工具:VB、Delphi、Java等
4、其他監視工具:FileMon、RegMon 等
反「監聽模擬」軟體保護鎖的編程方法
1、隨機查詢法:開發商使用SuperPro開發工具生成大量查詢、響應對,如:1000 對,並在程序中使用這些校驗數據。在程序運行過程中,從1000 對查詢、響應對之中,隨機的抽出其中一對驗證SuperPro加密演算法。因為,校驗數據很多,每次驗證加密演算法使用的「查詢響應對」可能不同,「監聽模擬」軟體即使紀錄了一部分「查詢響應對」,但無法紀錄全部「查詢響應對」。軟體每次運行時,都可能使用新的查詢響應校驗數據,「監聽模擬」軟體無法響應這些新的查詢。因此,「監聽模擬」也就失去了模擬、模擬SuperPro軟體保護鎖的作用。
2、延時法:開發商可以事先使用開發工具生成大量的校驗數據,即:「查詢、響應」對,比如:200000 組「查詢、響應」對,開發程序過程中,開發商設計定時查詢、校驗加密鎖的機制。在程序運行過程中,每10分鍾查詢並校驗加密鎖一次,使用過的校驗數據,4年內不再重復使用。即使監聽軟體24小時記錄數據,也需要4年才能紀錄完畢。4年後,軟體早已過了「熱賣期」了,使用監聽軟體的解密者也就失去了行動意義。
3、分組、分時法:開發商可以在程序中把查詢響應對分組,比如:1200 對校驗數據可分為12組,每100對一組。程序在一年中的第一月使用第一組校驗數據,第二月使用第二組校驗數據,以此類推。監聽軟體就算記錄了第一月的校驗數據,第二個三個月以後校驗數據沒有紀錄,在以後的時間段軟體仍然無法正常使用,從而「監聽模擬」失去意義。
4、隨機雜訊數據法:開發商可以在程序中隨機產生查詢數據,隨機數據和真實數據混合在一起,監聽軟體即使記錄了查詢數據,也會被其隨機性所迷惑,同時也無法模擬另一個次軟體運行產生的隨機數,加密軟體也就無法破解。
❺ 怎麼解密用加密狗加密的word
Word文檔的加密和破解
2009-07-27 19:56
作者:朱錚南
Word文檔可以設置密碼,防止未經授權的人打開或進行修改。
在2003版本里操作菜單「工具」——「選項」,點擊「安全性」選項卡,裡面有「打開文件時的密碼」和「修改文件時的密碼」兩項。
在「打開文件時的密碼」里輸入密碼,點擊「確定」,Word會再讓你輸入一次密碼,以便加深記憶,防止將密碼忘卻了。保存文檔退出後,以後打開的時候必須輸入正確的密碼才能夠打開。
在「修改文件時的密碼」里輸入密碼,點擊「確定」,同樣Word會再讓你輸入一次密碼,保存文檔退出後,如果不輸入修改文檔的密碼,文檔只能以只讀形式打開。此時如果你修改了文檔,將不能夠將修改的結果保存下來,但是卻能夠換個其它文件名進行「另存為」。既然能夠「另存為」,因此這個「修改文件時的密碼」形同虛設,不知微軟保留它的意義是什麼?
Word還有另一個加密方式,就是「保護文檔」,在「安全性」選項卡里點擊「保護文檔」或者操作菜單「工具」——「保護文檔」,word的右側會出現一個「保護文檔」任務窗格。其中有兩個設置項,一個是「格式設置限制」,另一個是「編輯限制」。用得多的是「編輯限制」,鉤選「僅允許在文檔中進行此類編輯」,下拉列表裡有「修訂」、「批註」、「填寫窗體」、「未作任何更改(只讀)」等四個選項。如果選了「填寫窗體」,連游標都不能放在被保護的文檔中間,自然就無法修改、復制文檔的內容了。如果選了「未作任何更改(只讀)」,被保護的文檔將不能被修改,但文檔的內容可以被復制。在設置了「編輯限制」保護的文檔里還可以選擇部分內容作為例外項允許被復制和修改。設置好後點擊「是,啟動強制保護」,輸入兩次密碼就實現了對文檔的保護。
有矛就有盾,對加了密碼保護的Word文檔可以採用密碼破解工具軟體進行破解,常用的有Advanced Office Password Recovery、Advanced Office Password Breaker、Office Password Remover等。其中最值得推薦的是Office Password Remover,這款軟體需要連接在網際網路上使用,它的最大優點是破解速度非常快,不管是多麼復雜的word文檔密碼,幾秒鍾就被破解了。
至於「保護文檔」密碼的破解,根本就不需要使用密碼破解工具軟體,新建一個空白Word文檔,操作菜單「插入」——「文件」,選中被保護了的文檔,將其插入進來就將「保護文檔」密碼破除了。
❻ 怎麼破解U盤加密狗
電腦狗,即加密狗,現在所說的加密狗,一般都是硬體加密狗。是一種類似於u盤一樣的東西,是一種防盜版的方式。一般是把程序的一小部分或解密部分集合到加密狗的硬體中,防止軟體的盜版。
現在好像除了復制加密狗,沒有什麼很好的破解方法。
加密狗(dongle),經常被認為是硬體保護,它是一個可被附加在計算機並口、串口或USB上的小插件,它包含廠家燒制的EPROM和定製的專用集成電路。dongle保護的的原理就是軟體開發者在程序里經常檢查dongle中的單元(Cell)的並對比返回值,這種檢查可以是直接讀單元或者是使用某種內部演算法(此時單元受到保護無法直接讀)。
❼ 怎麼破解USB加密狗
hasp 系列加密狗破解有的朋友認為很難,其實不然,只要有足夠的耐心和技術基礎。是沒有問題的。
--------------------------------------------------------------------------------------------------------
004015FF |. 8D95 ACFBFFFF lea edx,[local.277]
00401605 |. 52 push edx
00401606 |. 8B85 F8FBFFFF mov eax,[local.258]
0040160C |. 50 push eax
0040160D |. 8B8D A8FBFFFF mov ecx,[local.278]
00401613 |. 51 push ecx
00401614 |. 68 D4E54000 push APP.0040E5D4 ; ASCII "EN"
00401619 |. 8B55 E8 mov edx,[local.6]
0040161C |. 52 push edx
0040161D |. E8 8E230000 call <jmp.&user_dll.sui_In> ;這個CALL只要一執行,就死掉,所以必須跟進
00401622 |. 8945 EC mov [local.5],eax
00401625 |. 8B45 EC mov eax,[local.5]
00401628 |> 8B4D F4 mov ecx,[local.3]
0040162B |. 64:890D 00000000 mov fs:[0],ecx
00401632 |. 8B4D E4 mov ecx,[local.7]
00401635 |. E8 C72D0000 call APP.00404401
0040163A |. 8BE5 mov esp,ebp
0040163C |. 5D pop ebp
0040163D \. C3 retn
--------------------------------------------------------------------------------------------------------
6、跟進後出現一下代碼,看第一行,就是0040161D 處調用的函數,再看右面的注釋,心跳加快,InitSystem,從名字上你都能猜想它會干什麼,對,讀狗的相關代碼就應該在這兒初始化(當然還要初始化其他信息),繼續跟進
--------------------------------------------------------------------------------------------------------
004039B0 $- FF25 C8554000 jmp ds:[<&user_In>] ; InitSystem
004039B6 $- FF25 C4554000 jmp ds:[<&user_Star>] ; StartProgram
004039BC $- FF25 C0554000 jmp ds:[<&user_Mai>]
004039C2 $- FF25 AC544000 jmp ds:[<&XXX_DLL.#3>]
004039C8 $- FF25 A8544000 jmp ds:[<&XXX_DLL.#47>]
--------------------------------------------------------------------------------------------------------
7、跟進後,代碼是一系列的IsBadReadPtr,由此判斷該處是初始化內存工作,離讀狗還用有一段距離。部分代碼如下,還有更多的IsBadReadPtr,沒必要就不貼了,貼一點提示思路即可。
一直按F8,痛苦的是這段代碼中有個循環,要循環20多次,稍不留神就結束循環,立刻進入另一個關鍵CALL,程序又死掉。所以在這兒又費了我很多時間。
--------------------------------------------------------------------------------------------------------
00EF5940 > 55 push ebp ;InitSystem函數
00EF5941 8BEC mov ebp,esp
00EF5943 81EC 280C0000 sub esp,0C28
00EF5949 A1 6C2EF100 mov eax,ds:[F12E6C]
00EF594E 8945 E0 mov ss:[ebp-20],eax
00EF5951 57 push edi
00EF5952 8B45 0C mov eax,ss:[ebp+C]
00EF5955 50 push eax
00EF5956 68 6848F100 push user_dll.00F14868
00EF595B E8 34F70000 call <jmp.&MSVCR71.strcpy>
00EF5960 83C4 08 add esp,8
00EF5963 B9 583AF100 mov ecx,user_dll.00F13A58
00EF5968 85C9 test ecx,ecx
00EF596A 74 46 je short user_dll.00EF59B2
00EF596C 6A 01 push 1
00EF596E 68 583AF100 push user_dll.00F13A58
00EF5973 FF15 1072F000 call ds:[<&KERNEL32.IsBadWritePtr>] ; kernel32.IsBadWritePtr
00EF5979 85C0 test eax,eax
00EF597B 75 35 jnz short user_dll.00EF59B2
00EF597D 837D 10 00 cmp dword ptr ss:[ebp+10],0
00EF5981 74 26 je short user_dll.00EF59A9
00EF5983 6A 01 push 1
00EF5985 8B55 10 mov edx,ss:[ebp+10]
00EF5988 52 push edx
00EF5989 FF15 1472F000 call ds:[<&KERNEL32.IsBadReadPtr>] ; kernel32.IsBadReadPtr
00EF598F 85C0 test eax,eax
00EF5991 75 16 jnz short user_dll.00EF59A9
00EF5993 68 04010000 push 104
00EF5998 8B45 10 mov eax,ss:[ebp+10]
00EF599B 50 push eax
00EF599C 68 583AF100 push user_dll.00F13A58
00EF59A1 FF15 1872F000 call ds:[<&KERNEL32.lstrcpynW>] ; kernel32.lstrcpynW
--------------------------------------------------------------------------------------------------------
8、上面代碼執行結束後迅速來到下面代碼,注釋處的CALL執行就死,跟進
--------------------------------------------------------------------------------------------------------
00EF5D8A 6A 03 push 3
00EF5D8C 68 10000100 push 10010
00EF5D91 8B15 9C3EF100 mov edx,ds:[F13E9C]
00EF5D97 83C2 12 add edx,12
00EF5D9A 52 push edx
00EF5D9B 68 D80CF100 push user_dll.00F10CD8
00EF5DA0 A1 9C3EF100 mov eax,ds:[F13E9C]
00EF5DA5 8B88 2C0F0000 mov ecx,ds:[eax+F2C]
00EF5DAB 51 push ecx
00EF5DAC E8 45E70000 call <jmp.&XXX_dll.#66_UserMessage>
00EF5DB1 EB 15 jmp short user_dll.00EF5DC8
00EF5DB3 E8 580B0000 call user_dll.00EF6910 ;該CALL執行就死掉,讀狗函數在這里
00EF5DB8 85C0 test eax,eax
00EF5DBA 74 0C je short user_dll.00EF5DC8
--------------------------------------------------------------------------------------------------------
9、跟進後一直按F8,遇到CALL user_dll.00XXXXXX字樣的要格外小心,果然執行到某個CALL的時候死掉,只好記住地址,重設斷點,重新來,繼續跟進死掉的CALL。由於這兒一直是尋找讀狗函數,所以不再貼代碼了,大家只看思路,無用代碼太多,會擾亂思路.
10、不厭其煩的重復上述過程突然發現下面代碼,相信僅僅函數名足以讓你興奮
-------------------------------------------------------------------------------------------------------
00EF6EB8 51 push ecx
00EF6EB9 68 680AF100 push user_dll.00F10A68
00EF6EBE 8B15 9C3EF100 mov edx,ds:[F13E9C]
00EF6EC4 83C2 12 add edx,12
00EF6EC7 52 push edx
00EF6EC8 E8 85D70000 call <jmp.&HLK_dll.#13_hlk_LogIn> ;LogIn,登錄狗
00EF6ECD 85C0 test eax,eax ;判斷返回值,如是0
00EF6ECF 0F84 B2000000 je user_dll.00EF6F87 ;跳走,死掉
00EF6ED5 C705 6C3EF100 01000000 mov dword ptr ds:[F13E6C],1
00EF6EDF E8 5CD70000 call <jmp.&HLK_dll.#10_hlk_Avail> ;讀另一個數據,為ReadDong做准備,雖然
00EF6EE4 85C0 test eax,eax ;不知道讀什麼,但返回值如是0
00EF6EE6 0F84 9B000000 je user_dll.00EF6F87 ;跳走,死掉
00EF6EEC 8D85 5CFFFFFF lea eax,ss:[ebp-A4]
00EF6EF2 50 push eax
00EF6EF3 E8 54D70000 call <jmp.&HLK_dll.#15_hlk_ReadDong> ;再讀
00EF6EF8 85C0 test eax,eax ;判斷返回值,如是0
00EF6EFA 0F84 87000000 je user_dll.00EF6F87 ;OVER
00EF6F00 B9 2848F100 mov ecx,user_dll.00F14828 ;判斷ECX是否為0,跟蹤發現該值是狗的編號
00EF6F05 85C9 test ecx,ecx ;是0與否,不影響程序運行
00EF6F07 74 2B je short user_dll.00EF6F34
00EF6F09 8D55 98 lea edx,ss:[ebp-68] ;該地址存放狗的編號
00EF6F0C 85D2 test edx,edx
00EF6F0E 74 16 je short user_dll.00EF6F26
00EF6F10 6A 06 push 6
00EF6F12 8D45 98 lea eax,ss:[ebp-68]
00EF6F15 50 push eax
00EF6F16 68 2848F100 push user_dll.00F14828
00EF6F1B FF15 E875F000 call ds:[<&MSVCR71.strncpy>] ; MSVCR71.strncpy
--------------------------------------------------------------------------------------------------------
11、聰明的你肯定知道該做什麼了,對,只要把00EF6ECF、00EF6EE6、00EF6EFA三處的je改為jne即可跳過狗的檢查。我毫不猶豫的就改了,運行,然而並沒有出現預想的興奮的事情。出現一個錯誤提示「沒有發現可選文件」。
12、「可選文件」是什麼意思,到軟體安裝目錄查看,有個OPTION文件夾,裡面有很多文件,用UltraEdit打開,看不懂呵呵
13、將改文件夾中的文件所有文件刪除,帶狗運行,出現和11步同樣的提示;恢復文件,運行正常。由此可見,解密那些文件需要狗中的數據,大家知道HASP狗用的是AES,難道狗中存放著AES密碼??帶著這樣的疑問跟蹤程序,來到下面代碼
--------------------------------------------------------------------------------------------------------00EF723F 8B8D 68F6FFFF mov ecx,ss:[ebp-998] ;壓入的三個參數意義就不說明了,因為沒必要
00EF7245 51 push ecx
00EF7246 8D95 64F8FFFF lea edx,ss:[ebp-79C]
00EF724C 52 push edx
00EF724D 8D85 BCFAFFFF lea eax,ss:[ebp-544]
00EF7253 50 push eax
00EF7254 E8 47180000 call user_dll.00EF8AA0 ;該函數執行完後,EDX會出現一些明碼,明碼信息
大概為APPLICAITON=XXX;OPTION=XXX.....是不是很像文件啟動需要檢查的選項?所以要弄懂解密演算法,必須跟進
--------------------------------------------------------------------------------------------------------
14、跟進後,部分代碼如下,這部分代碼很關鍵,所以貼的比較多。但是有很多是內核函數,很容易讀懂。
--------------------------------------------------------------------------------------------------------
00EF8B30 8D8D 68FDFFFF lea ecx,ss:[ebp-298]
00EF8B36 51 push ecx
00EF8B37 8B55 0C mov edx,ss:[ebp+C]
00EF8B3A 83C2 2C add edx,2C
00EF8B3D 52 push edx
00EF8B3E 68 5038F100 push user_dll.00F13850
00EF8B43 E8 14BD0000 call <jmp.&XXX_DLL.#100_ExtendPathName> ; 獲取文件完整路徑
00EF8B48 6A 00 push 0
00EF8B4A 8D85 70FFFFFF lea eax,ss:[ebp-90]
00EF8B50 50 push eax
00EF8B51 8D8D 68FDFFFF lea ecx,ss:[ebp-298]
00EF8B57 51 push ecx
00EF8B58 E8 63BC0000 call <jmp.&XXX_DLL.#47_MakeSString>
00EF8B5D 50 push eax
00EF8B5E FF15 0872F000 call ds:[<&KERNEL32.OpenFile>] ; 打開文件
00EF8B64 8985 54FDFFFF mov ss:[ebp-2AC],eax
00EF8B6A 83BD 54FDFFFF FF cmp dword ptr ss:[ebp-2AC],-1
00EF8B71 74 55 je short user_dll.00EF8BC8
00EF8B73 8B95 50FDFFFF mov edx,ss:[ebp-2B0]
00EF8B79 52 push edx
00EF8B7A 8B85 60FDFFFF mov eax,ss:[ebp-2A0] ;存放讀入數據的緩沖區,關鍵(後面破解用上)
00EF8B80 50 push eax
00EF8B81 8B8D 54FDFFFF mov ecx,ss:[ebp-2AC]
00EF8B87 51 push ecx
00EF8B88 FF15 F071F000 call ds:[<&KERNEL32._hread>] ; 讀文件,ebp-2A0為存放讀入數據的緩沖區
00EF8B8E 3B85 50FDFFFF cmp eax,ss:[ebp-2B0]
00EF8B94 75 19 jnz short user_dll.00EF8BAF
00EF8B96 8B55 10 mov edx,ss:[ebp+10]
00EF8B99 52 push edx
00EF8B9A 8B85 64FDFFFF mov eax,ss:[ebp-29C]
00EF8BA0 50 push eax
00EF8BA1 8B8D 60FDFFFF mov ecx,ss:[ebp-2A0] ;存放解密後的數據,和讀入緩沖區地址相同
00EF8BA7 51 push ecx
00EF8BA8 E8 B1BA0000 call <jmp.&HLK_dll.#12_hlk_Crypt> ;對讀入的數據進行解密,須弄懂演算法
00EF8BAD EB 0A jmp short user_dll.00EF8BB9
00EF8BAF C785 64FDFFFF 00000000 mov dword ptr ss:[ebp-29C],0
00EF8BB9 8B95 54FDFFFF mov edx,ss:[ebp-2AC]
00EF8BBF 52 push edx
00EF8BC0 FF15 F471F000 call ds:[<&KERNEL32._lclose>] ; 關閉文件
00EF8BC6 EB 0A jmp short user_dll.00EF8BD2
00EF8BC8 C785 64FDFFFF 00000000 mov dword ptr ss:[ebp-29C],0 ;後面的函數不做解釋了,只需知道解密後的
00EF8BD2 8B85 60FDFFFF mov eax,ss:[ebp-2A0] ;數據存放在ebp-2A0
00EF8BD8 0385 64FDFFFF add eax,ss:[ebp-29C]
00EF8BDE C600 00 mov byte ptr ds:[eax],0
00EF8BE1 8B4D 08 mov ecx,ss:[ebp+8]
00EF8BE4 8B95 60FDFFFF mov edx,ss:[ebp-2A0]
00EF8BEA 8911 mov ds:[ecx],edx
00EF8BEC 8B85 64FDFFFF mov eax,ss:[ebp-29C]
00EF8BF2 8B4D FC mov ecx,ss:[ebp-4]
00EF8BF5 E8 E8C30000 call user_dll.00F04FE2
00EF8BFA 8BE5 mov esp,ebp
00EF8BFC 5D pop ebp
00EF8BFD C3 retn
--------------------------------------------------------------------------------------------------------
15、為了得到解密後的數據,跟進00EF8BA8處的call <jmp.&HLK_dll.#12_hlk_Crypt>,看看到底是什麼演算法。可是樂觀的情緒又受打擊,該函數有大量的花指令,菜鳥階段,不懂如何去除花指令,研究肯定不是一天兩天的事。所以不能在一棵樹上弔死,換個思維,為什麼不能用程序本身的代碼進行解密呢!!!
對,就讓程序自身幫我們幹活!說干就干,在步驟13的00EF723F處設斷,反復運行程序,每執行一次查看ebp-2A0處的值,並mp出來,另存為16進制文件,這些文件就是解密過的文件,將其覆蓋原來的加密文件。剩下要做的就是跳過上面代碼中的解密模塊(_hlk_Crypt)。
這個很簡單,來到00EF8B8E 處,即程序剛進行完_hread之後,將該處的代碼cmp eax,ss:[ebp-2B0]改為jmp 00EF8BB9然後匯編。由於_hread函數和_hlk_Crypt函數用的是同一個緩沖區,所以_hread函數執行完畢後,ebp-2A0處的已解密數據就可順利為後續程序使用了。
16、經過上面修改後,F9,程序順利啟動!!!!
【繼續完善】
17、程序運行一段時間後,彈出對話框,通知確定狗的存在!!看來程序啟動中還是要定時檢查的。
第一個念頭:查找SetTimer函數,果然找到,且只有一次調用,心想就是這個函數在作怪了,該函數的uElapsed值為1秒,我將其該為9A7EC800,即30天。運行,可是仍然定時檢查狗的存在
第二個念頭:查找其他有關時間的函數,但感覺有點費勁,進而轉第三個念頭
第三個念頭:以其他的函數設斷點,如大家常用的CreateFile、DeviceIoControl等,但沒用過,感覺肯定不是跟蹤一兩句代碼就可搞定的事情,進而轉第四個念頭
第四個念頭:一勞永逸的想法,從源頭解決問題。為什麼不直接修改讀狗函數的返回值?這樣程序無論何時檢查狗都無所謂。
重新跟進hlk_LogIn、hlk_Avail、hlk_ReadDong三個函數,發現這三個函數返回前都有共同的代碼:
--------------------------------------------------------------------------------------------------------
00B5126C 837D FC 00 cmp dword ptr ss:[ebp-4],0 ;看ebp-4是否為0
00B51270 0F94C0 sete al ;是,則eax=1,有狗
00B51273 8B4D F4 mov ecx,ss:[ebp-C]
00B51276 E8 C6640400 call HLK_dll.00B97741 ;該CALL並不是真正函數,經驗證不影響上面的EAX值
00B5127B 8BE5 mov esp,ebp
00B5127D 5D pop ebp
00B5127E C2 0C00 retn 0C
-----------------------------------------------------------------------------------------------------
不插狗的情況下[ebp-4] = 9,因此eax = 0,無狗,因此只需將 sete al改為 setne al,匯編,即可。
至此,打狗結束,程序非常正常。將修改後的文件另存到可執行文件,做為補丁,覆蓋原文件,狗解除。
❽ 詳細破解usb加密狗步驟及需要的軟體
加密狗如果設置了不能同時共用一個屬性的功能,另一台機器就無法使用,這就是加密狗所要保護的安全功能,防止非法授權用戶的使用..如果破解的掉,那這款加密狗的加密安全等級並不高,或者說沒有它的實用價值.好的加密狗可以做到有效防止調試,反編譯等措施,保護軟體利益不受非法侵犯.SafeNet加密狗擁有著全球頂級的信息安全技術,可以很好有效的保護軟體防止盜版問題的發生..採用AES-128位演算法進行加密,ECC演算法進行數字簽名等措施.有興趣的朋友可以聯系杭州旺財信息,可以提供免費產品測試3個月