ソフトウェア流用検出のためのバイナリプログラム分割圧縮法

上村 康輔 (1551035)


本研究では,小規模な流用でも簡易に検出できるプログラム分割圧縮法を提案する.オープンソースソフトウェア(OSS)は誰もが入手し利用できる反面,ソースコードが流用され,ライセンスが守られない危険性がある.特に,流用されたコードが商用ソフトウェア等に組み込まれた場合,入手可能となるのはバイナリプログラムのみである.この場合,リバースエンジニアリングによって流用を判別しなければならないが,プログラム解析のための高度な技術と時間を要する. 簡易な流用検出法の一つとしてプログラム圧縮を用いた方法があり,その評価尺度として複合圧縮度がある.これは対象ソフトウェア対を (1) 圧縮後に結合したものと,(2) 結合後に圧縮し,2つのサイズの差を算出するものである.流用が多ければ(2)の圧縮率は高まり,(1) と (2) のサイズの差が大きくなる.ただし,プログラムのサイズによって感度が変わる,規模の小さな流用の検出が難しいという問題があった. 提案法では,対象ソフトウェア対をそれぞれ固定長の小さなコードブロックに分割し,その全組み合わせで複合圧縮度を算出してその最大値であるConRate_maxによって流用を判別する.分割を行うことで,どのサイズのプログラムであっても一定サイズの流用を含まないブロックと流用を含むブロックに分けられ,流用部分を含まないブロックの組み合わせでは複合圧縮度の値が小さくなり,流用部分を含むブロックの組み合わせでは他の組み合わせと比べ複合圧縮度の値が大きくなる.これより,どのサイズのどの規模の流用であっても同じ感度で流用を判別できる.3種類のドメインから派生関係にあるソフトウェアを含むソフトウェア16件に対して流用検出を行った結果,従来方法では派生関係にないグループのConRate_maxの最大値が0.0261,派生関係にあるグループのConRate_maxの最小値が0.0237と正しく判別できなかった.一方で,提案手法では派生関係にないグループのConRate_maxの最大値が0.0754,派生関係にあるグループのConRate_maxの最小値が0.188と正しく流用を判別できた.