リリースコードを難読化することの利点は何ですか?


12

私が念頭に置いている具体的な例は、現在アルファ版のゲームであるMinecraftに関係していますが、これは一般的な質問であり、ある程度の会話が必要だと思います。

MinecraftはJavaで記述されており、スタックトレースは通常次のようになります(実際の例)。

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

明らかに、これらは開発者が作成するときに使用する実際のパッケージおよびメソッド名ではありません。彼はアルファ段階にあるので、特に誰かがバグ報告のためにそれを提供できる場合、開発者は自分のスタックトレースを理解できるようにする必要があるようです。現状では、ほとんど意味がありません。

より困難なバグ識別の欠点を克服するこのような彼のコードを難読化することにより、どのような利点を得ることができるでしょうか?


1
簡単に言えば、難読化コードのリバースエンジニアリングの経済性変えるだけで、それ以上のものはありません。
マークブース

回答:


22

Javaコードも難読化します。

利点は、リバースエンジニアリングが難しくなることです(誰かがコードベースを盗み、それをベースとして使用して同様の競合製品を作成するなどの心配がある場合)。

元のスタックトレースを取得できます。難読化されたスタックトレースの実行に使用できる特別な参照ファイルを作成する難読化ツールがあり、元のソーススタックトレースとともに出力されます。これらは難読化プロセス自体によって生成されるため、最初にコードを難読化するために使用した参照ファイルを手に入れない限り、元のスタックトレースを取得することはできません。

これには実際には欠点はありません。:)


3
興味深いことに、「スタックトレースの難読化解除」(難読化ツールを使用したことはありません)が付属していることは知りませんでした...なんてすてきなアイデア:
ディーンハーディング

1
私が今までに遭遇した唯一の欠点は、ときどき難読化ツール(この場合は.NETの1つ)が難読化して、ジッターがそれを読み取ることさえできなかった点です(違法な命令)。大規模な失敗。
vcsjones

@vcsjones:それは本当に難読化ではありません...-
configurator

3
  • 知的財産を保護します

ほとんどの難読化ツールは、コードを最適化し、不要なメタデータまたは使用されていないコードを削除し、圧縮、デッドコードの削除、重複の削除を行います。


そのような最適化のために難読化ツールを使用する必要がある場合、使用中のコンパイラは本当に怠laなソフトウェアでなければなりません。
フレネル

@phresnel:はい、難読化ツールはかなり良い仕事をすることができます

@phresnel:おそらく不完全ですが、くだらない

あなたが正しいです。再投稿させてください。
フレネル

1
私はあなたを信じないわけではありません。私がやります!しかし、これらすべての最適化は通常、最新のコンパイラーによっても実行されます。少なくとも、gccがそれらすべてを持っていることを知っています。したがって、私の意見は、難読化ツールが本当に大幅な高速化を実現する場合、コンパイラー(ベンダー)が十分に努力しなかったか、適切な最適化フラグが与えられなかったことです。
フレネル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.