TOP > 国内特許検索 > 自己書換え処理追加プログラム、自己書換え処理追加装置及び自己書換え処理追加方法

自己書換え処理追加プログラム、自己書換え処理追加装置及び自己書換え処理追加方法

国内特許コード P07A010484
整理番号 P02-45
掲載日 2007年9月14日
出願番号 特願2002-355881
公開番号 特開2004-192068
登録番号 特許第3944069号
出願日 平成14年12月6日(2002.12.6)
公開日 平成16年7月8日(2004.7.8)
登録日 平成19年4月13日(2007.4.13)
発明者
  • 門田 暁人
  • 神崎 雄一郎
出願人
  • 国立大学法人 奈良先端科学技術大学院大学
発明の名称 自己書換え処理追加プログラム、自己書換え処理追加装置及び自己書換え処理追加方法
発明の概要

【課題】保護対象プログラムを解析及び改ざんが困難な自己書換えプログラムとする。
【解決手段】アセンブリプログラムを構成する複数の命令コードを偽の命令コードYで偽装するとともに、偽の命令コードYを元の正しい命令コードyに戻すルーチンXと、ルーチンXが戻した正しい命令コードyを再度偽の命令コードYで偽装するルーチンZとを生成し、生成したルーチンX及びZをアセンブリプログラム上の所定の位置に書き込み、自己書換えプログラムを生成する。
【選択図】 図8

従来技術、競合技術の概要
従来より、解析及び改ざんの困難なプログラムを作成する技術がいくつか提案されており、それらの技術は「プログラムの難読化」、「プログラムの暗号化」及び「プログラムの断片化」の3つに大別される。いずれの方法もプログラムの解析及び改ざんに要するコスト(労力、時間)を増大させる効果を有している。
【0003】
図9は、典型的なプログラムの難読化の仕組みを示した図である。プログラムの難読化は、与えられたプログラムを複雑化して読みにくいプログラムに変換することである。開発された元のプログラムA1は、難読化装置A2によって所定の難読化処理が施され、難読化されたプログラムA3として出力される。難読化されたプログラムA3は、元のプログラムA1の表現や計算手順を複雑化することにより得られ、人間にとって解析が困難となっている。そのため、難読化されたプログラムA3が配布された使用者(ユーザ)や第三者は、プログラムを解析することが困難となり、プログラムが解析される危険性を減らすことができる。この難読化されたプログラムA3は、元のプログラムA1と同様、計算機上でそのまま実行することができる。
【0004】
プログラムの難読化の具体的な方式としては、プログラムの制御構造を複雑にする方式(非特許文献1~3)、複雑な処理を行う命令コードを複数の単純な処理を行う命令コードに置き換える方式(非特許文献4、5)、実行結果に影響を与えない命令コードを挿入する方式(非特許文献6、7)、データ構造を変形する方式(非特許文献8)、プログラム中の変数名や手続き名を変換する方式(特許文献1)、配列やポインタの参照、代入を利用してプログラムを複雑化する方式(非特許文献9、10)などが存在する。
【0005】
図10は、典型的なプログラムの暗号化の仕組みを示した図である。プログラムの暗号化は、プログラム全体又は一部を暗号化することによって、解析を困難にする技術である。開発された元のプログラムB1は、暗号化装置B2によって、その全体またはその一部に対して所定の暗号化処理が施され、暗号化されたプログラムB3として出力される。暗号化されたプログラムB3は、暗号化された命令コードB31及び暗号化された命令コードB31を復号するためのモジュールB32から構成されている。
【0006】
暗号化された命令コードB31は、人間が読んでもその内容を理解することができない。また、暗号化された命令コードB31は、そのままの状態では、計算機によって実行することができない。そのため、プログラムの実行前、又は実行中に必ず復号(暗号の逆変換)しなければならない。したがって、暗号化された命令コードB31を復号するためのモジュールB32が必要となる。このモジュールB32は、暗号化されたプログラムB3に追加する、又はハードウェアにより復号処理を行う場合は、予めハードウェアにモジュールB32を追加しておく必要がある。プログラムの暗号化の具体的な方式は、非特許文献11、12、特許文献2~5により提案されている。
【0007】
図11は、典型的なプログラムの断片化の仕組みを示した図である。プログラムの断片化は、図11に示すように、開発された元のプログラムC1は、断片化装置C2によって、所定の処理が施され、断片化されたプログラムC3として出力される。断片化されたプログラムC3は、分割された多数のプログラム断片C31及びそれらの実行を制御するモジュールC32から構成されている。人間は、個々プログラム断片C31自体を理解することができるが、これらは断片化されているため、プログラム全体の動作を理解することができない。そのため、プログラムの解析が困難となる。なお、プログラムの断片化は、上記プログラムの難読化又は暗号化と併用される場合もある。断片化の具体的な方式は、非特許文献13、14、特許文献6~8などにおいて提案されている。
【0008】
【非特許文献1】
門田暁人、高田義弘、鳥居宏次、”プログラムの難読化の提案”、情報処理学会第51回全国大会講演論文集、5G-7、pp.4-263-4-264、1995.
【非特許文献2】
門田暁人、高田義弘、鳥居宏次、”ループを含むプログラムを難読化する方法の提案”、電子情報通信学会論文誌、D-1、Vol.J80-D-I、No7、pp644-652、July 1997.
【非特許文献3】
FritzHohl,"Time limited blackbox security:Protecting mobile agents from malicious hosts",In G.Vigna ed.Mobile Agents Security,Lecture Notes in Computer Science,Vol1419,pp.92-113,Springer-Verlag,1998.
【非特許文献4】
村山隆徳、満保雅浩、岡本栄司、植松友彦、”ソフトウェアの難読化について”、電子情報通信学会技術研究報告、ISEC95-25、Nov.1995.
【非特許文献5】
M.mambo,T.Murayama,and E.Okamoto,"A tentative approach to constructing tampei-resistant software",In Proc.New Security Paradigm Workshop,cumbia,UK,1997.
【非特許文献6】
C.Collberg,C.Thomborson,and D Low,"A taxonomy of obfuscating transformations",Technical Report of Dept.of Computer Science,U.of Auckland,No.148,NewZealand,1997.
【非特許文献7】
C.Collberg,C.Thomborson,and D.Low,"Manufacturing Cheap,Resilient,and Stealthy Opaque Constructs",ACM AIGPLAN-SIGACT Symposium of Dept.of Computer Languages(POPL98),San Diego,California,1998.
【非特許文献8】
C.Collberg,C.Thomborson,and D Low,"Breaking Abstractons and Unstructuring Data Structures",IEEE International Conference on Computer Languages(ICCL'98),Chicago,IL,May 1998
【非特許文献9】
C.Wang,J.Hill,J.Knight,and J.Davidson,"Software tamper resistance :Obfuscating static analysis of programs",Technical Report SC-2000-12,Department of Computer Science,University of Virginia,Dec.2000
【非特許文献10】
Toshio Ogiso,Yusuke Sakabe,Masakazu Soshi,and Atsuko Miyaji,"Software tamper resistance based on the difficulty of interprocedural analysis",In Proc.International Workshop on Information Security Application(WISA2002),Lecture Notes in Computer Science,Springer-Verlag,2002
【非特許文献11】
D.J.Albert and S.P.Morse,"Combating software piracy by encryption and key manegement",Computer,April 1982
【非特許文献12】
石間宏之、斎藤和夫、加盟光久、申吉浩、”ソフトウェアの耐タンパー化技術”、富士ゼロックステクニカルレポート No.13,pp.20-28,2000.
【非特許文献13】
David Aucsmith,"Tamper Resistant Software:An Implementation",In R.J.Anderson ed. Information Hiding Workshop,Lecture Notes in Computer Science,Vol.1174,pp.317-333,1996
【非特許文献14】
鴨志田昭輝、松本勉、井上信吾、”耐タンパーソフトウェアの構成手法に関する考察”、信学技報、ISEC97-59,pp.69-78,1997.
【特許文献1】
United States Patent 6,102,966
【特許文献2】
United States Patent 4,278,837
【特許文献3】
United States Patent 4,847,902
【特許文献4】
United States Patent 5,224,160
【特許文献5】
United States Patent 6,006,328
【特許文献6】
United States Patent 5,892,899
【特許文献7】
United States Patent 6,178,509
【特許文献8】
United States Patent 6,205,550
産業上の利用分野
本発明は、解析及び改ざんが困難なプログラムを作成する技術に関する。
特許請求の範囲 【請求項1】 保護対象プログラムを構成する複数の命令コードのうちいずれか1カ所の命令コードを決定する命令コード決定手段、
決定された命令コードに対応する、当該命令コードのサイズ以下のサイズである偽の命令コードを決定し、決定した偽の命令コードで前記命令コードを偽装する命令コード偽装手段、
前記偽の命令コードを元の正しい命令コードに戻す第1のルーチンと当該第1のルーチンによって戻された正しい命令コードを当該命令コードに対応する偽の命令コードで再度偽装する第2のルーチンとを生成するルーチン生成手段、
前記第1及び第2のルーチンを前記保護対象プログラムの所定の位置に追加することにより自己書換えプログラムを生成する自己書換えプログラム生成手段としてコンピュータを機能させ、
前記自己書換えプログラム生成手段は、前記保護対象プログラムの開始点から前記偽の命令コードへ至るまでのフロー上の位置であって、かつ前記第2のルーチンから前記偽の命令コードへ至るまでのフロー上の位置であり、かつ前記第2のルーチンから終了点へ至るまでのフロー上の位置ではないという条件を満たす位置を示す複数の行の中からランダムに1つの行を前記第1のルーチンの追加位置として決定すると共に、前記偽の命令コードから終了点へ至るまでのフロー上の位置であって、かつ、前記第1のルーチンから前記偽の命令コードに至るまでのフロー上の位置ではないという条件を満たす位置を示す複数の行の中からランダムに1つの行を前記第2のルーチンの追加位置として決定することを特徴とする自己書換え処理追加プログラム。
【請求項2】 前記命令コード決定手段が前記命令コードを決定し、次いで前記命令コード偽装手段が前記命令コードに対応する偽の命令コードを決定し、次いで前記ルーチン生成手段が前記命令コードに対応する前記第1及び第2のルーチンを生成する処理を、複数回繰り返すことにより、複数の命令コードを決定し、前記複数の命令コードのそれぞれに対応する偽の命令コードを決定し、前記複数の命令コードのそれぞれに対応する前記第1及び第2のルーチンを生成することを特徴とする請求項1記載の自己書換え処理追加プログラム。
【請求項3】 前記命令コード偽装手段は、前記正しい命令コードの機械語表現サイズと同一サイズの機械語表現を有する命令コードを前記偽の命令コードとして決定することを特徴とする請求項1又は2記載の自己書換え処理追加プログラム。
【請求項4】 前記偽の命令コードは、前記正しい命令コードの機械語表現のコード列のうち1バイトを置き換えた機械語表現を有する命令コードであることを特徴とする請求項3記載の自己書換え処理追加プログラム。
【請求項5】 前記第1のルーチンは、前記正しい命令コードの機械語表現のコード列と前記偽の命令コードの機械語表現のコード列との相違する箇所のみを前記偽の命令コードに対して書き込み、
前記第2のルーチンは、前記正しい命令コードの機械語表現のコード列と前記偽の命令コードの機械語表現のコード列との相違する箇所のみを前記正しい命令コードに対して書き込むことを特徴とする請求項1~4のいずれか1項に記載の自己書換え処理追加プログラム。
【請求項6】 前記保護対象プログラムはアセンブリプログラムであり、
前記自己書換えプログラムをアセンブルして機械語プログラムを得るアセンブル手段をさらに備えることを特徴とする請求項1~5のいずれか1項に記載の自己書換え処理追加プログラム。
【請求項7】 機械語プログラムを逆アセンブルする逆アセンブル手段をさらに備えることを特徴とする請求項6記載の自己書換え処理追加プログラム。
【請求項8】 前記アセンブリプログラムは、所定の高級言語で記述されたソースプログラムをコンパイルして得られたものであり、
前記ソースプログラムをアセンブリプログラムにコンパイルして前記アセンブリプログラムを得るコンパイル手段をさらに備えることを特徴とする請求項6又は7記載の自己書換え処理追加プログラム。
【請求項9】 機械語プログラムを連係編集するリンク手段をさらに備えることを特徴とする請求項8記載の自己書換え処理追加プログラム。
【請求項10】 保護対象プログラムを構成する複数の命令コードのうちいずれか1カ所の命令コードを決定する命令コード決定手段と、
決定された命令コードに対応する、当該命令コードのサイズ以下のサイズである偽の命令コードを決定し、決定した偽の命令コードで前記命令コードを偽装する命令コード偽装手段と、
前記偽の命令コードを元の正しい命令コードに戻す第1のルーチンと当該第1のルーチンによって戻された正しい命令コードを当該命令コードに対応する偽の命令コードで再度偽装する第2のルーチンとを生成するルーチン生成手段と、
前記第1及び第2のルーチンを前記保護対象プログラムの所定の位置に追加することにより自己書換えプログラムを生成する自己書換えプログラム生成手段とを備え、
前記自己書換えプログラム生成手段は、前記保護対象プログラムの開始点から前記偽の命令コードへ至るまでのフロー上の位置であって、かつ前記第2のルーチンから前記偽の命令コードへ至るまでのフロー上の位置であり、かつ前記第2のルーチンから終了点へ至るまでのフロー上の位置ではないという条件を満たす位置を示す複数の行の中からランダムに1つの行を前記第1のルーチンの追加位置として決定すると共に、前記偽の命令コードから終了点へ至るまでのフロー上の位置であって、かつ、前記第1のルーチンから前記偽の命令コードに至るまでのフロー上の位置ではないという条件を満たす位置を示す複数の行の中からランダムに1つの行を前記第2のルーチンの追加位置として決定することを特徴とする自己書換え処理追加装置。
【請求項11】 命令コード決定手段が、保護対象プログラムを構成する複数の命令コードのうちいずれか1カ所の命令コードを決定するステップ、
命令コード偽装手段が、決定された命令コードに対応する、当該命令コードのサイズ以下のサイズである偽の命令コードを決定し、決定した偽の命令コードで前記命令コードを偽装するステップ、
ルーチン生成手段が、前記偽の命令コードを元の正しい命令コードに戻す第1のルーチンと当該第1のルーチンによって戻された正しい命令コードを当該命令コードに対応する偽の命令コードで再度偽装する第2のルーチンとを生成するステップ、
自己書換えプログラム生成手段が、前記第1及び第2のルーチンを前記保護対象プログラムの所定の位置に追加することにより自己書換えプログラムを生成するステップから構成され、
前記自己書換えプログラム生成手段は、前記保護対象プログラムの開始点から前記偽の命令コードへ至るまでのフロー上の位置であって、かつ前記第2のルーチンから前記偽の命令コードへ至るまでのフロー上の位置であり、かつ前記第2のルーチンから終了点へ至るまでのフロー上の位置ではないという条件を満たす位置を示す複数の行の中からランダムに1つの行を前記第1のルーチンの追加位置として決定すると共に、前記偽の命令コードから終了点へ至るまでのフロー上の位置であって、かつ、前記第1のルーチンから前記偽の命令コードに至るまでのフロー上の位置ではないという条件を満たす位置を示す複数の行の中からランダムに1つの行を前記第2のルーチンの追加位置として決定することを特徴とする自己書換え処理追加方法。
産業区分
  • その他情報処理
国際特許分類(IPC)
Fターム
画像

※ 画像をクリックすると拡大します。

JP2002355881thum.jpg
出願権利状態 権利存続中
ライセンスをご希望の方、特許の内容に興味を持たれた方は、下記「問合せ先」までお問い合わせください。


PAGE TOP

close
close
close
close
close
close
close