所以我正在创建一个文件crypter,以便我可以加密我正在制作的VB.NET应用程序,以便人们无法对其进行反编译。我在C#中做了这个并且正在将它转移到VB.NET,一切都在C#中运行良好但是一旦我在VB.NET中重写了代码,我在RC4加密方法中得到了这个错误:
'Arithmetic operation resulted in an overflow.'
此处发生错误:
Dim t As Int64 = (s(i) + s(j)) Mod 256
这与c#中的代码相同:
int t = (s[i] + s[j]) % 256;
是否有错误进行计算?为什么它在C#中工作而不是VB.NET?
答案 0 :(得分:3)
检查VB.NET项目中的高级编译选项(项目属性 - >编译 - >高级编译选项...)。与您的C#项目比较。 VB版本可能检查整数溢出,而C#版本不检查。
当我在VB中运行测试时,此代码会生成异常:
Dim x As Int16 = Int16.MaxValue
Dim y As Int16 = Int16.MaxValue
Dim t As Int64 = (x + y) Mod 256
但是这段代码没有:
Dim t As Int64 = (32767 + 32767) Mod 256
如果我关闭溢出检查,两组代码都会完整而没有错误。
检查等式中每个变量的值,以查看是否可能存在基于加法部分的溢出。加法运算结果的数据类型基于操作中涉及的变量/值的数据类型。这些值可能会导致派生数据类型的结果太大。
答案 1 :(得分:1)
在.Net 4.0中有一种名为BigInteger的新类型:http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx
虽然我认为您真正想要的解决方案是对您的代码进行模糊处理,因此即使有人反编译它们也无法读取它:Visual Studio>工具菜单> Dotfuscator的
如果您想完全保护您的代码,您需要支付Remotesoft's Salamander
之类的费用