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