2012-04-19 19 views
-1

私は人がそれを逆コンパイルできないように私が作っている私のVB.NETアプリケーションを暗号化できるようにファイルクリッピングツールを作っています。私はC#でこれを作ったとVB.NETにを転送しています、すべてがC#で罰金働いていたが、私はVB.NETで再書かれたコードを持っていたら、私は私のRC4暗号化方式の内、このエラーが出る:VB.NET大きな整数の扱い

'Arithmetic operation resulted in an overflow.' 

エラーがここで発生している:

Dim t As Int64 = (s(i) + s(j)) Mod 256 

これは、C#で上記と同じコードです:

int t = (s[i] + s[j]) % 256; 

は、それがerroringとその計算を行うためにとにかくはありますか?そして、なぜC#では動作しますが、VB.NETでは動作しませんか? .NET 4.0では

+0

「.NET」と言うとき、実際には「VB.NET」を意味しますか? – Jason

+0

@Jasonはい、申し訳ありません。 –

+0

おそらくC#のバージョンに同じ問題がありました。ちょうど 'checked'でコンパイルされていないか、' unchecked'コードブロックがありました。 C#も投稿できますか? – vcsjones

答えて

1

のBigIntegerと呼ばれる新しいタイプがあります:私はあなたが本当にしたいソリューションは、誰かが、彼らはそれを読むことができる習慣逆コンパイルしてもそう、あなたのコードを難読化することだと思いますがhttp://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

は:Visual Studioの> [ツール]メニュー> [Dotfuscator

あなたは完全にあなたがあなたの高度なVB.NETプロジェクトのコンパイルオプション(プロジェクトのプロパティを確認してくださいRemotesoft's Salamander

+1

BigIntegerを使用しようとしましたが、動作しませんでした。 –

+0

同じエラーで失敗しましたか?もう1つのことは、実行しているアプリケーションを停止するあなたのexe - Wontの(データを)暗号化する方法です?私が意味するのは、MSPaintをメモ帳で開き、ランダム化/暗号化してEXEを保存する場合です。実行しないでください。 –

+0

エラーは 'BigInteger型の値をIntegerに変換できません' –

3

ような何かを支払う必要があるとして、あなたのコードを保護したい場合は - >コンパイル - >高度コンパイルオプション...)。あなたの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 

私はコードの両方のセットが完了し、オーバーフローのチェックをオフにした場合間違いなく。

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

関連する問題