Windows アプリ プロジェクトを EXE にコンパイルした後、クラス、メソッド、および変数名は MSIL に含まれますか?
- 難読化の場合- 名前が少なく、リバース エンジニアリングが難しくなります。
- そしてパフォーマンスのために-短い名前、より速いアクセス。
たとえば、メソッドが名前で呼び出される場合:
- 名前を短くして、名前付きルックアップのパフォーマンスを向上させます。
- 名前を暗号化して、逆コンパイルしにくくします。
Windows アプリ プロジェクトを EXE にコンパイルした後、クラス、メソッド、および変数名は MSIL に含まれますか?
たとえば、メソッドが名前で呼び出される場合:
はい、彼らはイリノイ州にいます-Reflectorを起動すると、それらが表示されます。それらがILに含まれていなければ、ライブラリとしてそれらに対して構築することはできません。(もちろん、.exeファイルはクラスライブラリであるかのように参照できます。)
ただし、これはすべてJITで一度解決されます。
将来コードを維持できるように、名前を読みやすくしてください。パフォーマンスの問題によって測定可能な違いが生じる可能性は低く、コードを難読化したい場合は、ソースコードレベル(コードを読む人)では実行しないでください。専用のコードで実行してください。難読化。
編集:含まれているものについては、Reflectorまたはildasmを起動して調べてみませんか?メモリからローカル変数名(ビルドするとpdbファイルにあります)が失われますが、それだけです。プライベートメソッド名とプライベート変数名はまだあります。
はい、彼らがやります。短い名前を使用してもパフォーマンスが大幅に向上するとは思いません。読みやすさの損失を克服する方法はありません。
ローカル変数はMSILに含まれていません。フィールド、メソッド、クラスなどがあります。変数はインデックスベースです。
メンバー名は、プライベートかパブリックかに関係なく、ILに含まれます。実際、すべてのコードも含まれています。Reflectorを使用すると、アプリケーションのすべてのソースコードを実際に読み取ることができます。残っているのはアプリのデバッグで、そのためのツールがあるかもしれないと思います。
多数のクライアントと競合他社が存在するパッケージ化されたアプリケーションを作成している場合は、コードを完全に難読化する必要があります(これ以上強調することはできません)。幸いなことに、利用可能な難読化ツールは多数あります。
これは私が.Netで持っている大きな不満です。MSはこれに多大な労力を費やしているので、プロの難読化ツールを開発(または取得)して、それをVSの一部にしてみませんか。Dotfuscatorは、コミュニティ向けのバージョンではなく、それをカットしません。
- 名前を短くして、名前付きルックアップのパフォーマンスを向上させます。
これはどのように違いを生むことができますか?VMが識別子をどのように検索するかはわかりませんが、文字列の直接比較検索を行っていないことは確かです。これは、それを行うための最悪の方法です。
- 名前を不可解に保ち、逆コンパイルしにくくします。
正直なところ、コードの難読化はそれほど役に立たないと思います。そこにいるほとんどの有能な開発者は、メソッド名のような識別子がまったく役に立たない場合でも、物事をすばやく理解するための「第六感」をすでに開発しています。なぜなら、維持または改善する必要のあるソースコードにはすでにこれらの問題があるためです(メソッド名について話している「DoAllStuff()」のように)。
とにかく、隠すことによるセキュリティは通常悪い考えです。
難読化が心配な場合は、.NETReactorをチェックしてください。私は8種類の難読化ツールをテストしましたが、Reactorは最も安価な商用のものであるだけでなく、2番目に優れていました(最も高価なもの、Dotfuscator Goldでした)。
[編集]
実際、今考えてみると、メソッド名を難読化するだけであれば、VS.NETに付属しているDotfuscatorCommunityEditionで問題なく動作するはずです。
追加されたと思いますが、関数名の検索方法により、名前の長さは何の影響もありません。難読化に関しては、基本的にあなたが言っていることを正確に実行するツール(Dotfuscatorなど)があると思います。