反編譯dotfuscator
『壹』 為什麼用c#開發的程序可以被反編譯
因為C#開發的程序被編譯後並沒有成為可運行的二進制文件,而是一種中間狀態,是由MSIL語言寫成的程序文件。從理論上說,各種.NET語言只要完成的功能相似,編譯後的MSIL語言文件都是相似的,可見MSIL的代碼是對應著較為固定的高級語言結構的。所以,理論上,把MSIL語言進行返推,就可以將其反編譯為.NET中的任何一款高級語言。
『貳』 vs2010 中的 Dotfuscator 能不能做成編譯出來的東西自動混淆
代碼混淆基本沒什麼用,可以被反編譯的。
最好的做法是結合非託管堆代碼實現如下兩個目的
一、不能看:.NET DLL可以包含託管堆代碼(可以被反編譯的)與非託管堆代碼(不能被反編譯,要反編譯也是更高層次的了,不在討范圍內),我們將核心邏輯代碼置於非托堆代碼中,由託管堆代碼提供介面供外部調用,調用時將非託管代碼通過.NET動態編譯特性編譯後返回執行結果。這樣就保證了不能看。
二、不能調:我們在非託管代碼中加入驗證調用者來源功能,判斷調用者的HASH值是不是與在非託管代碼中約定的HASH值(發布時需要提前生成相關引用者的HASH值存於非託管代碼,最後生成非託管代碼的DLL放於安裝包中)一致,如一致則通過執行返回結果,不一致則返回空。這樣就解決了非合法來源不能調的問題。
更多參考:http://www.cnblogs.com/dengxi/p/5750170.html
『叄』 C#防止反編譯
加殼也不錯,UPX或者PE
加完之後如果不脫殼是反不了的
當然如果自己定製一個殼就更好,別人還得先研究怎麼脫殼
混淆代碼的無非是那麼幾個軟體
maxtocode、dotnet_reactor、XenoCode
『肆』 C# VS2012 .Net 4.5 如何防止反編譯
你找下 數字簽名 怎麼用……
不過祈求代碼不會被反編譯是不可能的,我們追求的應該是難於反編譯和自身代碼的安全性,
從代碼設計代碼編寫技術的角度來避免發編譯後重要信息的泄露,比如資料庫連接是一定要用加密技術(例如MD5)加密以後在用的,絕對不可以將真實的可讀性強的連接串寫在代碼的任何位置
希望能幫到你……
『伍』 如何防止Unity3D代碼被反編譯
加密原理(無需Unity源碼):
1. IDA Pro打開libmono.so, 修改mono_image_open_from_data_with_name為
mono_image_open_from_data_with_name_0,
2. 替換實現mono_image_open_from_data_with_name,
extern mono_image_open_from_data_with_name_0(...);
mono_image_open_from_data_with_name(...) {
MonoImage *img = mono_image_open_from_data_with_name_0(...);
//發現數據文件頭不是DLL前綴則解密 img->raw_data, 相應修改img->raw_data_len
return img;
}
3. 重新打包libmono.so; 替換Unity3D中的android下的版本.
4. 另外寫個加密的工具,植入構建環境(MonoDeveloper或VS,添加一個打包後Build Phase來加密DLL); (IOS下禁用JIT固採用AOT編譯,DLL中沒有邏輯代碼,所以無需操心);
從AndroidManifest.xml中可以看出,騰訊的改造應該是修改並替換了入口的classes.dex,把以前的入口 UnityPlayerProxyActivity替換為com.tencent.tauth.AuthActivity. 然後去載入了自定義的幾個so: libNativeRQD.so. 周全考慮,為了防止第三方委託libmono去做解密而做了防護措施. 具體實現我還沒做深入分析, 應該也是老套路.
libmono.so中的mono_image_open_from_data_with_name也被替換成了mono_image_open_from_data_with_name_0.
解密(android):
方法一: ROOT android系統(最好是一部手機,別搞模擬器,慢死), 掛載LD_PRELOAD的API hook來實現.
方法二: 內存特徵碼提取,簡單高效無敵; 機器能讀,你就能讀;
『陸』 VS怎樣給項目加強名稱,怎樣防止反編譯
.net 生成的dll 反編譯很簡單的
一般.net的dll防止反編譯 採用 加殼和混淆 兩種方案
加殼我沒怎麼研究過,一般加殼工具使用後會造成dll不能使用
最常用的就是混淆了,工具也很多 我一般使用Xenocode進行混淆
可以對 類名,變數名,屬性 等命名進行混淆 減小其反編譯後的可讀性
你可以自己嘗試一下 基本混淆後的程序 反編譯後 很難自己解讀出來
『柒』 如何使用DotfuscatorPro
使用默認混淆
1.
打開軟體點擊input選項卡,把dll或exe添加,Libray不要選,否則的話,幾乎所有的公共函數變數,不會被加密和混淆,可以很容易的看到代碼
2. 點擊build選項卡,在目標目錄(destination directory)選取你想把dll生成到的位置,如F盤:/混淆目錄
3. 其它不用設置,直接點build,會有提示是否要保存項目。點擊否
4. 生成的dll,再用.net Reflector 進行反編譯,看一下。
看到的結果是,類名重命名,方法名重命名 全都變成a,b,c
『捌』 如何防止Unity3D代碼被反編譯
在Unity3D中,代碼會編譯到Assembly-CSharp.dll。基於以上兩點,代碼的保護有以下三種:
第一種是對代碼進行混淆,諸如混淆軟體CodeGuard、CryptoObfuscator、de4dot
第二種是對Assembly-CSharp.dll進行加密後,重新對mono進行編譯手動編譯mono,能防止反編譯
『玖』 .net開發的exe安裝文件可以反編譯嗎
可以,用reflector 及其它
用混淆器加密及數字簽名,可擋掉大部分dll文件被人家反編譯.但魔高一尺,道高一丈, 要做到完全加密是很難的.
有些Dotfuscator防反編譯軟體可以參考, 但那些功能強大的Dotfuscator都是商業軟體,要花銀子買.
總之,不管你加密的如何好,只是延長破解和反編譯成可閱讀代碼的時間而以,所以不要放太多的精力在上面