研究概要 |
今年度の研究では,Javaプログラムの難読化手法として,逆関数方式,及び,漸化式方式の2つを提案した.難読化の対象は,Javaのソースプログラム(.javaファイル)中のループを含む部分である.提案手法を用いることで,制御構造,データへのアクセス方法等の解析が困難になる.逆関数方式では,ある関数F(x)の計算結果を配列変数Y[x]を予め代入しておき,ループの中でY[Fの逆関数(x)]を利用することで,プログラムの仕様を保存したまま解析を困難にできる.この方式では,F(Fの逆関数(i))=iとなる性質を利用している.一方,漸化式方式では,X(n)=Y(X(n-1))という式に対して,その一般解X(n)=Z(n)を求めて処理を施す.例えば,Y(n)=a*n+bのとき,Z(n)=(1-a^n)/(1-a)*bとなる.ループの中でZ(n)を利用することで,プログラムの仕様を保存したまま解析を困難にできる.逆関数方式と漸化方式は併用が可能であるので,この例では,Zの逆関数Z'(n)=1/log(a)*log(1-(1-a)/b*n)(n≠0の場合),及び,Z'(n)=0(n=0の場合)を用いることで,プログラムの解析をさらに困難にできる. 今年度は,さらに,プログラムの解析の困難さを評価する方法についても提案を行った.プログラムの難読化手法の有用性を論じるためには,難読化の処理を施したプログラムが難読化前のプログラムと比べて,どのくらい解析が困難になったかを定量的に評価できることが望ましい.提案方式では,まず,プログラム中のトレース上のトークン数,参照数,代入数,比較数,演算数,分岐数,ループ数等をカウントし,それらを説明変数として解析の困難さを算出する.ここでの算出式は,多数の被験者が対象プログラムを解析するのにかかった時間を目的変数とし,説明変数との関係を重回帰分析やニューラルネット等により求める. 現在のところ,上記の提案手法を学術論文としてまとめ,専門誌等への投稿を準備している段階である.
|