📍 Javaプログラムの動的多様化
🗣 研究概要
本稿では、Java で作成されたソフトウェアを対象に、類似した命令列を持つメソッドの畳み込みを行う手法を提案する。
畳み込みとは、まず、類似した命令列を一つの命令列にまとめる。
そして、命令列間の差分は自己書き換えを用いて、実行時に適切な命令へと書き換える。
ソフトウェアの解析、改ざん(tamper)が困難にすることを目的とし、耐タンパ性を高める。
畳み込まれた命令列の一部を改ざんすると、畳み込まれた他方の命令列に影響を与え、元来の命令が行えなくなる。
従来 Java では動的にプログラムの振舞いを変更することは不可能であった。
ただし、Java 5 で導入された java.lang.instrument.Instrumentation
を用いることで動的にプログラムの内容を変更できるようになった。
この機構を用いることにより、畳み込まれた命令列を適切な命令列へ動的に復元することが可能となる。
提案手法の効果を確かめるため、配列の中から最大値を求める関数と最小値を求める2つのメソッドを畳み込み、畳み込む前と後での実行時間の変化を測定した。
その結果、170 倍程度遅くなることが確認できた。
(大堂 哲也, 玉田 春昭, ‘‘Javaを対象とした畳込み手法による耐タンパ化の試み’’, 2013年暗号と情報セキュリティシンポジウム予稿集 (SCIS2013), 2C4-3, January, 2013. 概要)