[論文レビュー] JConstHide: A Framework for Java Source Code Constant Hiding
JConstHide は、逆コンパイルによる逆アセンブリを防ぐために Java ソースコード内の整数定数を隠す新しいフレームワークである。このフレームワークは、ソースレベルで定数を変換し、変換された式を生成することで、ソースおよびバイトコードの二段階のオブスカリティを実現する。これにより、解析に対する耐性が著しく向上し、従来のツールがバイトコードのみをオブスカールするのに対し、ソースコードレベルのオブスカリティに欠けていた点を補完する。
Software obfuscation or obscuring a software is an approach to defeat the practice of reverse engineering a software for using its functionality illegally in the development of another software. Java applications are more amenable to reverse engineering and re-engineering attacks through methods such as decompilation because Java class files store the program in a semi complied form called byte codes. The existing obfuscation systems obfuscate the Java class files. Obfuscated source code produce obfuscated byte codes and hence two level obfuscation (source code and byte code level) of the program makes it more resilient to reverse engineering attacks . But source code obfuscation is much more difficult due to richer set of programming constructs and the scope of the different variables used in the program and only very little progress has been made on this front. We in this paper are proposing a framework named JConstHide for hiding constants, especially integers in the java source codes, to defeat reverse engineering through decompilation. To the best of our knowledge, no data hiding software are available for java source code constant hiding.
研究の動機と目的
- Java に対して、特に定数を隠すことを目的としたソースコードレベルのオブスカリティツールが不足しているという点を是正すること。
- マジックナンバーのような機密値を逆コンパイルされたコードから抽出するのが難しくなるように、脆弱性を低減すること。
- ソースおよびバイトコードの二重保護を実現する実用的なフレームワークを提供することにより、攻撃に対する耐性を向上させること。
- 機能に不可欠な場合が多く、逆コンパイル時に露出されやすい整数定数に焦点を当てる。
- プログラムの意味論を保持しつつ、ソースレベルで定数の値を隠蔽する手法を導入すること。
提案手法
- フレームワークは、オブスカリティの対象となる候補となる Java ソースコード内の整数定数を特定する。
- 選択された各定数は、算術演算および論理演算を用いた複雑な、意味的に同等の式に置き換えられる。
- 変換された式は実行時に元の定数値に評価されるが、ソースコード上では元の値が隠蔽されるように構築される。
- 変換はコンパイルの前段階であるソースコードの事前処理段階で実行され、標準の Java コンパイラとの互換性が保証される。
- フレームワークは、オブスカリティ強度を設定可能としており、特定の定数の隠蔽を任意に選択可能である。
- 変換後のソースコードは、オブスカールドバイトコードにコンパイルされ、二重保護が実現される。
実験結果
リサーチクエスチョン
- RQ1Java ソースコード内の整数定数は、逆コンパイル時に露出されないよう、効果的に隠蔽可能か?
- RQ2プログラムの振る舞いを変更せずに、定数をオブスカールド式に変換する手法は何か?
- RQ3逆アセンブリに対する耐性という観点から、ソースレベルのオブスカリティとバイトコードレベルのオブスカリティの比較的優位性は何か?
- RQ4ソースコードのオブスカリティが、プログラムの保守性およびパフォーマンスに与える影響は何か?
- RQ5Java アプリケーションに対して、ソースおよびバイトコードの二重保護を実現する実用的なフレームワークは存在するか?
主な発見
- JConstHide は、意味的に同等であるが、ソースコード上では元の値が隠蔽されたオブスカールド式に整数定数を効果的に変換した。
- フレームワークは、ソースおよびバイトコードの二重保護を実現する二段階のオブスカリティを可能にし、逆アセンブリに対する耐性を向上させた。
- このアプローチは Java コンパイラに対して透明であるため、オブスカールドコードが正しくコンパイルされ、実行可能であることを保証する。
- プログラムの機能が保持されたまま、逆コンパイルによる機密定数の抽出が著しく困難になる。
- 著者らの知る限り、これは Java のソースコードレベルでの定数隠蔽を目的とした最初のフレームワークである。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。