国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 16:45:32
字體:
來源:轉載
供稿:網友

學習過了名稱混淆,最近又看了一些字符串加密方面的東西。
在混淆保護和加密殼中都有字符串加密保護功能。
總體上字符串加密可以分為兩類,
第一類是混淆保護中的字符串加密技術。主要特征是修改代碼執行路徑。
大部分混淆保護工具的字符串加密都是這一類。

第二類就是加密殼中的字符串加密技術。這種不用修改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"

即可。寫一個小工具使用正則表達式搜索替換就可以了。

第二類字符串加密保護:
實現就是直接對元數據中的String流進行加密。

這類保護有一個缺陷,程序運行后 元數據中的String流會解密后在內存中完整還原。在我前面的文章里面有介紹元數據的dump。這里就不重復羅嗦了。


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

http://m.survivalescaperooms.com/rick/archive/2006/12/31/608422.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳阳市| 疏附县| 万州区| 凤翔县| 潞城市| 玛纳斯县| 绿春县| 阿拉善盟| 河池市| 鲁甸县| 那曲县| 沙湾县| 沁水县| 包头市| 迭部县| 石狮市| 太仆寺旗| 汽车| 新昌县| 赤城县| 仙居县| 科技| 哈尔滨市| 昌图县| 连江县| 曲水县| 南溪县| 敦煌市| 营口市| 斗六市| 托克托县| 同心县| 五家渠市| 眉山市| 禹州市| 霸州市| 星子县| 岑溪市| 抚顺县| 抚顺县| 军事|