[学士論文] プログラム逆難読化に基づくプログラム理解支援

小林研B4の舟木さんが学士論文の発表を行いました.

論文題目:プログラム逆難読化に基づくプログラム理解支援
論文概要:

複数人での長期的な開発では,ソースコードが複雑になり,理解に要する人的労力の増大が主な原因で保守のコストが増大している.人間のプログラム理解は,制御構造のネストの深さや関連のあるコード片がまとまって記述されているかどうかといった,ソースコードの構造に大きく依存する.

ソースコードの構造を変化させる手法としてプログラム難読化という手法が提案されている.主にリバースエンジニアリングの防止や,マルウェアの悪意のある攻撃の隠匿といったプログラムの理解しやすさを損なうために用いられる技術である.その一方で,逆難読化,すなわち難読化されたプログラムを元に戻す技術もある.逆難読化は,隠匿化されたプログラムの振る舞いを発見しやすくすることが目的である.

本論文では,逆難読化とプログラムの理解性の向上が本質的に同じであることに着目し,従来と異なった観点から複雑なソースコードを理解しやすい形に修正する方法を提案した.提案手法では,制御フローグラフに対する変更として制御文の結合,ブロックの並び替えといった8 種類のプリミティブ操作を定義した.ソースコードから制御フローグラフを作成し,これを適用することでソースコードを修正する.提案手法を実現するツールをEclipse プラグインとして実装し,3 つのコード例で,提案したプリミティブ操作の組み合わせによって複雑な制御構造の改善が実現できることを確認した.