加密狗模擬破解?

Tags: 環境, 加密狗,

IDE: 開發環境,比如商用的 Visual Studio,免費開源的 Sharp Develop。Encrypt: 加密String: 字符串Dog: 狗,在此處可理解為加密狗.NET: 微軟開發的變成框架,可使用 .NET Reflector 進行反編譯。

工具/原料

de4dot

.NET Reflector

方法/步驟

一、拆解文件,尋找驗證

脫殼這個很簡單 扔到 de4dot 神器自動脫掉了。把處理後的文件扔到 .NET Reflector 裡面,右鍵模組 -> Go To Entry Point 進入入口點

加密狗模擬破解

觀察代碼,程序在入口點通過建立互斥體檢測程序是否已經運行,然後進入「MainForm」窗口。

加密狗模擬破解

在主窗口初始化的代碼內,「初始化運行環境」的下面有一行很可疑,「InitLicense 初始化授權」:

加密狗模擬破解

看到代碼後,可以發現我們沒有找錯,許可授權在這裡讀取:

加密狗模擬破解

SN 全名 Serial Number[序列號],這個類名也很直白,就是我們研究的目標了。

方法/步驟2

二、拆解驗證,糊點代碼點進去 SN 這個類,然後單擊 Reflector 界面最底部的「Expand Methods」展開這個類所有代碼,方便分析:

加密狗模擬破解

把全部文件拷貝到 Visual Studio 或文字編輯器備份,定位到 Registered 這個方法:

加密狗模擬破解

這段代碼,表示程序會優先檢查加密狗內部的授權。若是加密狗不存在,則進行序列號的校驗。把狗相關的函數提取出來,分析一下調用:

加密狗模擬破解

NTFind: 調用 API 「NTFindFirst」 查詢第一個加密狗的存在,返回 0 表示成功。NTLogin: 調用 API 「NTLogin」 嘗試登錄,返回 0 表示成功 (加了容錯處理,所以代碼看起來比較怪),方法返回 true 表示成功。NTReadIv: 調用 API 「NTRead」 讀入加密狗數據,並與內置的密文進行比對驗證,方法返回 true 表示獲取成功並驗證通過。NTReadLicense: 讀取狗上面的數據,根據數據返回相應的授權信息。前兩個,直接在 DLL 修改為返回 0 即可:

加密狗模擬破解

後面一個有點麻煩,因為需要讀取數據到內存進行驗證,而數據又不能憑空出現。把「NTReadIv」這個方法的功能翻譯成白話大概就是:1. 申請 7 個字節的數據塊。2. 讀取狗的數據:從 0 開始讀取 7 個字節,讀到的內容寫到剛才申請的數據塊裡面。3. 如果數據塊的內容與「NTIv」這個變量的內容一致則驗證成功,否則失敗。而在此之前,我們需要知道所謂的密文是什麼內容;回到構建函數 (SN -> .cctor)

加密狗模擬破解

到這裡就比較簡單了,進去 EncryptString 這個類全部拷貝到 IDE,然後簡單做一個界面 [自行美化吧~]:

加密狗模擬破解

解密按鈕的事件代碼按照程序裡的寫法糊進去就行:

加密狗模擬破解

解密後,可以看到這樣的內容:NTCode: 1234567890arctilerstring_0: 3eee0d60fbb583e1bf33c6990d5f9e0dNTIv: azmap09順便: SN.RegisterProductCode 的文字解密後是「desktop」,可理解為桌面版。此時,可以知道加密狗從 0 到 7 的內容是 azmap09 這一串字符了,記錄下來:

加密狗模擬破解

當這三個驗證都通過後,程序就會調用 NTReadLicense 讀取狗上面記錄的內容;

加密狗模擬破解

又看到了熟悉的 NTRead 函數。此時,讀取的是 0x10(16) 開始的兩個字節一直到 0x12 的位置。接著往下看,一系列的判斷分支,根據分支內容判斷授權版本。在此之前,調查一下程序定義的授權類型:

加密狗模擬破解

目標很清晰,就是我們功能最多、最全的「企業版」。因此,把代碼優化、精簡一下:

加密狗模擬破解

而當我把數據庫用工具打開時,卻提示我數據庫被加密或無效.. 走進去「GetSQLiteConn」看看怎麼處理:

加密狗模擬破解

熟悉的加密文字,扔到工具裡解密看看,還真是這個「azmap09」。於是糊了幾行代碼,取得數據庫儲存的代碼號是 0。因此如果想讓版本為企業版,加密狗的內容必須是 -1 了。

加密狗模擬破解

方法/步驟3

三、戲弄程序,編寫狗狗首先摸清目標狗的導出函數:

加密狗模擬破解

然後編寫個相同的導出函數;我這裡首先用的是 C++

加密狗模擬破解

加密狗模擬破解

最後帶上修正導出表的 def 文件:

LIBRARY FakeLib

EXPORTS

NT3DESCBCDecrypt=_NT3DESCBCDecrypt

NT3DESCBCEncrypt=_NT3DESCBCEncrypt

NTCheckLicense=_NTCheckLicense

NTFindFirst=_NTFindFirst

NTGetHardwareID=_NTGetHardwareID

NTLogin=_NTLogin

NTLogout=_NTLogout

NTRead=_NTRead

NTWrite=_NTWrite

編譯後更名 NT88.dll,扔進去看看:

加密狗模擬破解

加密狗模擬破解

企業版。嘛,就這樣了

注意事項

只用以學習用途,不可用以商業用途。

如果有同學找不到軟件,下面給鏈接方便下載

NET Reflector v7.6.1.824 Final

de4dot

相關問題答案