スタック トレースのデコード
難読化の持つ潜在的な欠点の 1 つは、名前が改変されることにより、難読化されたアプリケーションのトラブルシューティングが困難になる可能性があることです。PreEmptive Protection - DashO はこの欠点を解決するために統合ツールを提供しています。このツールを使用すると、出力割り当てファイルを基に、難読化されたスタック トレースから元のシンボルを復元できます。
たとえば、難読化処理済みのアプリケーションを顧客に発送し、顧客の 1 人からスタック トレースを受け取った場合、そのスタック トレースは次のようなものになるでしょう。
Exception in thread "main" a: cannot calculate at c.a(Unknown Source) at b.a(Unknown Source) at d.a(Unknown Source) at com.preemptive.Example.main(Unknown Source)
いくつかのデバッグ情報を保持できるということを覚えておいてください。行番号を削除しないことで、スタック トレースでそれらを見ることが可能になります。このツールとそのオプションにより、難読化されたプログラムをデバッグする能力を非常に高めることができます。
割り当てレポート ファイルを使用すれば、手動で元の名前を復元できますが、これは退屈で時間のかかる処理です。
スタック トレースの変換ツールは、出力割り当てファイルを指定し、スタック トレースをウィンドウに貼り付けて[Decode]ボタンを押すことにより、この処理を自動化します。デコードされたスタック トレースが[Translation Report]タブに表示されます。
難読化されたスタック トレースのうち、いくつかのメソッド名はあいまいになる可能性があります。オーバーロード誘導を使用した場合、スタック トレース内で名付けられたメソッドと一致する、難読化された名前のメソッドが同じクラス内に複数存在するかもしれません。このような場合は、可能性のある一致がすべて表示されます。
特定のクラスやメソッドを名前で検索したい場合は、[Decode Specific Element]タブをクリックします。変換したい特定の項目の難読化処理後の名前を入力できる画面が表示されます。
Lucidator
DashO では、スタック トレースのデコード用に Lucidator というスタンドアロン ツールも提供します。Lucidator は、スタック トレースのデコード用と同じ GUI を提供しますが、既存のサポート システムにデコード処理を統合するためのコマンド ライン ユーティリティとしても実行できます。
使用方法については、java -jar Lucidator.jar --help
を実行してください。