-1

そのため、作成中の 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 では機能しないのはなぜですか?

4

2 に答える 2

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

オーバーフロー チェックをオフにすると、両方のコード セットがエラーなしで完了します。

式の各変数の値を調べて、加算部分に基づいてオーバーフローが発生していないかどうかを確認します。加算演算の結果のデータ型は、演算に含まれる変数/値のデータ型に基づきます。これらの値は、派生データ型に対して大きすぎる結果を生成している可能性があります。

于 2012-04-19T03:00:49.623 に答える
1

.Net 4.0 には、BigInteger と呼ばれる新しい型があります: http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

あなたが本当に望んでいる解決策はコードを難読化することだと思いますが、誰かが逆コンパイルしてもコードを読むことができないようにすることです: Visual Studio > Tools Menu > Dotfuscator

コードを完全に保護したい場合は、Remotesoft の Salamander のようなものにお金を払わなければなりません

于 2012-04-19T02:44:44.283 に答える