(57)【要約】【課題】安全性の高いプログラムを生成する。【解決手段】実施形態の生成装置は、プログラム取得部と、履歴取得部と、対象部分決定部と、モジュール生成部と、統合部とを備える。プログラム取得部は、プロセッサにより実行される第１プログラムを取得する。履歴取得部は、第１プログラムを実行するプロセッサに対してテストデータを与えた場合における、プロセッサによる第１プログラムに含まれる命令毎の実行頻度を示す履歴情報を取得する。対象部分決定部は、履歴情報に基づき、第１プログラムにおける実行頻度が基準値以下の命令を少なくとも含む対象部分を決定する。モジュール生成部は、第１プログラムにおける対象部分を実行するべき場合において予め定められた制限処理をプロセッサに実行させる制限モジュールを生成する。統合部は、第１プログラムと制限モジュールとを統合して、プロセッサにより実行される第２プログラムを生成する。【選択図】図３
2017167937.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサにより実行される第１プログラムを取得するプログラム取得部と、
前記第１プログラムを実行する前記プロセッサに対してテストデータを与えた場合における、前記プロセッサによる前記第１プログラムに含まれる命令毎の実行頻度を示す履歴情報を取得する履歴取得部と、
前記履歴情報に基づき、前記第１プログラムにおける実行頻度が基準値以下の命令を少なくとも含む対象部分を決定する対象部分決定部と、
前記第１プログラムにおける前記対象部分を実行するべき場合において予め定められた制限処理を前記プロセッサに実行させる制限モジュールを生成するモジュール生成部と、
前記第１プログラムと前記制限モジュールとを統合して、前記プロセッサにより実行される第２プログラムを生成する統合部と、
を備える生成装置。
【請求項２】
前記モジュール生成部は、前記対象部分の処理の実行に代えて予め定められた他の処理を前記プロセッサに実行させる前記制限モジュールを生成する
請求項１に記載の生成装置。
【請求項３】
前記モジュール生成部は、前記対象部分の処理の実行とともに予め定められた他の処理を前記プロセッサに実行させる前記制限モジュールを生成する
請求項１に記載の生成装置。
【請求項４】
前記第１プログラムを暗号化して暗号化プログラムを生成する暗号化部をさらに備え、
前記モジュール生成部は、前記暗号化プログラムにおける前記対象部分を実行するべき場合において予め定められた制限処理を前記プロセッサに実行させ、前記暗号化プログラムにおける前記対象部分以外を実行するべき場合において暗号化された命令の復号処理を前記プロセッサに実行させる前記制限モジュールを生成し、
前記統合部は、前記暗号化プログラムと前記制限モジュールとを統合して前記第２プログラムを生成する
請求項１から３の何れか１項に記載の生成装置。
【請求項５】
前記第１プログラムにおけるそれぞれのシンボルに対応する命令列の範囲を示すシンボル情報を抽出する情報抽出部をさらに備え、
前記対象部分決定部は、命令毎の実行頻度および前記シンボル情報に基づきシンボル毎の実行頻度を算出し、実行頻度が基準値以下のシンボルを少なくとも含む前記対象部分を決定する
請求項１から４の何れか１項に記載の生成装置。
【請求項６】
前記第１プログラムにおけるそれぞれのファイルに対応する命令列の範囲を示すファイル情報を抽出する情報抽出部をさらに備え、
前記対象部分決定部は、命令毎の実行頻度および前記ファイル情報に基づきファイル毎の実行頻度を算出し、実行頻度が基準値以下のファイルを少なくとも含む前記対象部分を決定する
請求項１から５の何れか１項に記載の生成装置。
【請求項７】
前記生成装置は、前記第２プログラムを生成した後に、前記プロセッサにより実行される第３プログラムをさらに生成し、
前記生成装置は、前記第２プログラムを実行する前記プロセッサに対してテストデータを与えた場合における、前記制限処理が発生した命令の位置を示す制限発生情報を取得する制限発生情報取得部をさらに備え、
前記対象部分決定部は、前記第２プログラムの生成時に用いた前記対象部分のうち、前記制限発生情報に示された命令の位置を除いた新たな対象部分を決定し、
前記モジュール生成部は、前記第１プログラムにおける前記新たな対象部分を実行するべき場合において前記制限処理を前記プロセッサに実行させる新たな制限モジュールを生成し、
前記統合部は、前記第１プログラムと前記新たな制限モジュールとを統合して前記第３プログラムを生成する
請求項１から６の何れか１項に記載の生成装置。
【請求項８】
コンピュータを請求項１から７の何れか１項に記載の生成装置として機能させるためのプログラム。
【請求項９】
コンピュータにより実行される生成方法であって、
前記コンピュータが、
プロセッサにより実行される第１プログラムを取得し、
前記第１プログラムを実行する前記プロセッサに対してテストデータを与えた場合における、前記プロセッサによる前記第１プログラムに含まれる命令毎の実行頻度を示す履歴情報を取得し、
前記履歴情報に基づき、前記第１プログラムにおける実行頻度が基準値以下の命令を少なくとも含む対象部分を決定し、
前記第１プログラムにおける前記対象部分を実行するべき場合において予め定められた制限処理を前記プロセッサに実行させる制限モジュールを生成し、
前記第１プログラムと前記制限モジュールとを統合して、前記プロセッサにより実行される第２プログラムを生成する
生成方法。
【請求項１０】
プロセッサを備える情報処理装置であって、
前記プロセッサが第１プログラムを実行することにより実現され、前記第１プログラムに従った処理をするデータ処理部と、
前記プロセッサが制限モジュールを実行することにより実現され、予め定められた制限処理をする制限制御部と、
を備え、
前記制限制御部は、
前記第１プログラムを実行する処理装置に対してテストデータを与えた場合における、前記処理装置による前記第１プログラムに含まれる命令毎の実行頻度を示す履歴情報に基づき決定された、前記第１プログラムにおける実行頻度が基準値以下の命令を少なくとも含む対象部分を検出し、
前記データ処理部が前記対象部分を実行するべき場合において、前記制限処理を実行する
情報処理装置。
【請求項１１】
前記制限制御部は、前記対象部分の実行に代えて予め定められた他の処理を実行する
請求項１０に記載の情報処理装置。
【請求項１２】
前記制限制御部は、前記対象部分の実行とともに予め定められた他の処理を実行する
請求項１０に記載の情報処理装置。
【請求項１３】
前記制限制御部は、前記データ処理部が前記第１プログラムを暗号化した暗号化プログラムにおける前記対象部分を実行するべき場合において、前記制限処理を実行し、前記データ処理部が前記暗号化プログラムにおける前記対象部分以外を実行するべき場合において、暗号化された命令を復号し、
前記データ処理部は、復号された前記第１プログラムに従った処理をする
請求項１０から１２の何れか１項に記載の情報処理装置。
【請求項１４】
コンピュータを請求項１０から１３の何れか１項に記載の情報処理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、生成装置、プログラム、生成方法および情報処理装置に関する。
【背景技術】
【０００２】
開発したプログラムに脆弱性を含む部分が存在すると、その脆弱性を含む部分から攻撃を受ける場合がある。近年、静的解析、動的解析および解析の自動化等の技術が進み、プログラムにおける脆弱性を少なくする取り組みは進んでいる。しかし、プログラムから脆弱性を含む部分を完全に無くすことは非常に困難である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−８８７９３号公報
【特許文献２】特開平９−５０３８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、安全性の高いプログラムを生成することにある。
【課題を解決するための手段】
【０００５】
実施形態の生成装置は、プログラム取得部と、履歴取得部と、対象部分決定部と、モジュール生成部と、統合部とを備える。前記プログラム取得部は、プロセッサにより実行される第１プログラムを取得する。前記履歴取得部は、前記第１プログラムを実行する前記プロセッサに対してテストデータを与えた場合における、前記プロセッサによる前記第１プログラムに含まれる命令毎の実行頻度を示す履歴情報を取得する。前記対象部分決定部は、前記履歴情報に基づき、前記第１プログラムにおける実行頻度が基準値以下の命令を少なくとも含む対象部分を決定する。前記モジュール生成部は、前記第１プログラムにおける前記対象部分を実行するべき場合において予め定められた制限処理を前記プロセッサに実行させる制限モジュールを生成する。前記統合部は、前記第１プログラムと前記制限モジュールとを統合して、前記プロセッサにより実行される第２プログラムを生成する。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態に係るプログラム生成システムの構成図。
【図２】テスト装置の構成図。
【図３】第１実施形態に係る生成装置の構成図。
【図４】第１実施形態に係る生成装置の処理フロー図。
【図５】第１実施形態で用いられる第１プログラムの一例を示す図。
【図６】第１実施形態で用いられる履歴情報の一例を示す図。
【図７】第１実施形態で用いられる対象部分情報の一例を示す図。
【図８】第１実施形態に係るプログラム実行装置の構成図。
【図９】第１実施形態に係るプログラム実行装置の処理フロー図。
【図１０】第２実施形態に係る生成装置の構成図。
【図１１】第２実施形態に係るプログラム実行装置の処理フロー図。
【図１２】第３実施形態に係る生成装置の構成図。
【図１３】第３実施形態で用いられる第１プログラムの一例を示す図。
【図１４】第３実施形態で用いられる履歴情報の一例を示す図。
【図１５】第３実施形態で用いられるシンボル情報の一例を示す図。
【図１６】第３実施形態で用いられるシンボル毎の実行頻度の一例を示す図。
【図１７】第４実施形態に係るプログラム生成システムの構成図。
【図１８】第４実施形態に係る生成装置の構成図。
【図１９】第４実施形態で用いられる対象部分等の一例を示す図。
【図２０】第４実施形態に係るプログラム生成システムの処理フロー図。
【図２１】第２実施形態の変形例に係る生成装置の構成図。
【図２２】第２実施形態の変形例に係るプログラム実行装置の処理フロー図。
【図２３】生成装置およびプログラム実行装置のハードウェア構成図。
【発明を実施するための形態】
【０００７】
以下、図面を参照しながら実施形態に係るプログラム生成システム１０について詳細に説明する。本実施形態に係るプログラム生成システム１０は、第１プログラムを攻撃がされにくい安全性の高い第２プログラムに変換すること、および、攻撃がされにくい安全性の高い処理をすることを目的とする。
【０００８】
（第１実施形態）
図１は、第１実施形態に係るプログラム生成システム１０の構成を示す図である。プログラム生成システム１０は、第１プログラム記憶装置２１と、機能追加装置２２と、被テストプログラム記憶装置２３と、テストデータ記憶装置２４と、テスト装置２５と、履歴情報記憶装置２６と、生成装置３０と、第２プログラム記憶装置３１と、プログラム実行装置４０とを備える。
【０００９】
第１プログラム記憶装置２１は、開発者により開発された第１プログラムを記憶する。第１プログラムは、ＣＰＵ（Central  Processing  Unit）等のプロセッサにより実行される。第１プログラムを実行するプロセッサは、与えられたデータを用いて第１プログラムに従った処理をする。
【００１０】
機能追加装置２２は、第１プログラム記憶装置２１に記憶されている第１プログラムに対して、実行履歴出力機能を追加する。実行履歴出力機能付きの第１プログラムを実行した場合、プロセッサは、与えられたデータを用いて第１プログラムに従った処理をするとともに、第１プログラムに含まれるそれぞれの命令毎の実行頻度（プロセッサがその命令を実行した回数）を示す履歴情報を出力する。
【００１１】
例えば、ＧＣＣ（GNU  Compiler  Collection）の場合、機能追加装置２２は、第１プログラムをカバレッジ計測オプション付きでコンパイルすることにより、実行履歴出力機能付き第１プログラムを生成することができる。なお、実行履歴出力機能付き第１プログラムのことを、被テストプログラムとも呼ぶ。
【００１２】
被テストプログラム記憶装置２３は、機能追加装置２２により生成された被テストプログラム（実行履歴出力機能付き第１プログラム）を記憶する。テストデータ記憶装置２４は、テストデータを記憶する。
【００１３】
テスト装置２５は、テストデータを用いて被テストプログラムを実行する。すなわち、テスト装置２５は、プロセッサにテストデータを用いて第１プログラムに従った処理をさせるとともに履歴情報を出力させる。
【００１４】
履歴情報記憶装置２６は、テスト装置２５から出力された履歴情報を記憶する。履歴情報は、第１プログラムを実行するプロセッサに対してテストデータを与えた場合における、プロセッサによる第１プログラムに含まれる命令毎の実行頻度を示す。
【００１５】
生成装置３０は、第１プログラムから、第２プログラムを生成する。第２プログラムは、ＣＰＵ等のプロセッサにより実行される。第２プログラムは、第１プログラムに従った処理をプロセッサに実行させるとともに、第１プログラムにおける対象部分を実行すべき場合に予め定められた制限処理をプロセッサに実行させる。
【００１６】
ここで、対象部分は、第１プログラムをプロセッサに実行させてテストした場合において、プロセッサの実行頻度が基準値以下であった命令部分である。つまり、対象部分は、事前のテストでの実行回数が少なかったために、攻撃の対象となる可能性が高い脆弱性を含む部分である。従って、第２プログラムを実行するプロセッサは、このような対象部分を実行すべき場合において制限処理を実行することができるので、攻撃がされにくく安全性の高い処理をすることができる。
【００１７】
第２プログラム記憶装置３１は、生成装置３０により生成された第２プログラムを記憶する。
【００１８】
プログラム実行装置４０は、第２プログラム記憶装置３１に記憶された第２プログラムを受け取り、第２プログラムを実行する。すなわち、プログラム実行装置４０では、プロセッサが第２プログラムを実行することにより、第１プログラムに従った処理をするとともに、第１プログラムにおける対象部分を実行すべき場合に予め定められた制限処理を実行する。
【００１９】
図２は、テスト装置２５の構成を示す図である。テスト装置２５は、プログラム供給部５１と、テストデータ供給部５２と、情報処理部５３とを有する。
【００２０】
プログラム供給部５１は、被テストプログラム（実行履歴出力機能付き第１プログラム）を受け取り、情報処理部５３に供給する。テストデータ供給部５２は、テストデータ記憶装置２４からテストデータを読み出す。そして、テストデータ供給部５２は、被テストプログラムを実行している情報処理部５３に対してテストデータを与える。
【００２１】
情報処理部５３は、通常のコンピュータと同様の構成を有する。すなわち、情報処理部５３は、プロセッサおよびメモリを有し、メモリに記憶されたプログラムをプロセッサが実行する。情報処理部５３は、プログラム記憶部５４と、プログラム実行部５５と、実行履歴出力部５６とを含む。
【００２２】
プログラム記憶部５４は、メモリ等により実現され、プログラム供給部５１により供給された被テストプログラムを記憶する。プログラム実行部５５は、被テストプログラムに含まれる第１プログラムをプロセッサが実行することにより実現される。プログラム実行部５５は、テストデータ供給部５２から供給されたテストデータを用いて第１プログラムに従った処理をし、結果を出力する。
【００２３】
実行履歴出力部５６は、被テストプログラムに含まれる実行履歴出力機能をプロセッサが実行することにより実現される。実行履歴出力部５６は、テストデータ供給部５２がプログラム実行部５５（第１プログラムを実行するプロセッサ）にテストデータを与えた場合における、第１プログラムに含まれるそれぞれの命令毎の実行頻度を検出する。そして、実行履歴出力部５６は、テストデータ供給部５２が全てのテストデータをプログラム実行部５５に与えた後に、履歴情報を出力する。
【００２４】
テスト装置２５は、第１プログラムに従った処理の結果を第１プログラムのデバッグ等に利用させる。また、テスト装置２５は、履歴情報を履歴情報記憶装置２６に記憶させる。
【００２５】
図３は、第１実施形態に係る生成装置３０の構成を示す図である。生成装置３０は、プログラム取得部６１と、履歴取得部６２と、対象部分決定部６３と、制限処理記憶部６４と、モジュール生成部６５と、統合部６６とを有する。
【００２６】
プログラム取得部６１は、第１プログラム記憶装置２１から第１プログラムを取得する。履歴取得部６２は、履歴情報記憶装置２６から履歴情報を取得する。
【００２７】
対象部分決定部６３は、履歴取得部６２が取得した履歴情報に基づき、第１プログラムにおける実行頻度が基準値以下の命令を少なくとも含む対象部分を決定する。例えば、対象部分決定部６３は、履歴情報に基づき、第１プログラムにおける実行頻度が０回の命令を対象部分として決定する。
【００２８】
制限処理記憶部６４は、制限処理をプロセッサに実行させるための命令列を含むモジュールを記憶する。モジュール生成部６５は、対象部分決定部６３により決定された対象部分の位置を表す対象部分情報を生成する。さらに、モジュール生成部６５は、制限モジュールを生成する。制限モジュールは、第１プログラムにおける対象部分を実行するべき場合において、予め定められた制限処理をプロセッサに実行させるためのプログラムコードである。
【００２９】
例えば、モジュール生成部６５は、対象部分の処理の実行に代えて予め定められた他の処理をプロセッサに実行させる制限モジュールを生成する。この場合、他の処理は、例えば、オペレーティングシステム等に対して例外を通知して、第２プログラムの実行を終了する処理である。また、この場合、他の処理は、例えば、第１プログラムの実行を一時的に中断して、ユーザ等に警告を発する処理であってもよい。警告は、例えば音声を発したり、ユーザに処理を続行するか否かを確認させる入力ボックスを表示したりする処理である。
【００３０】
また、モジュール生成部６５は、対象部分の処理の実行とともに（すなわち、対象部分の処理を続行させて）、予め定められた他の処理をプロセッサに実行させる制限モジュールを生成してもよい。この場合、他の処理は、例えば、プロセッサの実行のログを出力したり、処理を中断せずに画面上に警告情報を表示させたりする処理である。
【００３１】
統合部６６は、プログラム取得部６１により取得された第１プログラムと、モジュール生成部６５により生成された制限モジュールおよび対象部分情報とを統合して、第２プログラムを生成する。
【００３２】
第２プログラムは、第１プログラムと、制限モジュールと、対象部分情報とを含む。プロセッサは、第２プログラムを実行した場合、第１プログラムに従った処理をするとともに、第１プログラムにおける対象部分を実行するべき場合において制限処理を実行する。統合部６６は、生成した第２プログラムを第２プログラム記憶装置３１に記憶させる。
【００３３】
図４は、第１実施形態に係る生成装置３０の処理フローを示す図である。図５は、第１プログラムの一例を示す図である。図６は、履歴情報の一例を示す図である。図７は、対象部分情報の一例を示す図である。
【００３４】
生成装置３０は、図４に示すようなフローに従った処理をする。まず、Ｓ１０１において、プログラム取得部６１は、開発者により作成された第１プログラムを取得する。
【００３５】
第１プログラムは、例えば、図５に示すように、プロセッサに実行させる複数の命令（命令文、コード）を含む。また、それぞれの命令は、実行順を示すアドレス（行番号）に対応付けられている。例えば、図５の例においては、アドレス“００”には、ＩＮＳＴ＿０の命令が対応付けられており、アドレス“０３”には、“ＣＯＮＤ＿ＪＭＰ８”の命令が対応付けられている。プロセッサは、１つの命令を実行した後、その命令により次に実行すべきアドレス（ジャンプ先のアドレス）が指定されている場合には指定されたアドレスの命令を実行し、指定がされていない場合には次のアドレスの命令を実行する。
【００３６】
続いて、Ｓ１０２において、履歴取得部６２は、履歴情報を取得する。履歴情報は、例えば、図６に示すように、第１プログラムを実行するプロセッサに対してテストデータを与えた場合における、プロセッサの命令毎の実行頻度を示す。例えば、図６に示す履歴情報には、事前のテストにおいて、アドレス“００”の命令が５回実行され、アドレス“０１”の命令が５回実行され、アドレス“０４”の命令が０回実行されたこと等が示されている。
【００３７】
続いて、Ｓ１０３において、対象部分決定部６３は、第１プログラムにおける実行頻度が基準値以下の命令を少なくとも含む対象部分を決定する。例えば、対象部分決定部６３は、実行回数が０回の命令を対象部分として決定する。図６に示す履歴情報の場合であれば、対象部分決定部６３は、実行回数が０回であるアドレス“０４”、“０５”、“０６”および“０７”の命令を対象部分として決定する。なお、対象部分決定部６３は、１回以上の値を基準値としてもよい。
【００３８】
続いて、Ｓ１０４において、モジュール生成部６５は、対象部分決定部６３により決定された対象部分の位置を表す対象部分情報を生成する。例えば、モジュール生成部６５は、図７に示すような、対象部分の命令のアドレス（例えば、“０４”、“０５”、“０６”および“０７”）を示す対象部分情報を生成する。
【００３９】
さらに、モジュール生成部６５は、制限モジュールを生成する。制限モジュールは、第１プログラムにおける対象部分を実行するべき場合において予め定められた制限処理をプロセッサに実行させるためのプログラムコードである。
【００４０】
例えば、モジュール生成部６５は、対象部分の処理の実行に代えて、予め定められた他の処理をプロセッサに実行させるプログラムコードを生成する。例えば、モジュール生成部６５は、対象部分の処理に代えてオペレーティングシステム等に対して例外を通知して処理を終了させるプログラムコード、または、対象部分の処理に代えて第１プログラムの実行を中断して警告を発するプログラムコード等を生成する。
【００４１】
また、例えば、モジュール生成部６５は、対象部分の処理の実行とともに、予め定められた他の処理をプロセッサに実行させるプログラムコードを生成してもよい。例えば、モジュール生成部６５は、実行ログを出力させるプログラムコード、または、処理を中断せずに画面上に警告情報を表示させるプログラムコード等を生成する。
【００４２】
続いて、Ｓ１０５において、統合部６６は、Ｓ１０１で取得した第１プログラムと、Ｓ１０４で生成した制限モジュールおよび対象部分情報とを統合して、第２プログラムを生成する。生成装置３０は、Ｓ１０５の処理を終えると、生成した第２プログラムを第２プログラム記憶装置３１に格納して、本フローを終了する。
【００４３】
このような第１実施形態に係る生成装置３０は、第１プログラムに従った処理をプロセッサに実行させるとともに、第１プログラムにおける対象部分を実行すべき場合に予め定められた制限処理をプロセッサに実行させる第２プログラムを生成する。これにより、生成装置３０によれば、開発者により作成された第１プログラムを、攻撃がされにくく安全性を高くした第２プログラムに変換することができる。
【００４４】
図８は、第１実施形態に係るプログラム実行装置４０の構成を示す図である。プログラム実行装置４０は、通常のコンピュータと同様の構成を有する。すなわち、プログラム実行装置４０は、プロセッサおよびメモリを有し、メモリに記憶されたプログラムをプロセッサが実行する。
【００４５】
プログラム実行装置４０は、第２プログラム記憶部７１と、データ処理部７２と、制限制御部７３とを有する。
【００４６】
第２プログラム記憶部７１は、メモリにより実現される。第２プログラム記憶部７１は、第２プログラムを記憶し、データ処理部７２および制限制御部７３により記憶している第２プログラムが読み出される。
【００４７】
データ処理部７２は、プロセッサが第２プログラムに含まれる第１プログラムを実行することにより実現される。データ処理部７２は、与えられたデータを用いて第１プログラムに従った処理をする。そして、データ処理部７２は、処理結果を出力する。
【００４８】
制限制御部７３は、プロセッサが第２プログラムに含まれる制限モジュールを実行することにより実現される。制限制御部７３は、第１プログラムにおける予め設定された対象部分を実行するべき場合において予め定められた制限処理をする。
【００４９】
例えば、制限制御部７３は、対象部分の実行に代えて予め定められた他の処理を実行する。より具体的には、例えば、制限制御部７３は、対象部分の実行に代えて、オペレーティングシステム等に対して例外を通知し、第２プログラムの実行を終了する。また、例えば、制限制御部７３は、対象部分の実行に代えて、第１プログラムの実行を一時的に中断させて、警告を発する。
【００５０】
また、例えば、制限制御部７３は、対象部分の実行とともに、予め定められた他の処理を実行してもよい。より具体的には、例えば、制限制御部７３は、実行ログを出力したり、処理を中断せずに画面上に警告情報を表示させたりする。
【００５１】
図９は、第１実施形態に係るプログラム実行装置４０の処理フローを示す図である。プログラム実行装置４０は、第２プログラムを実行することにより、図９に示すようなフローに従った処理をする。なお、図９では、プログラム実行装置４０は、制限処理として、オペレーティングシステム等に例外を通知して第２プログラムの実行を終了する例を示す。
【００５２】
まず、Ｓ１１１において、データ処理部７２は、実行アドレスに初期値を設定する。実行アドレスは、データ処理部７２がこれから実行しようとする命令を示すアドレスである。初期値は、オペレーティングシステムがＷｉｎｄｏｗｓ（登録商標）またはＬｉｎｕｘ（登録商標）の場合、エントリポイントと呼ばれる値である。
【００５３】
続いて、Ｓ１１２において、制限処理部７３は、実行アドレスが、対象部分に含まれるか否かを判断する。より具体的には、例えば、制限処理部７３は、実行アドレスが、対象部分情報に含まれる何れかのアドレスと一致するか否かを判断する。
【００５４】
実行アドレスが対象部分に含まれない場合（Ｓ１１２のＮｏ）、Ｓ１１３において、データ処理部７２は、実行アドレスに格納された命令を実行する。続いて、Ｓ１１４において、データ処理部７２は、実行アドレスの値を更新する。例えば、データ処理部７２は、実行アドレスの値をインクリメントしたり、実行アドレスの値を実行した命令により指定されたジャンプ先のアドレスに変更したりする。
【００５５】
続いて、Ｓ１１５において、データ処理部７２は、実行アドレスに命令が含まれているか否かを判断する。すなわち、データ処理部７２は、第２プログラムに従った処理が完了したか否かを判断する。データ処理部７２は、実行アドレスに命令が含まれていない場合、つまり、第２プログラムに従った処理が完了した場合（Ｓ１１５のＮｏ）、本フローを終了する。データ処理部７２は、実行アドレスに命令が含まれている場合、つまり、第２プログラムに従った処理が完了していない場合（Ｓ１１５のＹｅｓ）、処理をＳ１１２に戻し、Ｓ１１２から処理を繰り返す。
【００５６】
一方、実行アドレスが対象部分に含まれている場合（Ｓ１１２のＹｅｓ）、Ｓ１１６において、制限処理部７３は、制限処理を実行する。本例においては、制限処理部７３は、オペレーティングシステム等に例外を通知する。そして、制限処理部７３は、本フローを強制的に終了して、第２プログラムの実行を終了する。
【００５７】
このような第１実施形態に係るプログラム実行装置４０は、与えられたデータを用いて第１プログラムに従った処理を実行するとともに、第１プログラムにおける対象部分を実行すべき場合に予め定められた制限処理を実行する。従って、プログラム実行装置４０は、事前のテストでの実行回数が少なかった対象部分を実行すべき場合において、制限処理を実行することができる。これにより、プログラム実行装置４０によれば、攻撃がされにくく安全性の高い処理をすることができる。
【００５８】
（第２実施形態）
図１０は、第２実施形態に係る生成装置３０の構成を示す図である。第２実施形態に係るプログラム生成システム１０は、第１実施形態に係るプログラム生成システム１０と略同一の機能および構成を有する。従って、第２実施形態を説明するにあたり、第１実施形態で説明したブロックと略同一の機能および構成を有するブロックについては、同一の符号を付けて相違点を除き説明を省略する。第３実施形態以降においても同様である。
【００５９】
第２実施形態に係る生成装置３０は、暗号化部８１をさらに有する。暗号化部８１は、第１プログラムを暗号化して暗号化プログラムを生成する。具体的には、暗号化部８１は、第１プログラムに含まれる複数の命令のそれぞれを予め定められたアルゴリズムで暗号化する。
【００６０】
モジュール生成部６５は、暗号化プログラムにおける対象部分を実行するべき場合において予め定められた制限処理をプロセッサに実行させ、暗号化プログラムにおける対象部分以外を実行するべき場合において暗号化された命令の復号処理をプロセッサに実行させる制限モジュールを生成する。統合部６６は、暗号化プログラムと、制限部分情報と、このような制限モジュールとを統合して第２プログラムを生成する。
【００６１】
なお、このような第２プログラムを実行するプログラム実行装置４０において、制限制御部７３は、暗号化プログラムにおける対象部分を実行するべき場合において制限処理を実行し、暗号化プログラムにおける対象部分以外を実行するべき場合において暗号化された命令を復号する。そして、データ処理部７２は、制限制御部７３により復号された第１プログラムに従ったデータ処理をする。
【００６２】
図１１は、第２実施形態に係るプログラム実行装置４０の処理フローを示す図である。第２実施形態において、プログラム実行装置４０は、図１０に示された生成装置３０により生成された第２プログラムを実行することにより、図１１に示すようなフローに従った処理をする。図１１に示すフローは、図９に示したフローと比較してＳ１２１の処理が追加されており、Ｓ１２１以外の処理は図９と同一である。
【００６３】
第２実施形態において、制限処理部７３は、実行アドレスが対象部分に含まれない場合（Ｓ１１２のＮｏ）、処理をＳ１２１に進める。Ｓ１２１において、データ処理部７２は、実行アドレスに格納された暗号化された命令を取得して、暗号化された命令を復号する。Ｓ１２１の処理を終えると、データ処理部７２は、処理をＳ１１３に進める。
【００６４】
このような第２実施形態に係る生成装置３０は、第１プログラムを暗号化した暗号化プログラム、および、暗号化プログラムを復号するための制限モジュールを含む第２プログラムを生成する。また、第２実施形態に係るプログラム実行装置４０は、第１プログラムに従った処理をするために、制限モジュールに従った処理をして暗号化された命令を復号する。これにより、第２実施形態に係る生成装置３０およびプログラム実行装置４０によれば、第２プログラムから第１プログラムを強制的に取り出して、制限処理を実行せずに第１プログラムを実行するような悪意のある行為を防止することができる。
【００６５】
（第３実施形態）
図１２は、第３実施形態に係る生成装置３０の構成を示す図である。第３実施形態に係る生成装置３０は、情報抽出部８６をさらに有する。情報抽出部８６は、第１プログラムにおけるそれぞれのシンボルに対応する命令列の範囲を示すシンボル情報を抽出する。
【００６６】
ここで、シンボルとは、プログラムに含まれる変数名、関数名および型名等をいう。シンボルは、ラベルとも呼ばれる場合がある。
【００６７】
第３実施形態において、対象部分決定部６３は、履歴情報に示された命令毎の実行頻度、および、情報抽出部８６により抽出されたシンボル情報に基づき、シンボル毎の実行頻度を算出する。そして、対象部分決定部６３は、実行頻度が基準値以下のシンボルを少なくとも含む対象部分を決定する。例えば、対象部分決定部６３は、実行回数が０回のシンボルを対象部分として決定する。
【００６８】
図１３は、第３実施形態で用いられる第１プログラムの一例を示す図である。図１４は、第３実施形態で用いられる履歴情報の一例を示す図である。図１５は、第３実施形態で用いられるシンボル情報の一例を示す図である。図１６は、シンボル毎の実行頻度の一例を示す図である。
【００６９】
例えば、プログラム取得部６１は、図１３に示すような第１プログラムを取得したとする。また、例えば、履歴取得部６２は、図１４に示すような履歴情報を取得したとする。また、例えば、情報抽出部８６は、図１５に示すようなシンボル情報を抽出したとする。
【００７０】
図１５のシンボル情報には、シンボル“ＰｒｏｃＡ”、シンボル“ＰｒｏｃＢ”およびシンボル“ＰｒｏｃＣ”に対応する命令列の範囲が示されている。具体的には、図１５のシンボル情報には、シンボル“ＰｒｏｃＡ”がアドレス“００〜０３”の範囲の命令列に対応し、シンボル“ＰｒｏｃＢ”がアドレス“０４〜０７”の範囲の命令列に対応し、シンボル“ＰｒｏｃＣ”がアドレス“０８〜０ｂ”の範囲の命令列に対応することが示されている。
【００７１】
この場合、対象部分決定部６３は、図１５に示すシンボル情報に示されたそれぞれのシンボルについて、シンボル毎の実行頻度を算出する。例えば、対象部分決定部６３は、アドレス毎の実行頻度の合計をシンボル毎の実行頻度として算出してもよい。この場合、対象部分決定部６３は、アドレス“００”の実行頻度と、アドレス“０１”の実行頻度と、アドレス“０２”の実行頻度と、アドレス“０３”の実行頻度とを加算して、“ＰｒｏｃＡ”の実行頻度を算出する。また、対象部分決定部６３は、アドレス“０４”の実行頻度と、アドレス“０５”の実行頻度と、アドレス“０６”の実行頻度と、アドレス“０７”の実行頻度とを加算して、“ＰｒｏｃＢ”の実行頻度を算出する。また、対象部分決定部６３は、アドレス“０８”の実行頻度と、アドレス“０９”の実行頻度と、アドレス“０ａ”の実行頻度と、アドレス“０ｂ”の実行頻度とを加算して、“ＰｒｏｃＣ”の実行頻度を算出する。
【００７２】
この結果、図１６に示すように、対象部分決定部６３は、シンボル“ＰｒｏｃＡ”の実行頻度として、５＋５＋０＋５＝１５回を算出する。また、対象部分決定部６３は、シンボル“ＰｒｏｃＢ”の実行頻度として、０＋０＋０＋０＝０回を算出する。また、対象部分決定部６３は、シンボル“ＰｒｏｃＣ”の実行頻度として、１＋１＋１＋１＝４回を算出する。なお、対象部分決定部６３は、このようにアドレス毎の実行頻度の合計ではなく、例えばアドレス毎の実行頻度の平均値等の、他の方法により、シンボル毎の実行頻度を算出してもよい。
【００７３】
そして、対象部分決定部６３は、シンボル毎の実行頻度から、実行頻度が基準値以下のシンボルを対象部分として決定する。例えば、図１３〜図１６の例においては、対象部分決定部６３は、実行回数が０回のシンボル“ＰｒｏｃＢ”（アドレス“０４〜０７”）を、対象部分として決定する。
【００７４】
シンボルに含まれる複数の命令のうち一部の命令の実行頻度が基準値以下である場合、シンボル自体は実行されているにも関わらず、その一部の命令が対象部分として決定される可能性がある。しかし、本実施形態においては、シンボルに含まれる一部の命令の実行頻度が基準値以下であったとしても、そのシンボル自体の実行頻度が基準値を超えていれば、対象部分として決定されない。これにより、本実施形態に係る生成装置３０によれば、一部の命令の実行頻度が基準値以下であっても、そのシンボル自体の実行頻度が基準値を超えていれば、そのシンボルの実行が制限されないような第２プログラムを生成することができる。
【００７５】
なお、情報抽出部８６は、シンボル情報を抽出することに代えて、第１プログラムにおけるそれぞれのファイルに対応する命令列の範囲を示すファイル情報を抽出してもよい。ここで、ファイルとは、処理を実行するための一群の命令列の単位であり、例えば、オブジェクトファイルまたはライブラリファイル等である。そして、この場合、対象部分決定部６３は、命令毎の実行頻度およびファイル情報に基づきファイル毎の実行頻度を算出し、実行頻度が基準値以下のファイルを少なくとも含む対象部分を決定する。これにより、生成装置３０によれば、ファイルに含まれる一部の命令の実行頻度が基準値以下であっても、そのファイル自体の実行頻度が基準値を超えていれば、そのファイルの実行が制限されないような第２プログラムを生成することができる。
【００７６】
また、情報抽出部８６は、第１プログラムからシンボル情報を抽出するのではなく、第１プログラムとは別に与えられる別情報（例えば、マップファイル）からシンボル情報を抽出してもよい。また、情報抽出部８６は、ファイル情報を抽出する場合も、別情報からファイル情報を抽出してもよい。
【００７７】
（第４実施形態）
図１７は、第４実施形態に係るプログラム生成システム１０の構成を示す図である。
【００７８】
第４実施形態に係るプログラム生成システム１０は、テストデータ供給装置９１と、制限位置検出装置９２と、第３プログラム記憶装置９３とを備える。テストデータ供給装置９１は、テスト装置２５が第１プログラムをテストした場合と同様に、テストデータ記憶装置２４に記憶されているテストデータをプログラム実行装置４０に供給する。
【００７９】
プログラム実行装置４０は、テストデータ供給装置９１から供給されたテストデータを用いて第２プログラムに従った処理をする。
【００８０】
制限位置検出装置９２は、プログラム実行装置４０による処理を解析して、第２プログラムを実行するプロセッサに対してテストデータを与えた場合における、制限処理が発生した命令の位置を検出する。そして、制限位置検出装置９２は、制限処理が発生した命令の位置を示す制限発生情報を生成する。制限位置検出装置９２は、生成した制限発生情報を生成装置３０に与える。
【００８１】
生成装置３０は、履歴情報および制限発生情報を用いて、第１プログラムに基づき、第３プログラムを生成する。第３プログラム記憶装置９３は、生成装置３０により生成された第３プログラムを記憶する。
【００８２】
ここで、第３プログラムは、第１プログラムに従った処理をプロセッサに実行させるとともに、第１プログラムにおける対象部分を実行すべき場合に予め定められた制限処理をプロセッサに実行させるプログラムである。すなわち、第３プログラムは、第２プログラムと同一の構成を有し、第２プログラムが有する不具合を解消したプログラムである。
【００８３】
図１８は、第４実施形態に係る生成装置３０の構成を示す図である。図１９は、第４実施形態で用いられる対象部分等の一例を示す図である。
【００８４】
第４実施形態に係る生成装置３０は、制限発生情報取得部９５をさらに有する。制限発生情報取得部９５は、制限位置検出装置９２により生成された制限発生情報を取得する。
【００８５】
第４実施形態において、対象部分決定部６３は、第２プログラムの生成時に用いた履歴情報および制限発生情報に基づき、対象部分を決定する。具体的には、対象部分決定部６３は、第２プログラムの生成時に用いた履歴情報のうち実行回数が０回の命令（つまり、第２プログラムの生成時に用いた対象部分）から、制限発生情報に示された命令を除いた新たな対象部分を決定する。
【００８６】
例えば、図１９のＡに示すように、履歴情報に実行回数が０回と示されていた命令のアドレスが“０４”、“０５”、“０６”、“０７”であったとする。また、図１９のＢに示すように、制限発生情報に示された命令のアドレスが“０６”、“０７”であったとする。このような場合、図１９のＣに示すように、対象部分決定部６３は、アドレス“０４”、“０５”を新たな対象部分として生成する。
【００８７】
モジュール生成部６５は、新たな対象部分を示す対象部分情報を生成する。これとともに、モジュール生成部６５は、第１プログラムにおける新たな対象部分を実行するべき場合において制限処理をプロセッサに実行させる新たな制限モジュールを生成する。
【００８８】
そして、統合部６６は、第１プログラムと、新たな制限モジュールおよび新たな対象部分情報とを統合して第３プログラムを生成する。
【００８９】
図２０は、第４実施形態に係るプログラム生成システム１０の処理フローを示す図である。第４実施形態に係るプログラム生成システム１０は図２０に示す流れで処理を実行する。
【００９０】
まず、Ｓ１３１において、生成装置３０は、第１プログラムから第２プログラムを生成する。この場合において、生成装置３０は、第１プログラムを実行するプロセッサに対してテストデータを与えた場合における、実行頻度が０回の命令を対象部分として決定する。そして、生成装置３０は、このような対象部分を実行すべき場合に制限処理を実行する第２プログラムを生成する。
【００９１】
続いて、Ｓ１３２において、プログラム実行装置４０は、第２プログラムの実行確認をする。具体的には、プログラム実行装置４０は、生成装置３０により生成された第２プログラムを実行する。テストデータ供給装置９１は、第２プログラムを実行するプログラム実行装置４０に対して、第１プログラムのテストに用いたテストデータを供給して処理をさせる。さらに、制限位置検出装置９２は、プログラム実行装置４０がテストデータに応じた処理を実行中に制限処理が発生したか否かを検出する。そして、制限位置検出装置９２は、制限処理が発生した命令の位置（アドレス）を示す制限発生情報を生成する。
【００９２】
続いて、Ｓ１３３において、生成装置３０は、制限処理が発生したか否かを判断する。生成装置３０は、制限処理が発生していない場合（Ｓ１３３のＮｏ）、第２プログラムに不具合が存在しないとして、本フローを終了する。生成装置３０は、制限処理が発生した場合（Ｓ１３３のＹｅｓ）、第２プログラムに不具合が存在するとして、処理をＳ１３４に進める。
【００９３】
Ｓ１３４において、生成装置３０は、第２プログラムの生成時に用いた履歴情報および制限発生情報に基づき、第１プログラムから第３プログラムを生成する。生成装置３０は、第３プログラムの生成を完了すると、本フローを終了する。
【００９４】
生成装置３０は、第１プログラムを事前テストした場合における実行頻度が０回の命令を対象部分として決定し、対象部分が実行されるべき場合に制限処理を実行するような第２プログラムを生成している。このような第２プログラムを、第１プログラムを事前テストしたテストデータを用いて実行確認をした場合、本来であれば、制限処理は発生しないはずである。しかしながら、第２プログラムの生成時の不具合等により、第２プログラムの実行確認において、制限処理が発生する可能性がある。
【００９５】
本実施形態においては、このような第２プログラムの実行確認において制限処理が発生した位置をフィードバックして、新たな第３プログラムを生成する。これにより、第４実施形態に係るプログラム生成システム１０によれば、第２プログラムの生成時の不具合を解消した新たな第３プログラムを生成することができる。
【００９６】
なお、プログラム生成システム１０は、第３プログラムを生成した後に、再度、第３プログラムの実行確認をしてもよい。そして、プログラム生成システム１０は、第３プログラムの実行確認において制限処理が発生した場合には、第３プログラムの生成と同様の方法で、第４プログラムを生成してよい。また、プログラム生成システム１０は、第４プログラム以降も同様に、制限処理が発生しなくなるまで処理を繰り返してもよい。
【００９７】
（変形例）
図２１は、第２実施形態の変形例に係る生成装置３０の構成を示す図である。第２実施形態の変形例に係る生成装置３０は、第１プログラムのうち一部を暗号化し、他の部分を平文とした暗号化プログラムを生成する。
【００９８】
第２実施形態の変形例に係る生成装置３０は、暗号化範囲決定部９７をさらに有する。暗号化範囲決定部９７は、第１プログラムのうちの暗号化範囲を決定する。
【００９９】
暗号化部８１は、暗号化範囲決定部９７により決定された暗号化範囲に含まれる命令を暗号化し、他の命令を平文のまま出力する。モジュール生成部６５は、暗号化範囲を示す暗号化範囲情報をさらに生成する。統合部６６は、暗号化部８１により生成された暗号化プログラム、および、モジュール生成部６５により生成された制限モジュール、対象部分情報および暗号化範囲情報を統合して、第２プログラムを生成する。
【０１００】
図２２は、第２実施形態の変形例に係るプログラム実行装置４０の処理フローを示す図である。第２実施形態の変形例において、プログラム実行装置４０は、図２１に示された生成装置３０により生成された第２プログラムを実行することにより、図２２に示すようなフローに従った処理をする。図２２に示すフローは、図９に示したフローと比較してＳ１４１およびＳ１４２の処理が追加されており、Ｓ１４１およびＳ１４２以外の処理は図９と同一である。
【０１０１】
第２実施形態の変形例において、制限処理部７３は、実行アドレスが対象部分に含まれない場合（Ｓ１１２のＮｏ）、処理をＳ１４１に進める。
【０１０２】
Ｓ１４１において、データ処理部７２は、実行アドレスが、暗号化範囲に含まれるか否かを判断する。実行アドレスが暗号化範囲に含まれない場合（Ｓ１４１のＮｏ）、データ処理部７２は、処理をＳ１１３に進める。実行アドレスが暗号化範囲に含まれる場合（Ｓ１４１のＹｅｓ）、Ｓ１４２において、データ処理部７２は、実行アドレスに格納された暗号化された命令を復号する。Ｓ１４２の処理を終えると、データ処理部７２は、処理をＳ１１３に進める。
【０１０３】
このような第２実施形態の変形例に係る生成装置３０は、一部分が暗号化された暗号化プログラム、および、暗号化プログラムを復号するための制限モジュールを含む第２プログラムを生成する。また、本変形例に係るプログラム実行装置４０は、第１プログラムに従った処理をするために、制限モジュールに従った処理をして暗号化された命令を復号する。これにより、第２実施形態の変形例に係る生成装置３０およびプログラム実行装置４０によれば、第２プログラムから第１プログラムの全体を強制的に取り出し、制限処理を実行せずに第１プログラムの全体を実行するような悪意のある行為を防止することができる。
【０１０４】
また、第１実施形態から第４実施形態のそれぞれにおいて、制限モジュールにより制限処理の内容を予め定義しておくのではなく、第２プログラムの利用者（プログラム実行装置４０の利用者）が制限処理の内容を定義してもよい。
【０１０５】
（ハードウェア構成）
図２３は、生成装置３０およびプログラム実行装置４０のハードウェア構成を示す図である。
【０１０６】
本実施形態に係る生成装置３０およびプログラム実行装置４０は、例えば図２３に示すようなハードウェア構成の情報処理装置により実現される。この情報処理装置は、通常のコンピュータと同様の構成をしている。すなわち、情報処理装置は、ＣＰＵ（Central  Processing  Unit）２０１と、ＲＯＭ（Read  Only  Memory）２０２と、ＲＡＭ（Random  Access  Memory）２０３と、操作入力装置２０４と、表示装置２０５と、記憶装置２０６と、通信装置２０７とを備える。そして、これらの各部は、バスにより接続される。
【０１０７】
ＣＰＵ２０１は、ＲＯＭ２０２および記憶装置２０６に記憶されたプログラムをＲＡＭ２０３に展開して実行し、プログラムに従って処理（各部の制御およびデータの加工等）をするプロセッサである。ＣＰＵ２０１は、ＲＡＭ２０３の所定領域を作業領域として、ＲＯＭ２０２および記憶装置２０６等に記憶されたプログラムとの協働により各種処理を実行する。
【０１０８】
ＲＯＭ２０２は、プログラムおよび各種情報を書き換え不可能に記憶するメモリである。ＲＯＭ２０２は、オペレーティングシステムの起動用プログラムを記憶装置２０６からＲＡＭ２０３に読み出すスタートプログラムが記憶されている。
【０１０９】
ＲＡＭ２０３は、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）等のメモリである。ＲＡＭ２０３は、ＣＰＵ２０１による処理対象のデータ等を記憶し、ＣＰＵ２０１の作業領域として機能する。
【０１１０】
操作入力装置２０４は、マウスおよびキーボード等の入力デバイスである。操作入力装置２０４は、ユーザから操作入力された情報を指示信号として受け付け、指示信号をＣＰＵ２０１に出力する。
【０１１１】
表示装置２０５は、ＬＣＤ（Liquid  Crystal  Display）等の表示デバイスである。表示装置２０５は、ＣＰＵ２０１からの表示信号に基づいて、各種情報を表示する。
【０１１２】
記憶装置２０６は、例えば、ハードディスクドライブまたはフラッシュメモリ等である。記憶装置２０６は、オペレーティングシステム、アプリケーションプログラムおよびデータを記憶している。通信装置２０７は、ネットワークに接続するためのインターフェイス装置である。通信装置２０７は、ＣＰＵ２０１からの制御に応じて外部の機器とネットワークを介して通信する。
【０１１３】
本実施形態の情報処理装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供される。また、本実施形態の情報処理装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態の情報処理装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、本実施形態のプログラムを、ＲＯＭ２０２等に予め組み込んで提供するように構成してもよい。
【０１１４】
情報処理装置を生成装置３０として機能させるためのプログラムは、プログラム取得モジュールと、履歴取得モジュールと、対象部分決定モジュールと、モジュール生成モジュールと、統合モジュールとを有する。情報処理装置は、プロセッサ（ＣＰＵ２０１）が記憶媒体（記憶装置２０６等）からプログラムを読み出して実行することにより各モジュールが主記憶装置（ＲＡＭ２０３）上にロードされ、プロセッサ（ＣＰＵ２０１）が、プログラム取得部６１、履歴取得部６２、対象部分決定部６３、モジュール生成部６５および統合部６６として機能する。また、ＲＡＭ２０３または記憶装置２０６は、制限処理記憶部６４として機能する。なお、プログラム取得部６１、履歴取得部６２、対象部分決定部６３、モジュール生成部６５および統合部６６は、一部または全部がプロセッサ以外のハードウェアにより実現されてもよい。
【０１１５】
本発明のいくつかの実施形態および変形例を説明したが、これらの実施形態および変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１６】
１０  プログラム生成システム
２１  第１プログラム記憶装置
２２  機能追加装置
２３  被テストプログラム記憶装置
２４  テストデータ記憶装置
２５  テスト装置
２６  履歴情報記憶装置
３０  生成装置
３１  第２プログラム記憶装置
４０  プログラム実行装置
５１  プログラム供給部
５２  テストデータ供給部
５３  情報処理部
５４  プログラム記憶部
５５  プログラム実行部
５６  実行履歴出力部
６１  プログラム取得部
６２  履歴取得部
６３  対象部分決定部
６４  制限処理記憶部
６５  モジュール生成部
６６  統合部
７１  第２プログラム記憶部
７２  データ処理部
７３  制限制御部
８１  暗号化部
８６  情報抽出部
９１  テストデータ供給装置
９２  制限位置検出装置
９３  第３プログラム記憶装置
９５  制限発生情報取得部
９７  暗号化範囲決定部
【図１】
2017167937.tif 000003
【図２】
2017167937.tif 000004
【図３】
2017167937.tif 000005
【図４】
2017167937.tif 000006
【図５】
2017167937.tif 000007
【図６】
2017167937.tif 000008
【図７】
2017167937.tif 000009
【図８】
2017167937.tif 000010
【図９】
2017167937.tif 000011
【図１０】
2017167937.tif 000012
【図１１】
2017167937.tif 000013
【図１２】
2017167937.tif 000014
【図１３】
2017167937.tif 000015
【図１４】
2017167937.tif 000016
【図１５】
2017167937.tif 000017
【図１６】
2017167937.tif 000018
【図１７】
2017167937.tif 000019
【図１８】
2017167937.tif 000020
【図１９】
2017167937.tif 000021
【図２０】
2017167937.tif 000022
【図２１】
2017167937.tif 000023
【図２２】
2017167937.tif 000024
【図２３】
2017167937.tif 000025