JP5549810B2 - プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム - Google Patents

プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム Download PDF

Info

Publication number
JP5549810B2
JP5549810B2 JP2010144541A JP2010144541A JP5549810B2 JP 5549810 B2 JP5549810 B2 JP 5549810B2 JP 2010144541 A JP2010144541 A JP 2010144541A JP 2010144541 A JP2010144541 A JP 2010144541A JP 5549810 B2 JP5549810 B2 JP 5549810B2
Authority
JP
Japan
Prior art keywords
instruction
program
camouflaged
target
equivalent
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2010144541A
Other languages
English (en)
Other versions
JP2012008825A (ja
Inventor
良二 太田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2010144541A priority Critical patent/JP5549810B2/ja
Publication of JP2012008825A publication Critical patent/JP2012008825A/ja
Application granted granted Critical
Publication of JP5549810B2 publication Critical patent/JP5549810B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、プログラムの解析を困難にするプログラム難読化技術に関する。
プログラムを不正なリバースエンジニアリングから保護するために、多くのプログラム難読化技術が考案されている。
例えば、特許文献1には、プログラム中の命令コードを偽の命令コードで偽装化したプログラムに、偽の命令コードを正しい命令コードに戻す第1のルーチンと、第1のルーチンにより戻された正しい命令コードを偽の命令コードで再度偽装する第2のルーチンとを追加した自己書き換えプログラムを生成する技術について記載されている。
特許第3944069号
特許文献1では、プログラム中の特定の命令コードの偽装を解除するルーチンと、その命令コードについて再度偽装化するルーチンとが、プログラムに含まれた状態であるため、時間をかけてプログラムを追えば解析されてしまうという問題があった。
本発明は、上記問題点に鑑みてなされたもので、プログラムの解析を困難にするプログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラムを提供することを目的とする。
本発明は、保護対象プログラムにおいて、書き換え対象となる対象命令を選択する手段と、前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成する手段と、前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得する命令取得手段と、前記対象命令の命令位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成する手段とを備えることを特徴とするプログラム難読化装置である。
本発明は、保護対象プログラム中の一部の命令を偽の命令に書き換える難読化処理が施された偽装プログラムを実行するためのプログラム制御装置であって、前記書き換えられた命令の位置と、前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記書き換えられた命令と等価な命令とが対応付けられている命令対応情報を記憶する手段と、前記偽装プログラムの実行位置が、前記命令対応情報が示す各位置に達したときに、当該偽装プログラムの実行が停止されるイベントが発生するように設定する手段と、前記偽装プログラムが実行されている間、当該偽装プログラムを監視する手段と、前記監視手段がイベントの発生を検知したとき、前記命令対応情報から、当該偽装プログラムの実行位置に対応する前記等価な命令を取得する手段と、前記偽装プログラムのプログラム状態のデータを取得し、当該プログラム状態のデータを用いて、前記取得された等価な命令を前記異なる命令セットにおいて実行し、実行結果を前記プログラム状態のデータとして設定し、前記偽装プログラムの実行を再開させる実行手段とを備えることを特徴とするプログラム制御装置である。
本発明は、プログラム中の保護対象命令を偽の命令に書き換えた第1のプログラムを実行する手段と、前記第1のプログラムの実行位置が前記偽の命令の開始位置に達したときに、第2のプログラムに制御を移す手段と、前記保護対象命令と等価な処理が前記保護対象命令とは異なる命令体系で記述された仮想命令を保持する手段と、前記第2のプログラムにより前記仮想命令を読み出して実行する手段とを備えることを特徴とするプログラム制御装置である。
本発明は、保護対象プログラムにおいて、書き換え対象となる対象命令を選択するステップと、前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成するステップと、前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得するステップと、前記対象命令の位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成するステップとを備えることを特徴とするプログラム難読化方法である。
本発明は、コンピュータに、保護対象プログラムにおいて、書き換え対象となる対象命令を選択する処理、前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成する処理、前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得する命令取得処理、前記対象命令の位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成する処理を実行させるためのプログラムである。
本発明は、保護対象プログラム中の一部の命令が偽の命令に書き換えられた偽装プログラムを実行するコンピュータに、前記偽装プログラムにおける偽の命令の位置と、前記保護対象プログラムの命令体系とは異なる命令体系により記述された、前記書き換えられた命令と等価な命令と、が対応付けられている命令対応情報を参照して、前記偽装プログラムの実行位置が前記命令対応情報により示される各位置に達したときに当該偽装プログラムの動作を停止させるイベントが発生するように設定する処理、前記偽装プログラムが実行されている間、当該偽装プログラムを監視する監視処理、前記監視処理において前記イベントの発生を検知したとき、前記命令対応情報から、当該偽装プログラムの実行位置に対応する前記等価な命令を取得する処理、前記偽装プログラムのプログラム状態のデータを取得し、当該プログラム状態のデータを用いて、前記取得された等価な命令を実行し、実行結果を前記偽装プログラムのプログラム状態のデータとして設定する処理、前記偽装プログラムの実行を再開させる処理、を実行させるためのプログラムである。
本発明によれば、プログラムの解析を困難にすることができる。
図1は本発明の実施形態に係るプログラム難読化装置の概要を説明するための図である。 図2はプログラム難読化装置のハードウェア構成を例示する図である。 図3はプログラム難読化装置の機能を示すブロック図である。 図4は保護対象プログラムの対象命令を偽装命令に書き換えて生成された偽装プログラムの一例を示す図である。 図5はプログラム制御装置により実行される支援プログラムの機能を示すブロック図である。 図6はプログラム難読化装置の動作を説明するためのフローチャートである。 図7は偽装プログラムを実行するプログラム制御装置の動作を説明するためのフローチャートである。
以下、本発明の実施形態について図面を参照して説明する。
本発明の実施形態に係るプログラム難読化装置10の概要を図1を参照して説明する。
プログラム難読化装置10は、保護対象プログラム300について、書き換え対象となる対象命令を選択し、その対象命令を偽の命令(偽装命令)に書き換えた偽装プログラム401を生成する。
プログラム難読化装置10は、支援プログラム群200から一の支援プログラム201を選択する。支援プログラム201は偽装プログラム401を実行するためのものである。各支援プログラム201は、対応する命令セット(命令体系)がそれぞれ異なる。プログラム難読化装置10は、支援プログラム201を選ぶ際、偽装プログラム401を実行するコンピュータプロセッサの命令セットとは異なる命令セットに対応する支援プログラムを選択する。そして、プログラム難読化装置10は、選択した支援プログラムの命令セット用の、対象命令と等価な命令(仮想命令)を生成する。本実施形態において、対象命令と等価な命令とは、対象命令と同じ実行結果を得ることができる命令を示す。
プログラム難読化装置10は、プログラムにおける対象命令の命令位置と、生成した仮想命令とを対応付けた命令情報テーブル(命令対応情報)402を生成する。偽装プログラム401と、命令情報テーブル402と、選択された支援プログラム201とが実行プログラムのセットとして、偽装プログラム401を実行するプログラム制御装置に提供される。
図2は、本発明の実施形態に係るプログラム難読化装置10のハードウェア構成を例示する図である。図示されるように、プログラム難読化装置10は、キーボードやマウス等を含む入力装置1、ROM(Read Only Memory)2、CPU(Central Processing
Unit)3、RAM(Random Access Memory)4、ハードディスク装置を含む外部記憶装置5、液晶ディスプレイを含む表示装置6、CD-ROMドライブを含む記録媒体駆動装置7、NIC(Network Interface
Card)を含む通信制御部8とを備えるコンピュータ等から構成される。
図3は、本発明の実施形態に係るプログラム難読化装置10の機能を示すブロック図である。図示されるように、プログラム難読化装置10は、支援プログラム選択部101と、命令決定部102と、命令偽造部103と、仮想命令導出部104と、命令情報生成部105とを備える。
支援プログラム選択部101は、予め設定された複数の支援プログラム201から1つの支援プログラム201を選択する。複数の支援プログラムはそれぞれ異なる命令セットに対応するプログラムである。支援プログラム選択部101は、偽装プログラム401に対応する命令セット(保護対象プログラム300に対応する命令セット)以外の命令セットに対応する支援プログラム201を選択する。命令セットは、プロセッサが実行する命令の集合であり、例えば、オペコードへのコード割り当て、レジスタ番号、アドレスの表現方法(例えば、バイトエンディアン等)、命令のレイアウト(例えば、オペコードやオペランドの長さ、各領域の並び順)等から規定される。
命令決定部102は、保護対象プログラム300を構成する複数の命令のうち、書き換えの対象となる命令(対象命令)を決定する。対象命令はプログラム中の命令からランダムに選択してもよい。
命令偽装部103は、対象命令に対応する偽の命令(偽装命令)を決定し、その偽装命令で保護対象プログラム300における対象命令を書き換える。本実施形態では、書き換え後のプログラムを偽装プログラム401と呼ぶ。偽装命令はランダムに決定してもよい。例えば、予め設定された複数の命令や文字列等からランダムに選択したものを偽装命令としてもよく、また、ランダムに生成した文字列を偽装命令としてもよい。
仮想命令導出部104は、支援プログラム選択部101により選択された支援プログラム201の命令セットに基づいて記述された、対象命令と等価な命令である仮想命令を生成する。
命令対応情報生成部105は、プログラムにおける対象命令の位置(アドレス)と、対象命令のサイズと、仮想命令とを対応づけた対応情報を生成して命令情報テーブル402に記憶する。
プログラム難読化装置10は、上述のようにして生成された偽装プログラム401と、選択された支援プログラム201と、生成された命令情報テーブル402とのセット(実行プログラムセット)を出力する。出力された実行プログラムセットは、後述する情報処理装置20に提供される。提供手段は任意であり、ネットワークを介して送信してもよく、記録媒体を介して提供してもよい。
保護対象プログラム300の対象命令を偽装命令に書き換えて生成された偽装プログラム401の一例を図4に示す。図の例では、保護対象プログラムから対象命令として「83
C0 03」が選択され、その対象命令が偽装命令「C1 EB 02」に書き換えられている。対象命令のアドレス「0040103B」と、対象命令のサイズ(バイト)「3」と、対象命令について、偽装プログラム401の命令セット(保護対象プログラム300の命令と同一、この例では80x86系命令セット)とは異なる命令セット用の機械語で記述された仮想命令「39
03 00 00」とを対応付けた対応情報が命令情報テーブル402に設定される。
プログラム制御装置20は、プログラム難読化装置10により難読化された偽装プログラム401を実行するためのものであり、プログラム難読化装置10と同様に(図2参照)、入力装置と、ROMと、CPUと、RAMと、外部記憶装置と、表示装置と、記録媒体駆動装置と、通信制御部とを備えるコンピュータ等から構成される。プログラム制御装置20のCPUは、外部記憶装置や記録媒体に記憶される実行プログラムセットのデータをRAM等に読み込んで各プログラムを実行する。
図5は、プログラム制御装置20により実行される支援プログラム201の機能を示すブロック図である。図示されるように、支援プログラム201は、監視動作開始処理部211と、イベント設定処理部212と、命令開始処理部213と、イベント検出処理部214と、仮想命令取得処理部215と、プログラム状態取得処理部216と、仮想命令実行処理部217と、プログラム状態設定処理部218とを含む。
監視動作開始処理部211は、偽装プログラム401の起動時に、偽装プログラム401の動作の監視を開始する。
イベント設定処理部212は、偽装プログラム401について、命令情報テーブル402が示す各命令位置でイベント(ブレークポイント)が発生するように設定する。このイベントの発生により、偽装プログラム401の実行は一時停止される。
命令開始処理部213は、偽装プログラム401の実行を再開させる。
イベント検出処理部214は、イベント(ブレークポイント)の発生を検出する。
仮想命令取得処理部215は、イベントの検出時における偽装プログラム401の実行位置をプログラムカウンタから取得し、この実行位置に対応する仮想命令を命令情報テーブル402から取得する。
プログラム状態取得処理部216は、イベント発生により実行が停止された偽装プログラム401のプログラム状態(レジスタやメモリの内容等)を取得する。
仮想命令実行処理部217は、仮想命令取得処理部215により取得された仮想命令を、予め設定された命令セットにおいて実行する。
プログラム状態設定処理部218は、仮想命令の実行結果を、実行を停止した偽装プログラム401のプログラム状態として設定する。
なお、上述した、監視動作開始処理部211と、イベント設定処理部212と、命令開始処理部213と、イベント検出処理部214と、仮想命令取得処理部215と、プログラム状態取得処理部216と、仮想命令実行処理部217と、プログラム状態設定処理部218の一部を、例えば、Windows(登録商標)が標準的に備えるデバッグ用API(アプリケーション・プログラム・インターフェース)を利用して実現してもよい。
デバッグ用APIは、プログラムをデバッグするためのデバッガ用に設けられたAPIである。デバッガは、このAPIを使って、デバッグ対象プログラムのプロセスに対して、デバッガとしての監視動作開始、ブレークポイント等のイベント設定、イベントの発生検出、メモリやレジスタの内容参照及び設定といった各種処理を行うことができる。
デバッグ用APIでは、Windows(登録商標)等のOS制御により、あるプロセスのデバッガとして振舞うことができるのは、唯一のデバッガプロセスに制限される。これは、複数のプロセスがデバッガとして動作すると、デバッグ対象のプロセスが所有するレジスタやメモリ等の限られた資源を奪い合うことになり、不正動作が起きる可能性が極めて高くなるからである。プログラム制御装置20が、プロセスに対して1つのプロセスのみが監視できるオペレーティングシステムで動作し、このような制限下において、保護したいプロセスに対してデバッガとして動作するプロセス(支援プログラム201)を予め設けることで、不正な解析者のデバッガによる解析を防止することができる。
次に、本実施形態に係るプログラム難読化装置10の動作について図6を参照して説明する。
プログラム難読化装置10の支援プログラム選択部101は、複数の支援プログラム201の中から1つの支援プログラム201をランダムに選択する(ステップS601)。このとき、支援プログラム選択部101は、複数の支援プログラム201のうち、偽装プログラム401の命令セットに対応する支援プログラムを選択対象から外しても良い。
命令決定部102は、保護対象プログラム300を構成する命令の中から、偽装対象とする対象命令aをランダムに一つ選ぶ(ステップS602)。
命令偽造部103は、偽装命令xをランダムに生成し、プログラム中の対象命令aを偽装命令xで書き換える(ステップS603)。
仮想命令導出部104は、ステップS601で選択された支援プログラム201の命令セットに対応する、対象命令aと等価な仮想命令Aを生成する(ステップS604)。
命令対応情報生成部105は、プログラムにおける対象命令aの位置P(a)と、対象命令aのサイズS(a)と、仮想命令Aとの情報を暗号化して命令情報テーブル402に書き込む(ステップS605)。なお、保護対象プログラム300の命令セットが固定長命令の場合には、サイズS(a)の情報は省略してもよい。
所定の終了条件を満たすまで(ステップS606)、ステップS602〜S605を繰り返し、終了条件を満たす場合には本処理を終了する。これにより、対象命令a、b、c、・・・が偽装命令x、y、z、・・・に書き換えられた偽装プログラム401と、各対象命令の命令位置P(a)、P(b)、P(c)、・・・と、対象命令のサイズS(a)、S(b)、S(c)、・・・と、命令位置に対応する仮想命令A、B、C、・・・とが書き込まれた命令情報テーブル402とが生成される。終了条件の内容は任意に設定可能であり、例えば、ステップS602〜S605の処理回数を予め設定し、実行回数が処理回数に達したときに本処理を終了してもよい。
次に、偽装プログラム401を実行するプログラム制御装置20の動作について図7を参照して説明する。
まず、プログラム制御装置20において支援プログラム201を起動する。起動された支援プログラム201は、偽装プログラム401を起動し、装プログラムのデバッガとして偽装プログラム401の動作の監視を開始する(ステップS701)。
支援プログラム201は、偽装プログラム401を一時停止させる(ステップS702)。
支援プログラム201は、暗号化された命令情報テーブル402を復号化し、復号化した命令情報テーブル402から、対象命令の命令位置P(a)、P(b)、P(c)、・・・の情報を取得する。そして、各命令位置についてイベントが発生するようにブレークポイントを設定する(ステップS703)。
次に、支援プログラム201は、実行が停止されている偽装プログラム401の実行を再開する(ステップS704)。
支援プログラム201は、監視対象の偽装プログラム401が終了するまで(ステップS705)、以下の処理を続ける。
支援プログラム201は、ブレークポイントによるイベントの発生を待機する(ステップS706:NO)。偽装プログラム401の実行位置がブレークポイントに到達すると、偽装プログラム401は一時停止され、イベントが発生する。支援プログラム201は、このブレークポイントによるイベントを検出すると(ステップS706:YES)、プログラムカウンタから、偽装プログラム401の停止位置を特定し、この停止位置に対応する命令サイズと仮想命令の情報を命令情報テーブル402から取り出し、偽装プログラム401のプログラムカウンタの値を[停止位置+対象命令の命令サイズ]に設定する(ステップS707)。例えば、P(a)の位置で停止した場合で命令サイズがS(a)であれば、プログラムカウンタの値をP(a)+S(a)に設定する。
次に、支援プログラム201は、命令情報テーブル402から取り出した仮想命令の解釈を行い、仮想命令Aを実行するのに必要なレジスタやメモリの値(プログラム状態)を取得する(ステップS708)。例えば、演算命令であれば当該演算に必要なオペランドを取得し、分岐命令であれば分岐の判定に使用するステータスレジスタの値を取得する。
支援プログラム201は、仮想命令の処理を実行する(ステップS709)。例えば、演算命令なら当該演算を実施し、分岐命令なら分岐条件が成立したかどうかの判定を行う。
支援プログラム201は、仮想命令の処理結果を、レジスタやメモリに設定する(ステップS710)。例えば、演算命令なら演算結果を、指定のレジスタやメモリに設定し、分岐命令で分岐条件が成立したときはプログラムカウンタを分岐先の位置に設定する。
フローはステップS704に戻り、支援プログラム201は、偽装プログラム401の実行を再開し、上述の処理を繰り返す。そして、偽装プログラム401のプロセスが終了したときに(ステップS705:YES)、本処理を終了する。
このようにして、支援プログラム201は、偽装プログラム401における偽装命令の位置で、対象命令と等価な処理を、仮想命令で代行して偽装プログラム401の動作を継続する。
以上のように、本実施形態に係るプログラム難読化装置によれば、保護の対象である対象プログラムを構成する複数の命令のうち、一部の命令を偽装命令に書き換えて偽装プログラム401を生成する。偽装プログラム401における偽装命令を元の命令に戻す処理がプログラム中に存在しないため、プログラムを動作させずに解析する静的解析に対して、偽装プログラム401全体を解析しても本来の動作を理解できないようにすることができる。また、支援プログラム201が偽装プログラム401上の偽装命令を元の命令と等価な仮想命令で代行することにより、プログラム実行中に元の命令はメモリ上に出現しないため、実行中のプログラムのメモリ内容を読み取って解析しても本来の動作を理解することは困難となる。
また、支援プログラム201が偽装プログラム401に対する唯一のデバッガとして動作することにより、プログラムを動作させながら解析する動的解析のうち、他のデバッガを用いて偽装プログラム401を解析する行為を防止することができる。さらに、命令体系が異なる複数の支援プログラム201を用いることにより、偽装プログラム401の解析をより困難にすることができる。さらに、命令情報テーブル402を暗号化することにより、命令情報テーブル402に設定された対象命令の命令位置と仮想命令の情報が取得され解析範囲が限定されることを防止できる。
上述した本発明の実施形態に係るプログラム難読化装置10の支援プログラム選択部101、命令決定部102、命令偽造部103、仮想命令導出部104、命令情報生成部105は、管理サーバ20のCPU(Central Processing Unit)が記憶部に格納された動作プログラム等を読み出して実行することにより実現されてもよく、また、ハードウェアで構成されてもよい。上述した実施の形態の一部の機能のみをコンピュータプログラムにより実現することもできる。
以上、好ましい実施の形態をあげて本発明を説明したが、本発明は必ずしも上記実施の形態に限定されるものではなく、その技術的思想の範囲内において様々に変形し実施することが出来る。
例えば、図6を参照して説明したプログラム難読化装置10の動作について、上記説明では、ステップS602〜S605を対象命令の1命令毎に繰り返しているが、複数の命令をまとめて各ステップで処理するようにしてもよい。例えば、予め設定された数の対象命令を選択し(ステップS602)、選択した複数の命令についてそれぞれの偽装命令を生成してプログラム中の各対象命令を各偽装命令で書き換え(ステップS603)、各対象命令について仮想命令をそれぞれ生成し(ステップS604)、各対象命令の命令位置と、対象命令のサイズと、各仮想命令とを命令情報テーブル402に記録してもよい(ステップS605)。
また、プログラム難読化装置10が支援プログラムを選択するとき、まず、複数の命令セットから一の命令セット(偽装プログラムの命令セット以外の命令セット)を選択し、選択された命令セットに対応する支援プログラムを取得するようにしてもよい。
上記実施形態では、支援プログラム201が偽装プログラム401を起動するようにしているが、これに限定されず、他の任意の方法(例えば、ユーザ操作)により偽装プログラム401を起動し、この起動に同期して支援プログラム201が監視動作を開始するようにしてもよい。
また、偽装命令の命令長は、対象命令と同じ長さでもよいし、異なる長さでもよい。但し、偽装命令が対象命令よりも長くなる場合には、対象命令の後続の命令も対象命令として選択されたとみなし、命令情報テーブル402に後続の命令の位置及びサイズと、後続の命令と等価な仮想命令とがさらに追加されるように処理する必要がある。
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
保護対象プログラムにおいて、書き換え対象となる対象命令を選択する手段と、
前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成する手段と、
前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得する命令取得手段と、
前記対象命令の命令位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成する手段と、
を備えることを特徴とするプログラム難読化装置。
(付記2)
異なる複数の命令セットから、前記保護対象プログラムの命令セットとは異なる命令セットを一つ選択する選択手段をさらに備え、
前記命令取得手段は、前記選択手段により選択された命令セット用の、前記対象命令と等価な命令を取得する、
ことを特徴とする付記1に記載のプログラム難読化装置。
(付記3)
保護対象プログラム中の一部の命令を偽の命令に書き換える難読化処理が施された偽装プログラムを実行するためのプログラム制御装置であって、
前記書き換えられた命令の位置と、前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令とが対応付けられている命令対応情報を記憶する手段と、
前記偽装プログラムの実行位置が、前記命令対応情報が示す各位置に達したときに、当該偽装プログラムの実行が停止されるイベントが発生するように設定する手段と、
前記偽装プログラムが実行されている間、当該偽装プログラムを監視する手段と、
前記監視手段がイベントの発生を検知したとき、前記命令対応情報から、当該偽装プログラムの実行位置に対応する前記等価な命令を取得する手段と、
前記偽装プログラムのプログラム状態のデータを取得し、当該プログラム状態のデータを用いて、前記取得された等価な命令を前記異なる命令セットにおいて実行し、実行結果を前記プログラム状態のデータとして設定し、前記偽装プログラムの実行を再開させる実行手段と、
を備えることを特徴とするプログラム制御装置。
(付記4)
前記プログラム制御装置は、プロセスに対して1つのプロセスのみが監視できるオペレーティングシステムで動作する、
ことを特徴とする付記3に記載のプログラム制御装置。
(付記5)
プログラム中の保護対象命令を偽の命令に書き換えた第1のプログラムを実行する手段と、
前記第1のプログラムの実行位置が前記偽の命令の開始位置に達したときに、第2のプログラムに制御を移す手段と、
前記保護対象命令と等価な処理が前記保護対象命令とは異なる命令体系で記述された仮想命令を保持する手段と、
前記第2のプログラムにより前記仮想命令を読み出して実行する手段と、
を備えることを特徴とするプログラム制御装置。
(付記6)
保護対象プログラムにおいて、書き換え対象となる対象命令を選択するステップと、
前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成するステップと、
前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得するステップと、
前記対象命令の位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成するステップと、
を備えることを特徴とするプログラム難読化方法。
(付記7)
前記偽装プログラムの実行位置が、前記命令対応情報が示す各位置に達したときに、当該偽装プログラムの実行が停止されるイベントが発生するように設定するステップと、
前記偽装プログラムが実行されている間、当該偽装プログラムを監視するステップと、
前記監視ステップによりイベントの発生が検知されたとき、前記命令対応情報から、当該偽装プログラムの実行位置に対応する前記対象命令と等価な命令を取得するステップと、
前記偽装プログラムのプログラム状態のデータを取得し、当該プログラム状態のデータを用いて、前記取得された等価な命令を前記異なる命令セットにおいて実行し、実行結果を前記偽装プログラムのプログラム状態のデータとして設定し、前記偽装プログラムの実行を再開する実行ステップと、
を備えることを特徴とする付記6に記載のプログラム難読化方法。
(付記8)
コンピュータに、
保護対象プログラムにおいて、書き換え対象となる対象命令を選択する処理、
前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成する処理、
前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得する命令取得処理、
前記対象命令の位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成する処理、
を実行させるためのプログラム。
(付記9)
前記コンピュータに、
異なる複数の命令セットから、前記保護対象プログラムに対応するプロセッサの命令セットとは異なる一つの命令セットを選択する選択処理をさらに実行させ、
前記命令取得処理は、前記選択処理により選択された命令セットにおける、前記対象命令と等価な命令を取得する、
ことを特徴とする請求項8に記載のプログラム。
(付記10)
保護対象プログラム中の一部の命令が偽の命令に書き換えられた偽装プログラムを実行するコンピュータに、
前記偽装プログラムにおける偽の命令の位置と、前記保護対象プログラムの命令体系とは異なる命令体系により記述された、前記対象命令と等価な命令と、が対応付けられている命令対応情報を参照して、前記偽装プログラムの実行位置が前記命令対応情報により示される各位置に達したときに当該偽装プログラムの動作を停止させるイベントが発生するように設定する処理、
前記偽装プログラムが実行されている間、当該偽装プログラムを監視する処理、
前記監視処理において前記イベントの発生を検知したとき、前記命令対応情報から、当該偽装プログラムの実行位置に対応する前記等価な命令を取得する処理、
前記偽装プログラムのプログラム状態のデータを取得し、当該プログラム状態のデータを用いて、前記取得された等価な命令を実行し、実行結果を前記偽装プログラムのプログラム状態のデータとして設定する処理、
前記偽装プログラムの実行を再開させる処理、
を実行させるためのプログラム。
(付記11)
前記コンピュータは、プロセスに対して1つのプロセスのみが監視できるオペレーティングシステムで動作する、
ことを特徴とする請求項10に記載のプログラム。
1 入力装置
2 ROM
3 CPU
4 RAM
5 外部記憶装置
6 表示装置
7 記録媒体駆動装置
8 通信制御部
10 プログラム難読化装置
20 プログラム制御装置
101 支援プログラム選択部
102 命令決定部
103 命令偽造部
104 仮想命令導出部
105 命令情報生成部
201 支援プログラム
211 監視動作開始処理部
212 イベント設定処理部
213 命令開始処理部
214 イベント検出処理部
215 仮想命令取得処理部
216 プログラム状態取得処理部
217 仮想命令実行処理部
218 プログラム状態設定処理部
300 保護対象プログラム
401 偽装プログラム

Claims (11)

  1. 保護対象プログラムにおいて、書き換え対象となる対象命令を選択する手段と、
    前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成する手段と、
    前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得する命令取得手段と、
    前記対象命令の命令位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成する手段と、
    を備えることを特徴とするプログラム難読化装置。
  2. 異なる複数の命令セットから、前記保護対象プログラムの命令セットとは異なる命令セットを一つ選択する選択手段をさらに備え、
    前記命令取得手段は、前記選択手段により選択された命令セット用の、前記対象命令と等価な命令を取得する、
    ことを特徴とする請求項1に記載のプログラム難読化装置。
  3. 保護対象プログラム中の一部の命令を偽の命令に書き換える難読化処理が施された偽装プログラムを実行するためのプログラム制御装置であって、
    前記書き換えられた命令の位置と、前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記書き換えられた命令と等価な命令とが対応付けられている命令対応情報を記憶する手段と、
    前記偽装プログラムの実行位置が、前記命令対応情報が示す各位置に達したときに、当該偽装プログラムの実行が停止されるイベントが発生するように設定する手段と、
    前記偽装プログラムが実行されている間、当該偽装プログラムを監視する監視手段と、
    前記監視手段がイベントの発生を検知したとき、前記命令対応情報から、当該偽装プログラムの実行位置に対応する前記等価な命令を取得する手段と、
    前記偽装プログラムのプログラム状態のデータを取得し、当該プログラム状態のデータを用いて、前記取得された等価な命令を前記異なる命令セットにおいて実行し、実行結果を前記プログラム状態のデータとして設定し、前記偽装プログラムの実行を再開させる実行手段と、
    を備えることを特徴とするプログラム制御装置。
  4. 前記プログラム制御装置は、プロセスに対して1つのプロセスのみが監視できるオペレーティングシステムで動作する、
    ことを特徴とする請求項3に記載のプログラム制御装置。
  5. プログラム中の保護対象命令を偽の命令に書き換えた第1のプログラムを実行する手段と、
    前記第1のプログラムの実行位置が前記偽の命令の開始位置に達したときに、第2のプログラムに制御を移す手段と、
    前記保護対象命令と等価な処理が前記保護対象命令とは異なる命令体系で記述された仮想命令を保持する手段と、
    前記第2のプログラムにより前記仮想命令を読み出して実行する手段と、
    を備えることを特徴とするプログラム制御装置。
  6. 保護対象プログラムにおいて、書き換え対象となる対象命令を選択するステップと、
    前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成するステップと、
    前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得するステップと、
    前記対象命令の位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成するステップと、
    を備えることを特徴とするプログラム難読化方法。
  7. 前記偽装プログラムの実行位置が、前記命令対応情報が示す各位置に達したときに、当該偽装プログラムの実行が停止されるイベントが発生するように設定するステップと、
    前記偽装プログラムが実行されている間、当該偽装プログラムを監視する監視ステップと、
    前記監視ステップによりイベントの発生が検知されたとき、前記命令対応情報から、当該偽装プログラムの実行位置に対応する前記対象命令と等価な命令を取得するステップと、
    前記偽装プログラムのプログラム状態のデータを取得し、当該プログラム状態のデータを用いて、前記取得された等価な命令を前記異なる命令セットにおいて実行し、実行結果を前記偽装プログラムのプログラム状態のデータとして設定し、前記偽装プログラムの実行を再開する実行ステップと、
    を備えることを特徴とする請求項6に記載のプログラム難読化方法。
  8. コンピュータに、
    保護対象プログラムにおいて、書き換え対象となる対象命令を選択する処理、
    前記保護対象プログラムについて、前記対象命令を偽の命令に書き換えた偽装プログラムを生成する処理、
    前記保護対象プログラムに対応する命令セットとは異なる命令セット用の、前記対象命令と等価な命令を取得する命令取得処理、
    前記対象命令の位置と、前記対象命令と等価な命令とを対応付けた命令対応情報を生成する処理、
    を実行させるためのプログラム。
  9. 前記コンピュータに、
    異なる複数の命令セットから、前記保護対象プログラムに対応するプロセッサの命令セットとは異なる一つの命令セットを選択する選択処理をさらに実行させ、
    前記命令取得処理は、前記選択処理により選択された命令セットにおける、前記対象命令と等価な命令を取得する、
    ことを特徴とする請求項8に記載のプログラム。
  10. 保護対象プログラム中の一部の命令が偽の命令に書き換えられた偽装プログラムを実行するコンピュータに、
    前記偽装プログラムにおける偽の命令の位置と、前記保護対象プログラムの命令体系とは異なる命令体系により記述された、前記書き換えられた命令と等価な命令と、が対応付けられている命令対応情報を参照して、前記偽装プログラムの実行位置が前記命令対応情報により示される各位置に達したときに当該偽装プログラムの動作を停止させるイベントが発生するように設定する処理、
    前記偽装プログラムが実行されている間、当該偽装プログラムを監視する監視処理、
    前記監視処理において前記イベントの発生を検知したとき、前記命令対応情報から、当該偽装プログラムの実行位置に対応する前記等価な命令を取得する処理、
    前記偽装プログラムのプログラム状態のデータを取得し、当該プログラム状態のデータを用いて、前記取得された等価な命令を実行し、実行結果を前記偽装プログラムのプログラム状態のデータとして設定する処理、
    前記偽装プログラムの実行を再開させる処理、
    を実行させるためのプログラム。
  11. 前記コンピュータは、プロセスに対して1つのプロセスのみが監視できるオペレーティングシステムで動作する、
    ことを特徴とする請求項10に記載のプログラム。
JP2010144541A 2010-06-25 2010-06-25 プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム Active JP5549810B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010144541A JP5549810B2 (ja) 2010-06-25 2010-06-25 プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010144541A JP5549810B2 (ja) 2010-06-25 2010-06-25 プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2012008825A JP2012008825A (ja) 2012-01-12
JP5549810B2 true JP5549810B2 (ja) 2014-07-16

Family

ID=45539281

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010144541A Active JP5549810B2 (ja) 2010-06-25 2010-06-25 プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5549810B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3330859A1 (en) * 2016-12-05 2018-06-06 Universiteit Gent Self-debugging
KR102105020B1 (ko) * 2019-08-30 2020-04-27 (유)아홉 가상 머신 기반 코드 변이 기술을 이용한 동적 자가변이 시스템
CN114217879B (zh) * 2021-12-23 2023-05-23 湖南小算科技信息有限公司 一种用于程序启动运行突破安卓幽灵进程限制的方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003271255A (ja) * 2002-03-12 2003-09-26 Ntt Comware Corp 実行プログラム作成システム、実行プログラム販売方法、実行プログラム作成システム用プログラム、実行プログラム作成システム用記録媒体
JP3944069B2 (ja) * 2002-12-06 2007-07-11 国立大学法人 奈良先端科学技術大学院大学 自己書換え処理追加プログラム、自己書換え処理追加装置及び自己書換え処理追加方法
US7370319B2 (en) * 2003-02-11 2008-05-06 V.I. Laboratories, Inc. System and method for regulating execution of computer software
GB2405958A (en) * 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation
JP4048382B1 (ja) * 2006-09-01 2008-02-20 富士ゼロックス株式会社 情報処理システムおよびプログラム
US8584109B2 (en) * 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance

Also Published As

Publication number Publication date
JP2012008825A (ja) 2012-01-12

Similar Documents

Publication Publication Date Title
JP4048382B1 (ja) 情報処理システムおよびプログラム
US20160275019A1 (en) Method and apparatus for protecting dynamic libraries
JP2013507670A (ja) 動的ファンクションコールシステムにおけるアグレッシブな自動修正のためのシステムおよび方法
CN107430650B (zh) 保护计算机程序以抵御逆向工程
WO2011134207A1 (zh) 软件保护方法
US9256756B2 (en) Method of encryption and decryption for shared library in open operating system
CN103116715A (zh) Windows平台可执行文件API延迟导入保护方法
US20190197216A1 (en) Method, apparatus, and computer-readable medium for executing a logic on a computing device and protecting the logic against reverse engineering
US10140477B2 (en) Obfuscating in memory encryption keys
US10902122B2 (en) Just in time memory analysis for malware detection
CN112434266A (zh) 一种shellcode控制流扁平化混淆方法
JP5549810B2 (ja) プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム
US8838996B2 (en) Non-transitory computer readable medium, program protection apparatus, and program protection method
de Assumpção et al. Forensic method for decrypting TPM-protected BitLocker volumes using Intel DCI
JP6256781B2 (ja) システムを保護するためのファイルセキュリティ用の管理装置
KR101052735B1 (ko) 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치
CN106407751B (zh) 对可执行文件进行保护的方法和装置
CN114579337A (zh) 用于在用户设备中生成核心转储的方法和系统
JP4125995B2 (ja) データ変換システム
JP2008191788A (ja) 情報処理装置
JP4728619B2 (ja) ソフトウェアの改竄検出装置、改竄防止装置、改竄検出方法及び改竄防止方法
KR102494837B1 (ko) 난독화 된 자바스크립트를 탐지하고 복호화하기 위한 방법 및 이를 위한 장치
JP2011048851A (ja) ソフトウェアの改竄検出装置及び改竄検出方法
JP2008059596A (ja) 情報処理システムおよびプログラム
JP2007041777A (ja) 言語処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130509

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140404

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140423

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140506

R150 Certificate of patent or registration of utility model

Ref document number: 5549810

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150