模糊c# 生成的 exe,dll 文件,防止软件被反汇编,
vs2005 自带 的工具,生成的时候老报错
------------------------------------------
正在加载程序集...
正在加载 E:\Test_Prj\模糊测试\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.exe
正在运行 D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin\ildasm.exe /OUT=E:~Windows.2\WindowsApplication1.exe.il /TEXT /NOBAR /RAWEH /QUOTEALLNAMES /UTF8 /FORWARD E:\Test_Prj\模糊测试\WindowsApplication1\WindowsApplication1\bin\Debug\WindowsApplication1.exe
无法打开 'E:~Windows.2\WindowsApplication1.exe.il' 以用于输出。
已返回 ildasm 1
生成错误。
急
20 个解决方案
#1
Mark+帮顶
#2
有,公司用的Xenocode,$399
#3
我们就是用vs2005自带的,还可以阿
dotfuscator.
dotfuscator.
#4
模糊c#
第一次听说,汗~
第一次听说,汗~
#5
模糊处理的目的
模糊处理 (obfuscation) 意在引起混淆。随着混淆的加重,人脑进行多方面智力思维的能力逐渐降低。请注意,这种规则并不改变前向(可执行的)逻辑,仅仅是将其表示为不可理解的形式。当一个编写出色的模糊处理工具对可读的程序指令进行处理之后,可能产生的一个副作用是输出结果不仅使人看了不知所云,而且它还会使反编译器无从下手。尽管保留了前向(可执行的)逻辑,但反向语义却呈现出非确定性。其结果是,通过反向工程将指令翻译为“编程语言”(如 C# 或 VB)的任何尝试都很可能失败,因为翻译结果含混不清。深度模糊处理能产生无数种可能的反编译结果,其中的一些如果进行重新编译,则可能会产生错误的逻辑。反编译器只是一种计算机器,无法知道哪种可能的结果经过重新编译后在语义上是有效的。人类编写和使用反编译器是为了自动执行人类难以胜任的反编译算法。所以,可以这样说,如果连反编译器都对模糊处理程序奈何不得,能力更逊一筹的人类自然就更加束手无策了。
------------------------
严重口误,谢谢 cheng_feng001
模糊处理 (obfuscation) 意在引起混淆。随着混淆的加重,人脑进行多方面智力思维的能力逐渐降低。请注意,这种规则并不改变前向(可执行的)逻辑,仅仅是将其表示为不可理解的形式。当一个编写出色的模糊处理工具对可读的程序指令进行处理之后,可能产生的一个副作用是输出结果不仅使人看了不知所云,而且它还会使反编译器无从下手。尽管保留了前向(可执行的)逻辑,但反向语义却呈现出非确定性。其结果是,通过反向工程将指令翻译为“编程语言”(如 C# 或 VB)的任何尝试都很可能失败,因为翻译结果含混不清。深度模糊处理能产生无数种可能的反编译结果,其中的一些如果进行重新编译,则可能会产生错误的逻辑。反编译器只是一种计算机器,无法知道哪种可能的结果经过重新编译后在语义上是有效的。人类编写和使用反编译器是为了自动执行人类难以胜任的反编译算法。所以,可以这样说,如果连反编译器都对模糊处理程序奈何不得,能力更逊一筹的人类自然就更加束手无策了。
------------------------
严重口误,谢谢 cheng_feng001
#6
请问各位,那个 关于MaxtoCode 3.21 版本 加密的效果如何,
谢谢.
#7
转贴自 ksj ID:coolksj
依据他的分析,这个vs2005自带的东西,其不了太大的作用.
转贴如下:
-----------------------------
NET 源代码的安全性(源代码工具真正比拼)
今天被屠宰的对象就是 我们公司使用vb.net开发的一套管理系统。名字就不说了,此系统主程序约3M,其*有约 3000个方法,事件,等等。是一个中大型的程序,源代码约有 5万行左右(去掉一些自动生成的代码计算后),其中有底层硬件操作类,也有水晶报表操作,数据库操作。我们最关心的是其中的一块,注册类,以及一些核心代码。而我们演示的时候将会把注册代码拿出来演示(当然,不是原来的注册代码。。。那个拿出去,BOSS要杀我的)
而代码保护工具的主角是:
1. Dotfuscator Community Edition //微软推荐的东东,我个人认为非常烂
2. XeonCode //最近最好的混淆器,有可取点.它号称安全,我们今
//天来看看是不是真的安全
3. MaxtoCode //一个不同于混淆的.NET源码工具 MaxtoCode
//目前普及版只支持 WindowsApplication的加密
//以后开放 WEB APPlication and Class Library
我们的反编译目标分为二种:
1. C#语言
2. MSIL语言
使用的全是市场上流通的免费反编译工具,我知道收费的反编译工具还会自动还源混淆.收费的我也没有条件去测试
好,开始测试:
我们分别使用上面三样对代码进行混淆或加密。
完毕,测试程序所有功能:
1. Dotfuscator Community Edition 我最不喜欢的混淆器,由于是1.2免费版,所以必须混淆所有模块,导致部分功能不能使用。但我们不关心那些,我们一会将展现被混淆的注册代码(因为类和方法都被混淆,所以必须要花点时间)
2. XeonCode 一个相对强大的混淆工具,我一直认为他与某著名的反编译工具捆绑,导至其它工具能反编译的代码而它不能反编译。我们把它的强度开到最大,勾上所有能勾的选项。(它混淆的Windows Application可以正常运行)
3. MaxtoCode 这是一个加密器,可以与XeonCode叠加使用,并且在2.0版中,将会加入自混淆功能,成为混淆加密一体化的工具。(它混淆的 Windows Applicaton 可以正常运行)
我们最关心的是混淆或加密的结果。OK,请不要急,让我们先看看源代码,再比较一下反编译后的代码。
Private Function Encrypt(ByVal inStr As String) As String
Dim key As String = "a#2151336fdaghksfges"
Dim out As String
Dim j, i, s As Integer
i = inStr.Length
s = 0
For j = 0 To i - 1
out = out + inStr.Substring(j, 1) + key.Substring(s, 1)
s = s + 1
If s >= 20 Then s = 0
Next
Return out
End Function
Private Function Register(ByVal instr As String) As String
Dim pRsa As New System.Security.Cryptography.RSACryptoServiceProvider
Dim en As New System.Text.ASCIIEncoding
Return en.GetString(pRsa.Encrypt(en.GetBytes(Encrypt(instr)), False))
'Dim a As String
'a = Encrypt(instr)
'Dim b() As Byte
'Dim c() As Byte
'b = en.GetBytes(a)
'c = pRsa.Encrypt(b, False)
'Return en.GetString(c)
这里怕大家看不清楚,特别加了展开的代码
End Function
源代码很清楚,即是对字符串进行插入,然后使用 RSA 进行加密(这里省去了RSA的KEY)
好,那么我们首先来看看使用上面三种工具混淆后的C#代码
1. Dotfuscator Community Edition
private string b(string A_0){ string text3; string text2 = "a#2151336fdaghksfges"; int num1 = A_0.Length; int num3 = 0; int num4 = num1 - 1; for (int num2 = 0; num2 <= num4; num2++) { text3 = text3 + A_0.Substring(num2, 1) + text2.Substring(num3, 1); num3++; if (num3 >= 20) { num3 = 0; } } return text3;}
private string a(string A_0){ RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(); ASCIIEncoding encoding1 = new ASCIIEncoding(); return encoding1.GetString(provider1.Encrypt(encoding1.GetBytes(this.b(A_0)), false));}
评价:跟原代码一模一样,只是混淆了类和方法名称,代码中根本未进行混淆,由于是免费版,也只能提供这么多功能.毫无意义
2. XeonCode
private string x246b032720dd4c0d(string x96c91b85a03f00b0) { string str2; string str3; int k; int j; str2 = String.Intern(x1110bdd110cdcea4._d574bb1a8f3e9cbc("\uec3b\uf2fa\ufa06\u0102\u0803\u0efc\u15fb\u1cf8\u23f8\u2b25\u3220\u391a\u401d\u471b\u4e1b\u5520\u5c10\u630e\u6a09\u7114", 281144282)); int i1 = x96c91b85a03f00b0.Length; k = 0; i2 = i1 - 1; j = 0; goto IL_003c; VariableExp: k ConstantExp: 20 IL_0029: blt.s IL_0038 //自动的跳转混合 k = 0; goto IL_0038; //花指令 ConstantExp: 1 IL_0031: add.ovf IL_0032: stloc.s 5 VariableExp: k int j; int i2; IL_0038: j++; if (j > i2) { return str3; } str3 = String.Concat(str3, x96c91b85a03f00b0.Substring(j, 1), str2.Substring(k, 1)); }
private string x2a0cb95ab84ba877(string x5b3e4cba383dedd9){ RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(); ASCIIEncoding encoding1 = new ASCIIEncoding(); return encoding1.GetString(provider1.Encrypt(encoding1.GetBytes(this.x246b032720dd4c0d(x5b3e4cba383dedd9)), false));} 评价:功能强大许多,对于较长的代码会加入花指令进行混淆,从而达到混淆反编译器的目地. 这种混淆已经是XeonCode的最大混淆较果,虽然有达到混淆反编译的较果,但耐心仔细的看,并结合IL 代码一起阅读,想得到其其算法是一件很容易的事情,最重要的是, 有某些反编译器竟然可以去掉花指令,从而达反混淆的较果. 所以使用它来保护你的知识版权是不是还不够强大呢?
3. MaxtoCode
private string Encrypt(string inStr){} private string Register(string instr){} 评价:代码呢????代码已经不见了……不过这就是MaxtoCode的功效,它是加密,不是混淆,你看不到代码了, 你完全无法入手去分析,那怕一点珠丝马迹都没有.您还可以结合XeonCode一起使用, 达到双重的保护(因为现版本的MaxtoCode不提供混淆功能,您能清楚的看到类及方法的正确名称) 好,刚刚展现的是反编译出来的C#代码,那么,我们再深入一点,真接反汇编为MSIL代码看看能达到什么较果待继。。。
依据他的分析,这个vs2005自带的东西,其不了太大的作用.
转贴如下:
-----------------------------
NET 源代码的安全性(源代码工具真正比拼)
今天被屠宰的对象就是 我们公司使用vb.net开发的一套管理系统。名字就不说了,此系统主程序约3M,其*有约 3000个方法,事件,等等。是一个中大型的程序,源代码约有 5万行左右(去掉一些自动生成的代码计算后),其中有底层硬件操作类,也有水晶报表操作,数据库操作。我们最关心的是其中的一块,注册类,以及一些核心代码。而我们演示的时候将会把注册代码拿出来演示(当然,不是原来的注册代码。。。那个拿出去,BOSS要杀我的)
而代码保护工具的主角是:
1. Dotfuscator Community Edition //微软推荐的东东,我个人认为非常烂
2. XeonCode //最近最好的混淆器,有可取点.它号称安全,我们今
//天来看看是不是真的安全
3. MaxtoCode //一个不同于混淆的.NET源码工具 MaxtoCode
//目前普及版只支持 WindowsApplication的加密
//以后开放 WEB APPlication and Class Library
我们的反编译目标分为二种:
1. C#语言
2. MSIL语言
使用的全是市场上流通的免费反编译工具,我知道收费的反编译工具还会自动还源混淆.收费的我也没有条件去测试
好,开始测试:
我们分别使用上面三样对代码进行混淆或加密。
完毕,测试程序所有功能:
1. Dotfuscator Community Edition 我最不喜欢的混淆器,由于是1.2免费版,所以必须混淆所有模块,导致部分功能不能使用。但我们不关心那些,我们一会将展现被混淆的注册代码(因为类和方法都被混淆,所以必须要花点时间)
2. XeonCode 一个相对强大的混淆工具,我一直认为他与某著名的反编译工具捆绑,导至其它工具能反编译的代码而它不能反编译。我们把它的强度开到最大,勾上所有能勾的选项。(它混淆的Windows Application可以正常运行)
3. MaxtoCode 这是一个加密器,可以与XeonCode叠加使用,并且在2.0版中,将会加入自混淆功能,成为混淆加密一体化的工具。(它混淆的 Windows Applicaton 可以正常运行)
我们最关心的是混淆或加密的结果。OK,请不要急,让我们先看看源代码,再比较一下反编译后的代码。
Private Function Encrypt(ByVal inStr As String) As String
Dim key As String = "a#2151336fdaghksfges"
Dim out As String
Dim j, i, s As Integer
i = inStr.Length
s = 0
For j = 0 To i - 1
out = out + inStr.Substring(j, 1) + key.Substring(s, 1)
s = s + 1
If s >= 20 Then s = 0
Next
Return out
End Function
Private Function Register(ByVal instr As String) As String
Dim pRsa As New System.Security.Cryptography.RSACryptoServiceProvider
Dim en As New System.Text.ASCIIEncoding
Return en.GetString(pRsa.Encrypt(en.GetBytes(Encrypt(instr)), False))
'Dim a As String
'a = Encrypt(instr)
'Dim b() As Byte
'Dim c() As Byte
'b = en.GetBytes(a)
'c = pRsa.Encrypt(b, False)
'Return en.GetString(c)
这里怕大家看不清楚,特别加了展开的代码
End Function
源代码很清楚,即是对字符串进行插入,然后使用 RSA 进行加密(这里省去了RSA的KEY)
好,那么我们首先来看看使用上面三种工具混淆后的C#代码
1. Dotfuscator Community Edition
private string b(string A_0){ string text3; string text2 = "a#2151336fdaghksfges"; int num1 = A_0.Length; int num3 = 0; int num4 = num1 - 1; for (int num2 = 0; num2 <= num4; num2++) { text3 = text3 + A_0.Substring(num2, 1) + text2.Substring(num3, 1); num3++; if (num3 >= 20) { num3 = 0; } } return text3;}
private string a(string A_0){ RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(); ASCIIEncoding encoding1 = new ASCIIEncoding(); return encoding1.GetString(provider1.Encrypt(encoding1.GetBytes(this.b(A_0)), false));}
评价:跟原代码一模一样,只是混淆了类和方法名称,代码中根本未进行混淆,由于是免费版,也只能提供这么多功能.毫无意义
2. XeonCode
private string x246b032720dd4c0d(string x96c91b85a03f00b0) { string str2; string str3; int k; int j; str2 = String.Intern(x1110bdd110cdcea4._d574bb1a8f3e9cbc("\uec3b\uf2fa\ufa06\u0102\u0803\u0efc\u15fb\u1cf8\u23f8\u2b25\u3220\u391a\u401d\u471b\u4e1b\u5520\u5c10\u630e\u6a09\u7114", 281144282)); int i1 = x96c91b85a03f00b0.Length; k = 0; i2 = i1 - 1; j = 0; goto IL_003c; VariableExp: k ConstantExp: 20 IL_0029: blt.s IL_0038 //自动的跳转混合 k = 0; goto IL_0038; //花指令 ConstantExp: 1 IL_0031: add.ovf IL_0032: stloc.s 5 VariableExp: k int j; int i2; IL_0038: j++; if (j > i2) { return str3; } str3 = String.Concat(str3, x96c91b85a03f00b0.Substring(j, 1), str2.Substring(k, 1)); }
private string x2a0cb95ab84ba877(string x5b3e4cba383dedd9){ RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(); ASCIIEncoding encoding1 = new ASCIIEncoding(); return encoding1.GetString(provider1.Encrypt(encoding1.GetBytes(this.x246b032720dd4c0d(x5b3e4cba383dedd9)), false));} 评价:功能强大许多,对于较长的代码会加入花指令进行混淆,从而达到混淆反编译器的目地. 这种混淆已经是XeonCode的最大混淆较果,虽然有达到混淆反编译的较果,但耐心仔细的看,并结合IL 代码一起阅读,想得到其其算法是一件很容易的事情,最重要的是, 有某些反编译器竟然可以去掉花指令,从而达反混淆的较果. 所以使用它来保护你的知识版权是不是还不够强大呢?
3. MaxtoCode
private string Encrypt(string inStr){} private string Register(string instr){} 评价:代码呢????代码已经不见了……不过这就是MaxtoCode的功效,它是加密,不是混淆,你看不到代码了, 你完全无法入手去分析,那怕一点珠丝马迹都没有.您还可以结合XeonCode一起使用, 达到双重的保护(因为现版本的MaxtoCode不提供混淆功能,您能清楚的看到类及方法的正确名称) 好,刚刚展现的是反编译出来的C#代码,那么,我们再深入一点,真接反汇编为MSIL代码看看能达到什么较果待继。。。
#8
学习
#9
转贴原文地址
http://blog.csdn.net/coolksj/archive/2005/04/14/347004.aspx
http://blog.csdn.net/coolksj/archive/2005/04/14/347004.aspx
#10
7楼有打广告的嫌疑,我用的是.net reactor,版本好像是2.66,免费的,功能还可以。后来公司买了个maxtocode,费用500,功能更强,500块也不贵,楼主考虑下。
#11
mark
#12
7楼有打广告的嫌疑
---------------------------------
不是广告,这个对比很有点意思,
vs2005自带的更多是对 对象名称,变量名称等进行转换,
而 XeonCode 功能更强,但是也有工具专门针对他的.
maxtocode 是隐藏代码, 据说maxtocode 的以后版本 混淆代码+隐藏代码
值得期待
依据网上其他的观点 ,先用XeonCode混淆代码,再用maxtocode隐藏代码是非常好的方案.
---------------------------------
不是广告,这个对比很有点意思,
vs2005自带的更多是对 对象名称,变量名称等进行转换,
而 XeonCode 功能更强,但是也有工具专门针对他的.
maxtocode 是隐藏代码, 据说maxtocode 的以后版本 混淆代码+隐藏代码
值得期待
依据网上其他的观点 ,先用XeonCode混淆代码,再用maxtocode隐藏代码是非常好的方案.
#13
曾经听说过,见过,没用过.
#14
我用的是Vs2005自带的dotfuscator,可以将名字混淆,混淆后再反编译基本上很难读了
#15
mark
#16
混淆,加壳。。。防盗版??哈哈。。。
#17
帮帮顶吧。
#18
帮顶了
#19
up
#20
#21
#1
Mark+帮顶
#2
有,公司用的Xenocode,$399
#3
我们就是用vs2005自带的,还可以阿
dotfuscator.
dotfuscator.
#4
模糊c#
第一次听说,汗~
第一次听说,汗~
#5
模糊处理的目的
模糊处理 (obfuscation) 意在引起混淆。随着混淆的加重,人脑进行多方面智力思维的能力逐渐降低。请注意,这种规则并不改变前向(可执行的)逻辑,仅仅是将其表示为不可理解的形式。当一个编写出色的模糊处理工具对可读的程序指令进行处理之后,可能产生的一个副作用是输出结果不仅使人看了不知所云,而且它还会使反编译器无从下手。尽管保留了前向(可执行的)逻辑,但反向语义却呈现出非确定性。其结果是,通过反向工程将指令翻译为“编程语言”(如 C# 或 VB)的任何尝试都很可能失败,因为翻译结果含混不清。深度模糊处理能产生无数种可能的反编译结果,其中的一些如果进行重新编译,则可能会产生错误的逻辑。反编译器只是一种计算机器,无法知道哪种可能的结果经过重新编译后在语义上是有效的。人类编写和使用反编译器是为了自动执行人类难以胜任的反编译算法。所以,可以这样说,如果连反编译器都对模糊处理程序奈何不得,能力更逊一筹的人类自然就更加束手无策了。
------------------------
严重口误,谢谢 cheng_feng001
模糊处理 (obfuscation) 意在引起混淆。随着混淆的加重,人脑进行多方面智力思维的能力逐渐降低。请注意,这种规则并不改变前向(可执行的)逻辑,仅仅是将其表示为不可理解的形式。当一个编写出色的模糊处理工具对可读的程序指令进行处理之后,可能产生的一个副作用是输出结果不仅使人看了不知所云,而且它还会使反编译器无从下手。尽管保留了前向(可执行的)逻辑,但反向语义却呈现出非确定性。其结果是,通过反向工程将指令翻译为“编程语言”(如 C# 或 VB)的任何尝试都很可能失败,因为翻译结果含混不清。深度模糊处理能产生无数种可能的反编译结果,其中的一些如果进行重新编译,则可能会产生错误的逻辑。反编译器只是一种计算机器,无法知道哪种可能的结果经过重新编译后在语义上是有效的。人类编写和使用反编译器是为了自动执行人类难以胜任的反编译算法。所以,可以这样说,如果连反编译器都对模糊处理程序奈何不得,能力更逊一筹的人类自然就更加束手无策了。
------------------------
严重口误,谢谢 cheng_feng001
#6
请问各位,那个 关于MaxtoCode 3.21 版本 加密的效果如何,
谢谢.
#7
转贴自 ksj ID:coolksj
依据他的分析,这个vs2005自带的东西,其不了太大的作用.
转贴如下:
-----------------------------
NET 源代码的安全性(源代码工具真正比拼)
今天被屠宰的对象就是 我们公司使用vb.net开发的一套管理系统。名字就不说了,此系统主程序约3M,其*有约 3000个方法,事件,等等。是一个中大型的程序,源代码约有 5万行左右(去掉一些自动生成的代码计算后),其中有底层硬件操作类,也有水晶报表操作,数据库操作。我们最关心的是其中的一块,注册类,以及一些核心代码。而我们演示的时候将会把注册代码拿出来演示(当然,不是原来的注册代码。。。那个拿出去,BOSS要杀我的)
而代码保护工具的主角是:
1. Dotfuscator Community Edition //微软推荐的东东,我个人认为非常烂
2. XeonCode //最近最好的混淆器,有可取点.它号称安全,我们今
//天来看看是不是真的安全
3. MaxtoCode //一个不同于混淆的.NET源码工具 MaxtoCode
//目前普及版只支持 WindowsApplication的加密
//以后开放 WEB APPlication and Class Library
我们的反编译目标分为二种:
1. C#语言
2. MSIL语言
使用的全是市场上流通的免费反编译工具,我知道收费的反编译工具还会自动还源混淆.收费的我也没有条件去测试
好,开始测试:
我们分别使用上面三样对代码进行混淆或加密。
完毕,测试程序所有功能:
1. Dotfuscator Community Edition 我最不喜欢的混淆器,由于是1.2免费版,所以必须混淆所有模块,导致部分功能不能使用。但我们不关心那些,我们一会将展现被混淆的注册代码(因为类和方法都被混淆,所以必须要花点时间)
2. XeonCode 一个相对强大的混淆工具,我一直认为他与某著名的反编译工具捆绑,导至其它工具能反编译的代码而它不能反编译。我们把它的强度开到最大,勾上所有能勾的选项。(它混淆的Windows Application可以正常运行)
3. MaxtoCode 这是一个加密器,可以与XeonCode叠加使用,并且在2.0版中,将会加入自混淆功能,成为混淆加密一体化的工具。(它混淆的 Windows Applicaton 可以正常运行)
我们最关心的是混淆或加密的结果。OK,请不要急,让我们先看看源代码,再比较一下反编译后的代码。
Private Function Encrypt(ByVal inStr As String) As String
Dim key As String = "a#2151336fdaghksfges"
Dim out As String
Dim j, i, s As Integer
i = inStr.Length
s = 0
For j = 0 To i - 1
out = out + inStr.Substring(j, 1) + key.Substring(s, 1)
s = s + 1
If s >= 20 Then s = 0
Next
Return out
End Function
Private Function Register(ByVal instr As String) As String
Dim pRsa As New System.Security.Cryptography.RSACryptoServiceProvider
Dim en As New System.Text.ASCIIEncoding
Return en.GetString(pRsa.Encrypt(en.GetBytes(Encrypt(instr)), False))
'Dim a As String
'a = Encrypt(instr)
'Dim b() As Byte
'Dim c() As Byte
'b = en.GetBytes(a)
'c = pRsa.Encrypt(b, False)
'Return en.GetString(c)
这里怕大家看不清楚,特别加了展开的代码
End Function
源代码很清楚,即是对字符串进行插入,然后使用 RSA 进行加密(这里省去了RSA的KEY)
好,那么我们首先来看看使用上面三种工具混淆后的C#代码
1. Dotfuscator Community Edition
private string b(string A_0){ string text3; string text2 = "a#2151336fdaghksfges"; int num1 = A_0.Length; int num3 = 0; int num4 = num1 - 1; for (int num2 = 0; num2 <= num4; num2++) { text3 = text3 + A_0.Substring(num2, 1) + text2.Substring(num3, 1); num3++; if (num3 >= 20) { num3 = 0; } } return text3;}
private string a(string A_0){ RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(); ASCIIEncoding encoding1 = new ASCIIEncoding(); return encoding1.GetString(provider1.Encrypt(encoding1.GetBytes(this.b(A_0)), false));}
评价:跟原代码一模一样,只是混淆了类和方法名称,代码中根本未进行混淆,由于是免费版,也只能提供这么多功能.毫无意义
2. XeonCode
private string x246b032720dd4c0d(string x96c91b85a03f00b0) { string str2; string str3; int k; int j; str2 = String.Intern(x1110bdd110cdcea4._d574bb1a8f3e9cbc("\uec3b\uf2fa\ufa06\u0102\u0803\u0efc\u15fb\u1cf8\u23f8\u2b25\u3220\u391a\u401d\u471b\u4e1b\u5520\u5c10\u630e\u6a09\u7114", 281144282)); int i1 = x96c91b85a03f00b0.Length; k = 0; i2 = i1 - 1; j = 0; goto IL_003c; VariableExp: k ConstantExp: 20 IL_0029: blt.s IL_0038 //自动的跳转混合 k = 0; goto IL_0038; //花指令 ConstantExp: 1 IL_0031: add.ovf IL_0032: stloc.s 5 VariableExp: k int j; int i2; IL_0038: j++; if (j > i2) { return str3; } str3 = String.Concat(str3, x96c91b85a03f00b0.Substring(j, 1), str2.Substring(k, 1)); }
private string x2a0cb95ab84ba877(string x5b3e4cba383dedd9){ RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(); ASCIIEncoding encoding1 = new ASCIIEncoding(); return encoding1.GetString(provider1.Encrypt(encoding1.GetBytes(this.x246b032720dd4c0d(x5b3e4cba383dedd9)), false));} 评价:功能强大许多,对于较长的代码会加入花指令进行混淆,从而达到混淆反编译器的目地. 这种混淆已经是XeonCode的最大混淆较果,虽然有达到混淆反编译的较果,但耐心仔细的看,并结合IL 代码一起阅读,想得到其其算法是一件很容易的事情,最重要的是, 有某些反编译器竟然可以去掉花指令,从而达反混淆的较果. 所以使用它来保护你的知识版权是不是还不够强大呢?
3. MaxtoCode
private string Encrypt(string inStr){} private string Register(string instr){} 评价:代码呢????代码已经不见了……不过这就是MaxtoCode的功效,它是加密,不是混淆,你看不到代码了, 你完全无法入手去分析,那怕一点珠丝马迹都没有.您还可以结合XeonCode一起使用, 达到双重的保护(因为现版本的MaxtoCode不提供混淆功能,您能清楚的看到类及方法的正确名称) 好,刚刚展现的是反编译出来的C#代码,那么,我们再深入一点,真接反汇编为MSIL代码看看能达到什么较果待继。。。
依据他的分析,这个vs2005自带的东西,其不了太大的作用.
转贴如下:
-----------------------------
NET 源代码的安全性(源代码工具真正比拼)
今天被屠宰的对象就是 我们公司使用vb.net开发的一套管理系统。名字就不说了,此系统主程序约3M,其*有约 3000个方法,事件,等等。是一个中大型的程序,源代码约有 5万行左右(去掉一些自动生成的代码计算后),其中有底层硬件操作类,也有水晶报表操作,数据库操作。我们最关心的是其中的一块,注册类,以及一些核心代码。而我们演示的时候将会把注册代码拿出来演示(当然,不是原来的注册代码。。。那个拿出去,BOSS要杀我的)
而代码保护工具的主角是:
1. Dotfuscator Community Edition //微软推荐的东东,我个人认为非常烂
2. XeonCode //最近最好的混淆器,有可取点.它号称安全,我们今
//天来看看是不是真的安全
3. MaxtoCode //一个不同于混淆的.NET源码工具 MaxtoCode
//目前普及版只支持 WindowsApplication的加密
//以后开放 WEB APPlication and Class Library
我们的反编译目标分为二种:
1. C#语言
2. MSIL语言
使用的全是市场上流通的免费反编译工具,我知道收费的反编译工具还会自动还源混淆.收费的我也没有条件去测试
好,开始测试:
我们分别使用上面三样对代码进行混淆或加密。
完毕,测试程序所有功能:
1. Dotfuscator Community Edition 我最不喜欢的混淆器,由于是1.2免费版,所以必须混淆所有模块,导致部分功能不能使用。但我们不关心那些,我们一会将展现被混淆的注册代码(因为类和方法都被混淆,所以必须要花点时间)
2. XeonCode 一个相对强大的混淆工具,我一直认为他与某著名的反编译工具捆绑,导至其它工具能反编译的代码而它不能反编译。我们把它的强度开到最大,勾上所有能勾的选项。(它混淆的Windows Application可以正常运行)
3. MaxtoCode 这是一个加密器,可以与XeonCode叠加使用,并且在2.0版中,将会加入自混淆功能,成为混淆加密一体化的工具。(它混淆的 Windows Applicaton 可以正常运行)
我们最关心的是混淆或加密的结果。OK,请不要急,让我们先看看源代码,再比较一下反编译后的代码。
Private Function Encrypt(ByVal inStr As String) As String
Dim key As String = "a#2151336fdaghksfges"
Dim out As String
Dim j, i, s As Integer
i = inStr.Length
s = 0
For j = 0 To i - 1
out = out + inStr.Substring(j, 1) + key.Substring(s, 1)
s = s + 1
If s >= 20 Then s = 0
Next
Return out
End Function
Private Function Register(ByVal instr As String) As String
Dim pRsa As New System.Security.Cryptography.RSACryptoServiceProvider
Dim en As New System.Text.ASCIIEncoding
Return en.GetString(pRsa.Encrypt(en.GetBytes(Encrypt(instr)), False))
'Dim a As String
'a = Encrypt(instr)
'Dim b() As Byte
'Dim c() As Byte
'b = en.GetBytes(a)
'c = pRsa.Encrypt(b, False)
'Return en.GetString(c)
这里怕大家看不清楚,特别加了展开的代码
End Function
源代码很清楚,即是对字符串进行插入,然后使用 RSA 进行加密(这里省去了RSA的KEY)
好,那么我们首先来看看使用上面三种工具混淆后的C#代码
1. Dotfuscator Community Edition
private string b(string A_0){ string text3; string text2 = "a#2151336fdaghksfges"; int num1 = A_0.Length; int num3 = 0; int num4 = num1 - 1; for (int num2 = 0; num2 <= num4; num2++) { text3 = text3 + A_0.Substring(num2, 1) + text2.Substring(num3, 1); num3++; if (num3 >= 20) { num3 = 0; } } return text3;}
private string a(string A_0){ RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(); ASCIIEncoding encoding1 = new ASCIIEncoding(); return encoding1.GetString(provider1.Encrypt(encoding1.GetBytes(this.b(A_0)), false));}
评价:跟原代码一模一样,只是混淆了类和方法名称,代码中根本未进行混淆,由于是免费版,也只能提供这么多功能.毫无意义
2. XeonCode
private string x246b032720dd4c0d(string x96c91b85a03f00b0) { string str2; string str3; int k; int j; str2 = String.Intern(x1110bdd110cdcea4._d574bb1a8f3e9cbc("\uec3b\uf2fa\ufa06\u0102\u0803\u0efc\u15fb\u1cf8\u23f8\u2b25\u3220\u391a\u401d\u471b\u4e1b\u5520\u5c10\u630e\u6a09\u7114", 281144282)); int i1 = x96c91b85a03f00b0.Length; k = 0; i2 = i1 - 1; j = 0; goto IL_003c; VariableExp: k ConstantExp: 20 IL_0029: blt.s IL_0038 //自动的跳转混合 k = 0; goto IL_0038; //花指令 ConstantExp: 1 IL_0031: add.ovf IL_0032: stloc.s 5 VariableExp: k int j; int i2; IL_0038: j++; if (j > i2) { return str3; } str3 = String.Concat(str3, x96c91b85a03f00b0.Substring(j, 1), str2.Substring(k, 1)); }
private string x2a0cb95ab84ba877(string x5b3e4cba383dedd9){ RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(); ASCIIEncoding encoding1 = new ASCIIEncoding(); return encoding1.GetString(provider1.Encrypt(encoding1.GetBytes(this.x246b032720dd4c0d(x5b3e4cba383dedd9)), false));} 评价:功能强大许多,对于较长的代码会加入花指令进行混淆,从而达到混淆反编译器的目地. 这种混淆已经是XeonCode的最大混淆较果,虽然有达到混淆反编译的较果,但耐心仔细的看,并结合IL 代码一起阅读,想得到其其算法是一件很容易的事情,最重要的是, 有某些反编译器竟然可以去掉花指令,从而达反混淆的较果. 所以使用它来保护你的知识版权是不是还不够强大呢?
3. MaxtoCode
private string Encrypt(string inStr){} private string Register(string instr){} 评价:代码呢????代码已经不见了……不过这就是MaxtoCode的功效,它是加密,不是混淆,你看不到代码了, 你完全无法入手去分析,那怕一点珠丝马迹都没有.您还可以结合XeonCode一起使用, 达到双重的保护(因为现版本的MaxtoCode不提供混淆功能,您能清楚的看到类及方法的正确名称) 好,刚刚展现的是反编译出来的C#代码,那么,我们再深入一点,真接反汇编为MSIL代码看看能达到什么较果待继。。。
#8
学习
#9
转贴原文地址
http://blog.csdn.net/coolksj/archive/2005/04/14/347004.aspx
http://blog.csdn.net/coolksj/archive/2005/04/14/347004.aspx
#10
7楼有打广告的嫌疑,我用的是.net reactor,版本好像是2.66,免费的,功能还可以。后来公司买了个maxtocode,费用500,功能更强,500块也不贵,楼主考虑下。
#11
mark
#12
7楼有打广告的嫌疑
---------------------------------
不是广告,这个对比很有点意思,
vs2005自带的更多是对 对象名称,变量名称等进行转换,
而 XeonCode 功能更强,但是也有工具专门针对他的.
maxtocode 是隐藏代码, 据说maxtocode 的以后版本 混淆代码+隐藏代码
值得期待
依据网上其他的观点 ,先用XeonCode混淆代码,再用maxtocode隐藏代码是非常好的方案.
---------------------------------
不是广告,这个对比很有点意思,
vs2005自带的更多是对 对象名称,变量名称等进行转换,
而 XeonCode 功能更强,但是也有工具专门针对他的.
maxtocode 是隐藏代码, 据说maxtocode 的以后版本 混淆代码+隐藏代码
值得期待
依据网上其他的观点 ,先用XeonCode混淆代码,再用maxtocode隐藏代码是非常好的方案.
#13
曾经听说过,见过,没用过.
#14
我用的是Vs2005自带的dotfuscator,可以将名字混淆,混淆后再反编译基本上很难读了
#15
mark
#16
混淆,加壳。。。防盗版??哈哈。。。
#17
帮帮顶吧。
#18
帮顶了
#19
up