反编译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都是商业软件,要花银子买.
总之,不管你加密的如何好,只是延长破解和反编译成可阅读代码的时间而以,所以不要放太多的精力在上面