.Net代碼混淆技巧


混淆器的功能其實差不太多,個人覺得Eazfuscator.NET這種最方便,編譯release時自動插入混淆步驟,和普通的編譯release操作一樣就行了,更新也比較快,也相對便宜,功能也足夠了。其他的混淆器還得單獨開個軟件選幾個dll配置下再生成再替換,煩都煩死了。
 
然后就是要會配置,很多人說混淆被de4dot一下子就給還原了,其實我配置下來后,de4dot幾乎無法改變什么。
變量混淆:隨便開一級就行,即便你用不可見得字符混淆了,de4dot一下以后,還是和只開一級一樣。多使用internal讓混淆器知道這個類可以全部混淆,還可以配合dll合並,但很多項目不適合使用dll合並。
字符串混淆和資源加密這種自己按需要開,這種東西強度不高,只能帶來一點麻煩
流程混淆配合async await,強度開到能把async await編譯成狀態機,這玩意de4dot沒法還原
關鍵位置使用虛擬化混淆,這玩意可是神器啊,高手都得破解半天,de4dot更沒法還原
以上幾個只是降低可讀性,不讓人能夠直接保存出源代碼,不能防破解,要防破解得用以下功能。
 
虛擬化混淆適合配合內斂編譯,比如檢查key的代碼,虛擬化混淆后就很難反編譯了,但是人家找到調用地方直接改掉就完了,我告訴你,多寫幾個調用,然后內斂編譯的時候,這些檢查代碼就跑到那些調用的地方有好幾個副本,調用的地方也都虛擬化混淆,這人家就難破解了呀。有虛擬化幫忙的情況下,其他看似沒啥用的混淆可以稍微開高一點,因為要破虛擬化后才能還原,沒法一起做。
 
混淆過的軟件還是可以被反編譯軟件打開一部分的,還有一些是加殼軟件,可以起到壓縮加密無法反編譯的作用,但是你要知道,能加殼就必定能脫殼,脫掉以后還是你混淆后的樣子,你沒混淆的話脫殼后就是原樣,而且強殼對程序本身的運行還會帶來影響,所以他和混淆是互補的,混淆還是不可或缺的。
 
還有一個很多人說的思路,就是把關鍵代碼放到native的dll里,我要提醒大家,你的native不做好混淆,不做好調用檢查的話,還是一樣會被破解,沒區別,還有其他的小聰明,道理一樣,這種思路做的不好,還不如虛擬化保護來的給力。還有人動不動就說上加密狗,其實道理還是一樣的,你調用加密狗的代碼不好好保護,還是一樣秒破。而加密狗其實也被一些破解者研究的透透的。
 
絕對的防破解本來就是不可能的,我們的目標是用我們菜鳥般的技術,給破解者帶來大麻煩,就可以了。
還有個東西,corert,等他成熟了用corert編譯后,那玩意應該是最難破解的。
 
補充:
Eazfuscator網上最后可用的破解版是2019.1,被研究和練手的相對較多,后面版本破解難度陡增,並增加改變了混淆特性,如果真的需要保護程序推薦購買最新版
還有可以用的就是吾愛破解推崇的dng,Agile.NET,還有可能比較強的vmp,最新版支持.net了, 混淆道理也都是一樣的,怎么開特性看上面正文,已破解的版本會比較容易被針對。
我希望說的這么清楚后,某些人不要一看到我說的這些軟件混淆后,會被de4dot恢復一部分而開始杠了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM