難読化でいくつかの研究を行ってきましたが、コードの難読化がいかに効果的な最適化であるのか不思議でした。C++コードの難読化での最適化の使用
コードを最適化すると、コードをリバースエンジニアリングするのに役立つアセンブリからオブジェクトが削除されますか?
さらに一般的に、アセンブリの理解をより困難にするためにコードの最適化は何ですか?一般的な答えは問題ありません。もしあれば、2つの間の相関関係を理解したいだけです。
編集:これは、顧客のためではない、これは娯楽の難読化と好奇心
難読化でいくつかの研究を行ってきましたが、コードの難読化がいかに効果的な最適化であるのか不思議でした。C++コードの難読化での最適化の使用
コードを最適化すると、コードをリバースエンジニアリングするのに役立つアセンブリからオブジェクトが削除されますか?
さらに一般的に、アセンブリの理解をより困難にするためにコードの最適化は何ですか?一般的な答えは問題ありません。もしあれば、2つの間の相関関係を理解したいだけです。
編集:これは、顧客のためではない、これは娯楽の難読化と好奇心
バイナリの実行可能ファイルまたはライブラリを顧客に提供する際に、C++コードの難読化にはほとんど意味がありません。
難読化は、通常、リバースエンジニアリングを妨げるために、インタープリター言語で使用されます。その後、元のコードを読み込み可能/保守可能にするために、これをソフトウェアで行います。
パフォーマンスに影響を与えます。難読化は、通常、変数/機能に無作為かつ無意味な名前を与え、空白を取り除く。これは、Cコンパイルのバイナリには影響しません。したがって、全くの違いはありません。
コードの難読化のためでは異なるものを意味することができます。通常、コードを読みにくくすることを困難にするトリックを指します。
特に最適化に関する難読化の結果はありません。コードをもっと読みやすく、より効率的に実行することができるような、より簡潔なコードを考えているかもしれません。しかし、それは今日のコンパイラでは一般的ではなく、難読化とはまったく関係がありません。
もしあなたがソースを十分に難読化すれば、あなたのコードはコンパイラが最適化した時点で読みやすくなります。 – user4581301
フラグの使用は、アセンブリを難しくするために特別なことは何もしませんか?私がデバッグを見たとき、それはちょっと変わったように見えました。イムは、それが私が思ったよりも大きな違いをもたらさなかったことを驚いていました! – Semaphore
@ JayM。コンパイラは、ソースコードである難解で難解な混乱を取り、[構文木](https://en.wikipedia.org/wiki/Abstract_syntax_tree)に解析します。ツリーを作成すると、チャフをフィルタリングしたり、ノードをシフトしたり、ツリー上で無条件に順序を強制したりすることで、出力プログラムを高速に実行できるようになります。ツリーが機械命令に変換されると、もう少し狂ったことになるでしょうが、プロセッサとコンパイラに慣れ親しんだ人たちには、出力に明確なパターンが存在します。 – user4581301
非常に有効ではありません。すべての有能なアセンブリプログラマやリバースエンジニアは、誰もがリリースビルドのためにコンパイラを設定することを考慮して、最適化されたコードを読むことに熟練しています。より一般的には、難読化はあまり有効ではありません。あなたが望むことができる最高のものは、いいリバースエンジニアを遅らせるか、スクリプトの児童を止めることです。あなたのアプリケーションがクラッキングする価値がある場合、誰かがクラックするでしょう。クラッキングする価値があることに焦点を当てます。それはまた、誰かがそれを支払う価値があるでしょう。 –