天天看點

不注冊使用 .NET Reactor

.NET Reactor 是個好東西,隻不過這家夥更新的速度非常快,加密算法經常變化,而且越來越厲害,實在懶得 "跟" 了。這類工具通常在 "殼" 上做了大量的工作,諸如什麼 JIT Hook、native loader 之類的。而我通常隻使用它的混淆功能,是以用另外一種方法 "繞" 過去,即便不注冊,也可以使用最新版本。

  首先,我們準備一個簡單一點的 DLL,用于分析 .NET Reactor 混淆後的限制。test.dll

  我們使用 .NET Reactor 對該 DLL 進行混淆後,調用時會出現如下提示。

  OK! 接下來,我們把這個東西給去掉。

  打開 Reflector,我們會發現每個 .cctor 中都增加了如下代碼 (可能不同加密結果名稱有所不同)。

  很顯然,<PrivateImplementationDetails>{B4838DC1-AC79-43d1-949F-41B518B904A8} 類型是 .NET Reactor 注入進去的,順藤摸瓜進入 CS$0$0006()。

  那行字元串符合我們通緝目标的特征,接下來怎麼做?當然是把這個方法内部代碼删除掉了。(如果你願意,也可以将所有 .cctor 中的那行代碼給批量替換掉)

  不好意思,Suppress ILDASM 是最基本的手段。我們換一個 ILDASM.exe (可從網上找該修改版本,剔除了 SuppressIldasmAttribute 特性限制)。

  打開編輯器,搜尋 CS$0$0006,然後将該方法體删除,隻保留 ret。(如果有 publickey,注意删除)

儲存,重新編譯該 IL 代碼 (如果有 Public Key,注意使用 /key=...)。

  我們試試這個 test2.dll,那個讨厭的對話框已經消失了,不見了……

  結束了?等等……

  我們給 MyClass2 添加一個私有方法。

  用 .NET Reactor 混淆後,可能你會發現上面寫的那個 <PrivateImplementationDetails>{B4838DC1-AC79-43d1-949F-41B518B904A8} 不見了,.cctor 裡面也沒有注入額外的代碼。所不同的是出現了一個名字古裡古怪的家夥,就像下面這樣。

  我們翻看其内部方法,很顯然下面這個就是我們要修改的目标。

  至于後面怎麼做,無需我多言了。(其實在這個例子中,根本沒有調用該方法,也就是說不會出現彈出框……)

-------------------------------

附:如果你希望加密 EXE,那麼還是老老實實進行脫殼,然後修複,再然後……

本文轉自 h2appy  51CTO部落格,原文連結:http://blog.51cto.com/h2appy/1174565,如需轉載請自行聯系原作者

繼續閱讀