在DNGuard 2007 中我沒有選擇使用對方法體重排的方式來解決這個問題,而是選擇了另一個方法,自己記錄一個 虛擬表實現:MethodToken => “方法體加密對應信息” 的對應記錄。
因為這樣有一個好處,就是 這個虛擬表也可以進行加密后保存。另外就是“方法體加密對應信息”中不需要添加標識符 和普通沒有加密的方法體進行區分。
在 DNGuard 2007 試用版 中沒有使用真正的加密算法來對程序集加密,只是采用了“代碼直接挪位”的方式,運行庫的“解密”操作只是從另一個位置直接讀取的操作。
有個朋友分析到DNGuard 試用版里面有一個虛擬表記錄了:MethodRid => ILCode。這個就是 虛擬表:MethodToken => “方法體加密對應信息” 在 試用版中退化的模式。
另外因為方法體只是挪位,所以它實際上還是在程序集文件內,加載到內存中后也在程序集模塊的內存空間中。而不是那位朋友說的 運行庫在解密后將 IL代碼 填回到內存里面去了。
試用版只是提供給用戶驗證 DNGuard 是否適合自己的軟件項目以及系統發布環境,請不要用試用版 加密程序集后直接分發。
文章來源于領測軟件測試網 http://www.kjueaiud.com/