📍 Call Flow Graphの偽装
🗣 研究概要
本稿では,ソフトウェアの不正解析に対抗する難読化手法について提案する.
今日では,プログラム内の何を隠すのかの目的により,多くの手法が提案され,さらにツールも提供されている.
その中で,本稿では,名前難読化に着目し,機械的なコールフローグラフ(CFG)の作成を妨げる手法について述べる.
キーアイデアとして,Java 7で導入されたinvokedynamic命令に着目する.
この命令を使うと,メソッドの呼び出しを java.lang.invoke.MethodHandles
オブジェクトを介して行うようになる.
MethodHandles
では,呼び出したいメソッドとそのメソッドに渡す引数を予め設定することができ,その設定はinvokedynamic
のオペランドでの指定よりも設定が優先される.
そのため,invokedynamic
命令のオペランドのみを見ると,本来呼び出されるメソッドとは異なるメソッドを呼び出すと誤認させられると期待できる.
提案手法を適用したクラスファイルを逆コンパイルしたところ,Procyon のみが成功し,jad, Krakatauの2つのツールはクラッシュした.
また,逆コンパイル結果を被験者9名が解析したところ,8名が誤った解析を行った.
(福田 收真, 玉田 春昭, ‘‘メソッド呼び出し関係隠蔽のための引数順序の入れ替えによる難読化’’, 2014年暗号と情報セキュリティシンポジウム予稿集 (SCIS2014), 2D2-3, January, 2014. 概要)