6

Windows アプリ プロジェクトを EXE にコンパイルした後、クラス、メソッド、および変数名は MSIL に含まれますか?

  • 難読化の場合- 名前が少なく、リバース エンジニアリングが難しくなります。
  • そしてパフォーマンスのために-短い名前、より速いアクセス。

たとえば、メソッドが名前で呼び出される場合:

  • 名前を短くして、名前付きルックアップのパフォーマンスを向上させます。
  • 名前を暗号化して、逆コンパイルしにくくします。
4

7 に答える 7

19

はい、彼らはイリノイ州にいます-Reflectorを起動すると、それらが表示されます。それらがILに含まれていなければ、ライブラリとしてそれらに対して構築することはできません。(もちろん、.exeファイルはクラスライブラリであるかのように参照できます。)

ただし、これはすべてJITで一度解決されます。

将来コードを維持できるように、名前を読みやすくしてください。パフォーマンスの問題によって測定可能違いが生じる可能性は低く、コードを難読化したい場合は、ソースコードレベル(コードを読む人)では実行しないでください。専用のコードで実行してください。難読化。

編集:含まれているものについては、Reflectorまたはildasmを起動して調べてみませんか?メモリからローカル変数名(ビルドするとpdbファイルにあります)が失われますが、それだけです。プライベートメソッド名とプライベート変数名はまだあります。

于 2009-01-05T14:50:46.103 に答える
3

はい、彼らがやります。短い名前を使用してもパフォーマンスが大幅に向上するとは思いません。読みやすさの損失を克服する方法はありません。

于 2009-01-05T14:48:34.563 に答える
1

ローカル変数はMSILに含まれていません。フィールド、メソッド、クラスなどがあります。変数はインデックスベースです。

于 2009-01-05T14:52:56.177 に答える
1

メンバー名は、プライベートかパブリックかに関係なく、ILに含まれます。実際、すべてのコードも含まれています。Reflectorを使用すると、アプリケーションのすべてのソースコードを実際に読み取ることができます。残っているのはアプリのデバッグで、そのためのツールがあるかもしれないと思います。

多数のクライアントと競合他社が存在するパッケージ化されたアプリケーションを作成している場合は、コードを完全に難読化する必要があります(これ以上強調することはできません)。幸いなことに、利用可能な難読化ツールは多数あります。

これは私が.Netで持っている大きな不満です。MSはこれに多大な労力を費やしているので、プロの難読化ツールを開発(または取得)して、それをVSの一部にしてみませんか。Dotfuscatorは、コミュニティ向けのバージョンではなく、それをカットしません。

于 2009-01-05T14:58:37.083 に答える
1
  • 名前を短くして、名前付きルックアップのパフォーマンスを向上させます。

これはどのように違いを生むことができますか?VMが識別子をどのように検索するかはわかりませんが、文字列の直接比較検索を行っていないことは確かです。これは、それを行うための最悪の方法です。

  • 名前を不可解に保ち、逆コンパイルしにくくします。

正直なところ、コードの難読化はそれほど役に立たないと思います。そこにいるほとんどの有能な開発者は、メソッド名のような識別子がまったく役に立たない場合でも、物事をすばやく理解するための「第六感」をすでに開発しています。なぜなら、維持または改善する必要のあるソースコードにはすでにこれらの問題があるためです(メソッド名について話している「DoAllStuff()」のように)。

とにかく、隠すことによるセキュリティは通常悪い考えです。

于 2009-01-05T14:59:17.863 に答える
1

難読化が心配な場合は、.NETReactorをチェックしてください。私は8種類の難読化ツールをテストしましたが、Reactorは最も安価な商用のものであるだけでなく、2番目に優れていました(最も高価なもの、Dotfuscator Goldでした)。

[編集]

実際、今考えてみると、メソッド名を難読化するだけであれば、VS.NETに付属しているDotfuscatorCommunityEditionで問題なく動作するはずです。

于 2009-01-05T14:59:28.957 に答える
0

追加されたと思いますが、関数名の検索方法により、名前の長さは何の影響もありません。難読化に関しては、基本的にあなたが言っていることを正確に実行するツール(Dotfuscatorなど)があると思います。

于 2009-01-05T14:55:19.727 に答える