淺談 DotNet 保護中字串加密的技術

來源:互聯網
上載者:User
加密|字串

學習過了名稱混淆,最近又看了一些字串加密方面的東西。在混淆保護和加密殼中都有字串加密保護功能。

總體上字串加密可以分為兩類, 第一類是混淆保護中的字串加密技術。主要特徵是修改代碼執行路徑。大部分混淆保護工具的字串加密都是這一類。

第二類就是加密殼中的字串加密技術。這種不用修改IL代碼,直接對中繼資料中的字串加密。這一類以remotesoft,maxtocode為代表。

先看第一類,加密實現大致如下。

加密前:

MessageBox.Show("Hellow World!");

加密後:

MessageBox.Show(Helper.Decode("A34579dfbbeyu346563345/=="));

簡單的說就是將原來使用字串的地方,將直接使用字串改為間接使用字串。在這裡保護軟體將字串 "Hellow World!" 進行加密 得到結果 "A34579dfbbeyu346563345/=="。 Helper.Decode 是保護軟體提供的一個解密函數,它實現將 "A34579dfbbeyu346563345/==" 還原為 "Hellow World!" 。

因為是混淆保護,所以我們可以分析得到 Decode 的代碼。然後直接用這個函數的代碼寫一個小工具將程式集中所有加密的字串都還原。產生一個字串對應表。以方便代碼閱讀和調試。

如果再深入,可以實現自動將字串還原到原程式集中。

再來看上面例子的IL代碼。

加密前:

ldstr "Hellow World!" call MessageBox.Show(string)

加密後:

ldstr "A34579dfbbeyu346563345/==" call string Helper.Decode(string) call MessageBox.Show(string)

怎麼還原,其實很簡單,我們已經知道了decode的代碼,而且已經能實現字串的解密了。得到了字串的對應表。

直接將

ldstr "A34579dfbbeyu346563345/==" call string Helper.Decode(string)

替換為

ldstr "Hellow World"

即可。寫一個小工具使用Regex搜尋替換就可以了。

第二類字串加密保護:

實現就是直接對中繼資料中的String流進行加密。

這類保護有一個缺陷,程式運行後 中繼資料中的String流會解密後在記憶體中完整還原。在我前面的文章裡面有介紹中繼資料的dump。這裡就不重複羅嗦了。

對於第一類字串加密保護,還有其它的形式,如 Helper.Decode這個函數可以是一個native的函數。或者是和流程混淆結合。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。