JP2015523635A - プログラムのリバースエンジニアリング及び/又は改竄に対する保護のための方法、システム及び装置 - Google Patents

プログラムのリバースエンジニアリング及び/又は改竄に対する保護のための方法、システム及び装置 Download PDF

Info

Publication number
JP2015523635A
JP2015523635A JP2015513320A JP2015513320A JP2015523635A JP 2015523635 A JP2015523635 A JP 2015523635A JP 2015513320 A JP2015513320 A JP 2015513320A JP 2015513320 A JP2015513320 A JP 2015513320A JP 2015523635 A JP2015523635 A JP 2015523635A
Authority
JP
Japan
Prior art keywords
processor
program
bit string
instruction
machine instructions
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.)
Granted
Application number
JP2015513320A
Other languages
English (en)
Other versions
JP6133409B2 (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.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips NV
Koninklijke Philips Electronics NV
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 Koninklijke Philips NV, Koninklijke Philips Electronics NV filed Critical Koninklijke Philips NV
Publication of JP2015523635A publication Critical patent/JP2015523635A/ja
Application granted granted Critical
Publication of JP6133409B2 publication Critical patent/JP6133409B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/16Program or content traceability, e.g. by watermarking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity

Abstract

コンピュータプログラムの権限のない使用が、単にプログラムをマシンコードにコンパイルするというよりプロセッサをコンパイルすることにより困難にされる。プロセッサがマシン命令に応答すべき方法、即ち該プロセッサの翻訳データが、入力としての任意のビット列B及びプログラムPから計算される。上記所与のビット列Bをマシン命令のソースとして使用する際にプログラムPにより定義される処理を実行するプロセッサの翻訳データが計算される。プロセッサは、マシン命令を上記翻訳データに従って実行するように構成される。この場合、他のプログラムP’は、当該プロセッサに対するマシン命令B’にコンパイルされ、該プロセッサにより実行される。ビット列B及び元のプログラムPを知らなければ、マシン命令B’を別のプロセッサが上記他のプログラムP’を実行するように修正することは困難である。

Description

本発明は、プログラムのリバースエンジニアリング及び/又は改竄に対する保護をサポートするコンピュータプログラムの実行を行う方法に関すると共に、プログラムを実行する装置及びシステムに関する。
今日、インターネットはデジタルコンテンツに対する便利且つユビキタスなアクセス手段を提供している。参加する装置(例えば、PCプラットフォーム)の開放性のため、インターネットを機密的コンテンツに対する分配媒体として使用することは、コンテンツ提供者の利益を確保するための不可避的難題を生じる。特に、PC又はアンドロイド・オペレーティングシステム等のプラットフォームの場合、ユーザは、当該コンテンツに対するアクセス並びに如何なるコンテンツ保護メカニズムをも攻撃及び迂回するための無制限な量の時間及び資源を提供するハードウェア及びソフトウェアの完全な制御を有することが前提とされねばならない。
アプリケーションの一律の実行のために、インターネットは所謂仮想マシン(例えば、Java(登録商標)VM)を実行する受信側プラットフォームを必要とする。これらの仮想マシンは、開放型で、一律で且つ良く文書化された実行環境を提供する。結果として、アプリケーションのリバースエンジニアリング及び改竄の防止は困難となるので、インターネットの分配媒体としての脆弱性は増幅される。
本発明の目的は、なかでも、解放型環境で実行されるアプリケーションのリバースエンジニアリング及び改竄攻撃に対する保護を向上させることにある。
本発明は、独立請求項により定義される。従属請求項は有利な実施態様を定義している。
一態様によれば、プロセッサを構成(configure)する方法が提供され、該方法は、
− ビット列(bit string)及びプログラムを入力するステップと、
− プロセッサを、該プロセッサが上記ビット列をマシン命令のソースとして使用する場合に上記プログラムを実行するように構成するステップと、
を有する。
このようにして、上記の構成されたプロセッサに対する他のプログラムの許可されない(権限のない)使用は困難にされる。攻撃者は当該プロセッサがどの様に構成されているかを知る必要があるが、このことは、該構成が当該プロセッサを構成するために使用されたプログラムに依存し、このプログラムは該攻撃者には未知であり得るので、困難である。
本発明は、通常のコンパイラが行うことと逆のことを行うコンパイラで実現することができる。即ち、所与の(仮想)プロセッサに対するマシン命令プログラムを、より高いレベルのプログラムからコンパイルするというより、該コンパイラは(仮想)プロセッサをマシン命令プログラム及び一層高いレベルのプログラムからコンパイルする。これは、上記のコンパイルされた(仮想)プロセッサのために一層高いレベルのプログラムから他のプログラムをコンパイルするコンパイラと組み合わせることができる。
好ましい実施態様において、本方法は、プログラムを一連の基準マシン命令(reference machine instructions)に翻訳するステップと、前記ビット列及び前記一連の基準マシン命令から、プロセッサを該プロセッサが前記ビット列をマシン命令のソースとして使用する場合に該プロセッサがプログラムを実行するように構成するための翻訳データを計算するステップと、プロセッサを該プロセッサがマシン命令を前記翻訳データに従って実行するように構成するステップとを有する。
前記翻訳データは、前記ビット列の一部から、例えば加算、減算、ロード、記憶(ストア)及びジャンプ命令(operation)等のためのオペコード等の、マシン命令のオペコードへの翻訳を定義するデータを含むことができる。
プロセッサを構成するために、仮想マシンを実施化する如何なる既知の方法も用いることができる。例えば、構成されたプロセッサのソフトウェアエミュレーションは、例えばジャバ(JAVA(登録商標))仮想マシンエミュレーションに関して知られている技術を用いることができる。また、前記基準命令は仮想マシンのための命令とすることができる。
他の例として、プロセッサは、該プロセッサに当該処理を実行させるためにマシン命令をプロセッサ用の制御信号に翻訳するデータをルックアップテーブルにロードすることにより、当該翻訳を実行するようにプログラマブルロジックアレイ等の翻訳回路を構成することにより、翻訳データに従ってマシン命令に対応する処理を実行するように設計された論理回路構造を備えた処理回路を有する集積回路を製造することにより、又は仮想マシンをサポートする何らかの他の方法により構成することもできる。
プロセッサの構成は、当該構成の反復的適用により更に隠蔽することができる。
一実施態様において、当該方法は、前記ビット列を前記プロセッサにより各マシン命令として使用するための連続する各部分に分割するステップ、及び上記ビット列の上記各部分を前記一連の基準マシン命令における対応する位置の基準マシン命令に翻訳するための翻訳を決定するステップを有する。上記ビット列を連続する部分に分割することにより、これら部分は前記一連の基準マシン命令における対応する各マシン命令と1対1の対にされ得る。部分ビット列とマシン命令との各対に対して、翻訳を、例えばルックアップテーブルの形態で又はブール関数の一部として導出することができる。
複数の異なるビット列が同一の基準命令に翻訳されねばならないことが起こる可能性があるが、これは問題ではない。翻訳データは、複数の異なるビット列を同一の基準命令に単にマッピングすればよい。ビット列の2以上の部分が同一であるが、異なる基準命令にマッピングされることを要する逆の状況は、多数のやり方で解決することができる。
例えば、ビット列の連続する各部分を、基準マシン命令の長さより大きな長さを有するように選択することができる。例えば、全ての基準マシン命令は特定の数のビット長とすることができる一方、ビット列の連続する全ての部分は幾らか大きな数のビット長とする。ビット列に割り当てられた各追加のビットにより、衝突の機会が減少される。
衝突を解決するための第2の方法として、当該方法はプロセッサにより実行される際の下位ビット列の異なる部分に対応するプログラムカウンタ値を決定するステップを有することができる。例えば、当該プログラムの基準プロセッサへのロードをシミュレーションし、各命令がロードされるアドレスを決定することができる。基準命令に対応する部分は、同一のプログラムカウンタ値を有すると決定される。一部分から命令への翻訳データを決定する前に、ビット列の部分はプログラムカウンタ値から導出された情報と組み合わされ、かくして、明確にされた部分を得る。当該翻訳は明確にされた部分から基準マシン命令へとなされる。
例えば、プログラムカウンタの1以上の最下位ビットを当該部分に連結することができる。例えば、プログラムカウンタ値を一層少ない数のビットに要約(hash)し、該一層少ない数のビットを当該部分に付加することができる。
プログラムカウンタ値の十分に多くの情報を各部分と組み合わせれば、翻訳データが大きくなることを犠牲にして、常に斯かる各部分を明確にすることに成功する。
翻訳は一層小さな規模で決定することができる。例えば、翻訳データは当該部分の異なる下位部分を、当該基準マシンプログラムにおける対応する位置の基準マシン命令のオペコード(operation code)、オペランド及び/又は結果コードに翻訳する。
例えば、基準命令の一部のために必要とされる複数の翻訳を複数のオペコードに対して別途実施することができ、次いで当該翻訳をオペコード毎に実施することができる。
当該ビット列における複数の部分が、当該プログラムにおける複数の基準命令より短いことが起こり得る。このことは、該ビット列に詰め物をすることにより解決することができる(即ち、当該ビット列に値零を持つビットを挿入する)。このことは、この部分に関してビット列を無視し、プログラムカウンタのみに依存することにより解決することもできる。しかしながら、部分の数は少なくとも基準命令の数であることが好ましい。例えば、一実施態様において、Bにおけるビットの数は、少なくとも基準命令の数程度に大きいことが必要とされる。
興味深いことに、上記ビット列を入力し、上記翻訳データに従う翻訳を適用する場合に上記基準命令を実行するようなプロセッサが得られる。更に、該プロセッサはそれでもプログラマブルであり、任意のプログラムを実行することができる。例えば、当該方法は、前記翻訳データにより定義される翻訳の下で前記基準マシン命令に翻訳するオリジナルを有さない基準マシン命令を決定するステップと、前記オリジナルを有さない基準マシン命令に対して前記翻訳データにおいて既に定義されたオリジナルとは異なるオリジナルを選択すると共に、前記プロセッサを構成するための前記翻訳データを、該プロセッサが前記選択されたオリジナルをマシン命令のソースとして使用する場合に前記構成されたプロセッサが前記決定された基準マシン命令を実行するように拡張するステップとを有する。
上記翻訳データは、該翻訳データにより構成されたプロセッサのためのコンパイラに対して利用可能にさせることができる。このことは、上記コンパイラにより他のプログラムをコンパイルし(該コンパイルは上記プロセッサのためのコンパイルされたマシン命令のプログラムを生成する)、上記のコンパイルされたマシン命令のプログラムを該プロセッサにより実行することを可能にする。
本発明の一態様は、プロセッサを構成するための装置に関するものであり、該装置は、
− ビット列及びプログラムを入力する入力部と、
− 構成プロセッサと、
を有し、前記構成プロセッサは、
− 前記プログラム(P)を一連の基準マシン命令に翻訳し、
− 前記ビット列及び前記一連の基準マシン命令から、前記プロセッサが前記ビット列をマシン命令のソースとして使用する場合に該プロセッサが前記プログラムを実行するように該プロセッサを構成するための翻訳データを計算し、
− プロセッサを、該プロセッサが前記翻訳データに従ってマシン命令を実行するように構成する、
ように構成される。
一態様によれば、プロセッサを構成する方法が提供され、該方法は、
− ビット列Bを供給するステップと、
− プログラムPを入力するステップと、
− 前記ビット列Bをマシン命令のソースとして使用する場合に前記プログラムPにより定義される処理を実行するプロセッサの演算的意味(operational semantics)を計算するステップであって、該演算的意味が入力としての前記ビット列B及び前記プログラムPから計算されるステップと、
− プロセッサを、該プロセッサがマシン命令を前記演算的意味に従って実行するように構成するステップと、
を有する。
このようにして、他のプロセッサ上の前記構成されたプロセッサに対する他のプログラムの権限のない使用は困難にされる。攻撃者は、そのようにするためには上記構成されたプロセッサの演算的意味を決定する必要があり、このことは、当該プロセッサを構成するために使用された上記ビット列及びプログラムが分からない場合は困難である。
従来のコンパイラが行うのとは逆を行うコンパイラが提供される。即ち、より高いレベルのプログラムから所与の(仮想)プロセッサのためのマシン命令プログラムをコンパイルするというより、該コンパイラはマシン命令プログラム及び一層高いレベルのプログラムから(仮想)プロセッサをコンパイルする。このことは、該コンパイルされた(仮想)プロセッサのための他の高いレベルのプログラムから、他のプログラムをコンパイルするコンパイラと組み合わせることができる。
プロセッサの演算的意味は、 加算、減算、ロード、記憶(ストア)及びジャンプ命令等のためのオペコード(operation codes)のような、マシン命令のオペコードに対応する処理を定義するデータを含むことができる。仮想マシンを実施化する如何なる既知の方法も、当該プロセッサを所与の演算的意味に従って構成するために使用することができる。例えば、演算的意味のソフトウェアエミュレーションを、例えばジャバ(JAVA(登録商標))仮想マシンエミュレーションに関して知られている技術を用いて使用することができる。他の例として、プロセッサは、プロセッサに当該処理を実行させるためにマシン命令を該プロセッサ用の制御信号に翻訳するデータをルックアップテーブルにロードすることにより、当該翻訳を実行するようにプログラマブルロジックアレイ等の翻訳回路を構成することにより、当該演算的意味に従ってマシン命令に応答して対応する処理を実行するように設計された論理回路構造を備えた処理回路を有する集積回路を製造することにより、又は仮想マシンをサポートする何らかの他の方法により構成することもできる。
上記プロセッサの構成は、当該構成の反復的適用により更に隠蔽することができる。
コンピュータプログラムの許可されない使用は、単にプログラムをマシンコードにコンパイルするというよりプロセッサをコンパイルすることにより困難にされる。当該プロセッサがマシン命令に応答すべき方法、即ち該プロセッサの演算的意味が、入力としての任意のビット列B及びプログラムPから計算される。プロセッサが上記所与のビット列Bをマシン命令のソースとして使用する際に上記プログラムPにより定義される処理を実行する該プロセッサの演算的意味が計算される。プロセッサは、該プロセッサが上記演算的意味に従ってマシン命令を実行するように構成される。この場合、他のプログラムP’を、当該プロセッサのためのマシン命令B’にコンパイルすることができ、該プロセッサにより実行することができる。上記ビット列B及び元のプログラムPを知らなければ、マシン命令B’を別のプロセッサが上記他のプログラムP’を実行するように修正することは困難である。
一実施態様において、当該方法は、前記演算的意味を持つプロセッサのためのコンパイラにより他のプログラムP’をコンパイルするステップであって、該コンパイルが該プロセッサのためのコンパイルされたマシン命令のプログラムを生成させるステップと、該コンパイルされたマシン命令のプログラムを前記プロセッサにより実行するステップとを有する。
一実施態様において、前記プログラムPは、他のプロセッサをシミュレーションするための、プログラマブルプロセッサのシミュレータプログラムである。
一実施態様において、前記プログラマブルプロセッサのシミュレータプログラムは、他のビット列を供給するステップと、他のプログラマブルプロセッサのシミュレータプログラムを入力するステップと、前記他のプログラマブルプロセッサのシミュレータプログラムにより定義される処理を、他のプログラマブルプロセッサが前記他のビット列をマシン命令のソースとして使用する場合に実行する該他のプログラマブルプロセッサの他の演算的意味を計算するステップであって、該他の演算的意味が入力としての前記他のビット列及び前記他のプログラマブルプロセッサのシミュレータプログラムから計算されるステップとにより得られる。
一実施態様において、前記ビット列B及び前記他のビット列は互いに異なる。
一実施態様において、当該方法は、オリジナルのアプリケーションAを入力するステップと、該オリジナルのアプリケーションAを第1部分A1及び第2部分A2に分割するステップと、前記第1部分A1を前記プログラムPとして使用するステップと、前記第2部分A2のオブジェクトコードを前記ビット列Bとして使用するステップとを有する。
一実施態様において、当該方法は、オリジナルのアプリケーションAを入力するステップと、該オリジナルのアプリケーションAを第1部分A1及び第2部分A2に分割するステップと、前記第1部分A1を前記プログラムPとして使用するステップと、前記第2部分A2を透かし(watermark)Cと組み合わせるステップと、該第2部分A2及び透かしCの組み合わせを前記ビット列Bとして使用するステップとを有する。
一実施態様において、結果としてのプロセッサPは合成可能なハードウェア記述として表される。
一実施態様において、前記ビット列Bの部分は、知的所有権を主張するテキスト又は標示の表現である。
一実施態様において、前記ビット列Bの部分は、ユーザを識別するテキストの表現である。
一実施態様において、前記ビット列Bの部分は、計算環境から動的に収集される。
一実施態様において、入力される上記ビット列の如何なる変更も、オリジナルのアプリケーションαが正しく動作することを妨げる。
本発明の一態様は、コンピュータプログラム製品に関するものであり、該コンピュータプログラム製品は、コンピュータにより実行された場合に該コンピュータに:プログラムPを入力させ;ビット列Bをマシン命令のソースとして使用する場合に前記プログラムPにより定義された処理を実行するプロセッサの演算的意味を計算させ(該演算的意味は入力としての前記ビット列B及び前記プログラムPから計算される);プロセッサを、該プロセッサがマシン命令を前記演算的意味に従って実行するように構成するための構成データを発生させる命令のプログラムを有する。
上記及び他の目的並びに有利な態様は、添付図面を使用する例示的実施態様の説明から明らかとなるであろう。
図1は、プログラムを実行するシステムを示す。 図2は、プロセッサのアーキテクチャを示す。 図3は、変形コンパイルを示す。 図4は、変形コンパイルを示す。 図5は、変形コンパイルを示す。 図6は、変形コンパイルを示す。 図7は、変形コンパイルを示す。 図8は、変形コンパイルを示す。 図9は、他の実施態様を示す。 図10は、他の実施態様を示す。 図11は、他の実施態様を示す。
図1は、プログラムを実行するための例示的システムを示す。図示された実施態様は本発明を限定するというよりも解説するために提示されていることを強調しておく。例えば、本発明は該図に示されたもの以外のタイプのプロセッサにより実施化することもできる。該システムは、構成コンパイラ(configuration compiler)10、プログラムコンパイラ11及びプロセッサ12を有している。構成コンパイラ10及びプログラムコンパイラ11は、コンピュータ(明示的に示されていない)上で動作するコンピュータプログラムにより実施化することができる。
プロセッサ12は、プログラムメモリ120、プログラムカウンタ122、命令デコーダ124、命令デコード制御メモリ126、実行回路128及びデータメモリ129を有している。コンパイラ10は、プログラムPを入力するための入力端を有すると共に、プログラムメモリ120及び命令デコード制御メモリ126に結合されて、マシンコードプログラムB及び該マシンコードプログラムBからの命令に対するプロセッサ12の応答を定義するデータQをプログラムメモリ120及び命令デコード制御メモリ126に各々記憶させるための出力端を有している。命令デコーダ124は、命令(プログラム)メモリ120の出力端と実行回路128の制御入力端との間に結合されている。プログラムカウンタ122は命令メモリ120のアドレス入力端及び命令デコーダ124に結合されている。実行回路128はデータメモリ129及び実行回路126のI/O端子に結合されている。
構成コンパイラ10、プログラムコンパイラ11及びプロセッサ12は単一のシステムの一部として図示されているが、これらは直接結合される必要はないと理解されるべきである。プロセッサ12は、該プロセッサ12がプログラムを実行するコマンドを受けた場合に、半導体メモリ、磁気又は光ディスク等のコンピュータ読取可能な媒体から該プロセッサ12に構成コンパイラ10及びプログラムコンパイラ11の出力をロードすることができ、又は例えばプロセッサ12の製造の間のような早期にロードすることもできる。構成コンパイラ10及びプログラムコンパイラ11は出力データをコンピュータ読取可能な媒体上に直接書き込むことができ、又は、次いで、プロセッサ12に到達する前に如何なる回数でも送信及び/又はコピーすることもできる。
プロセッサ12は、命令デコード制御メモリ126からのデータに依存して、プログラムメモリ120からのマシン命令を命令デコーダ124により実行回路のための制御コードに翻訳する。一実施態様において、マシン命令は演算コード(オペコード)を含むと共に、オプションとして1以上のオペランドコードを含む。オペランドコードはオペコードにより示される演算のための入力データを伴うレジスタのアドレス及び該演算からの出力データが記憶されるべきレジスタのアドレスを識別することができる。アドレスの代わりに、オペランドコードはリテラルデータを示すことができるか、又はオペランドデータのアドレスを記憶するレジスタのアドレスを示すこともできる。一実施態様において、上記の翻訳された制御コードも、同様に、実行回路128により解釈及び実行されるべきオペコード及びオペランドコードを有することができるが、代わりに、斯かる制御コードは実行回路128の構成要素を直接制御するためのマイクロコードとすることもできる。
異なるタイプのプロセッサは同一の演算を示すために異なるオペコードの使用を必要とし、これらはオペランドデータ及び結果の記憶位置を示すための異なる方法を必要とし得る。特定のタイプのプロセッサが命令に対して付与する解釈は、即ち、特定のタイプのプロセッサが個々の命令に応答する方法は、このタイプのプロセッサの演算的意味(operational semantics)Qと呼ばれる。本明細書で使用される場合、演算的意味とは、プロセッサ12がマシン命令に対してどの様に応答するかを定義するデータを指す。異なるタイプのプロセッサは、異なる演算的意味Q及びQ’を有し得る。記号Qは、演算的意味Qを持つプロセッサを指すためにも、即ち、当該プロセッサが演算的意味Qと一貫性のある命令を実行するように構成される場合に、使用される。
図2は、プログラムメモリ、命令フェッチャ、命令デコーダ、実行ユニット、プログラムカウンタ(PC)、レジスタファイル及びデータメモリを有する、より一般的なプロセッサアーキテクチャを示す。上記命令フェッチャは、プログラムカウンタ値を入力し、プログラムメモリからビットパターンを取り出す。このビットパターン(命令)は上記命令デコーダに供給される。該命令デコーダは上記実行ユニットを操作するための実行ビットを発生する。これらの実行ビットは、マイクロ命令のように複雑なもの及びレジスタインデックスのための単項エンコーディングのような簡単なものを含み得る。該実行ユニットは、該実行ビットを実行する。即ち、該実行ユニットは、これらのビットの制御の下で演算(処理)を実行する。上記実行ビットの制御の下で、該実行ユニットはレジスタファイル/データメモリからデータを取り出し、前記プログラムカウンタを更新することができる。
前記プログラムメモリに保持される命令は、しばしば、“マシンコード”と呼ばれる。これらは、しばしば、アセンブリ命令と1対1の関係を持つビットパターンである。これらビットパターンは、前記実行ユニットにおける実行のパターンにつながる。この実行パターンはプログラムの実行挙動を決定する。該実行パターンを、プログラムの意味と称する。
図2の例において、演算的意味Qは前記命令デコーダ及び/又は実行ユニットにより定義することができる。図1の例において、演算的意味Qは前記命令デコード制御メモリ126に記憶された情報により適応的に定義することができる。
命令デコーダ124は二進パターンを、例えば命令メモリ120から入力される命令のオペコードを、実行回路128に供給するための命令デコード制御メモリ126における翻訳されたオペコードをルックアップするために使用することにより翻訳することができる。元(オリジナル)のオペコード及び翻訳されたオペコードは同一の長さ(例えば、8ビット)を有することができるが、これは必要ではない。元のオペコードは、翻訳されたオペコードよりも長くても良く、又は説明されるように短くてさえもよい。同様にして、命令デコーダ124は、入力された命令のオペランド及び結果レジスのタアドレス、リテラルデータ及び/又は他のデータを、該入力された命令の一部を、実行回路128に供給するための命令デコード制御メモリ126における翻訳されたアドレス又はデータをルックアップするために使用することにより翻訳することができる。元のオペランド/結果レジスタアドレス/データ及び翻訳されたオペランド/結果レジスタアドレス/データは同一の長さを有するが、前記オペコードの場合と同様に、これは必要ではない。
プログラムコンパイラ11は、コンパイルモードにおけるコンパイルをサポートするように構成された通常のコンパイラとすることができ、該コンパイラ11はプログラムP’を、命令メモリ120に記憶するための特別に構成されたプロセッサ12用のマシン命令の系列に翻訳する。構成コンパイラ10はコンパイルモードをサポートするように構成され、該コンパイルモードにおいて該構成コンパイラ10はマシンコードプログラムB及びプログラムPを入力すると共に、第2コンパイルモードにおける命令に対するプロセッサ12の応答を定義するデータQを発生する。このコンパイルモードにおいて、構成コンパイラ10は該演算的意味Qを命令デコード制御メモリ126にプロセッサ12の命令に対する応答を定義するデータとして記憶する。
[変形コンパイルの基本原理]
プロセッサ等のプログラム可能な装置は、多様なソフトウェアプログラムを実行することができる。実行することが可能なプログラムの数は、通常、利用可能な時間及びメモリ等の資源の制限によってのみ制限される。プロセッサ上で動作するプログラムは、当該プロセッサにより解釈されるビットパターンとして符号化される。例示的実施態様において、ビットパターンは一連のマシン命令を有する。コンパイラは、プログラムの高レベル記述を、これらのビットパターンに変換する。高レベル記述は、通常、C、ジャバ、フォートラン等のプログラミング言語を用いて作成される。この変換において重要なことは、当該ビットパターンのプロセッサの解釈が、当該高レベルプログラムの当該プログラミング言語の仕様に従う意味に等しいということである。他の実施態様では、コンパイラは、アセンブリレベルのプログラム等の低レベルプログラム又はジャババイトコードのプログラム等の仮想マシンのためのプログラムを変換することができる。
オリジナルのプログラムをP、ビットパターンをB、言語標準解釈(又は表示的意味:denotational semantics)をM、及びプロセッサの解釈(又は演算的意味)をQと呼ぶならば、正しいコンパイラは:
M(P)=Q(B)
を成立させなければならない。
このように、P及びMが与えられた場合、正しいコンパイラCは上記等式を満足させるビットパターンB=C(P)を生成するであろう。言い換えると、プログラムBの実行は、言語標準解釈が付与されたプログラムにより定義される入力データに対するプロセッサ応答を生成しなければならない。等式M(P)=Q(B)は、例えば、プログラムPの基準マシン言語プログラムへの翻訳における及びビット列Bにおける対応する位置の全ての命令が、M(OB)=M(OP)を満足する、即ち、これらの命令が同一の演算を参照すること、並びに該命令におけるオペランド/結果コードにより示される記憶位置の間に1対1のマップが存在すること、及び/又はリテラルデータが等しいことを満足するオペコードOB、OPを有する場合に、満たされ得る。
Mはプログラミング言語に依存することに注意されたい。プログラムPは、異なるプログラミング言語に対して異なる意味を有し得る。同様に、Qはアプリケーションを実行する実際のプロセッサに依存する。同一のビットパターンは、異なるプロセッサにより実行された場合、異なる結果を有し得る。例えば、インテル・プロセッサによりウェブブラウザとして解釈されるビットパターンは、ARMプロセッサ上では有効な解釈は有さないであろう。異なる演算的意味Q及びQ’を有する異なるタイプのプロセッサに対しては、通常、M(P)=Q(B)及びM(P)=Q’(B’)なる条件を満たす異なるビットパターンB及びB’が必要とされる。
従来のコンパイラの場合、通常、M及びQは固定であり、所与のPに対してBが計算されることが分かる。時には、Mが固定され、前記式が成り立つように、ツールが特注ハードウェアQ及び付随するビットパターンBを発生する。Bを変更することにより、ハードウェアQ上で新たなプログラムPを実行することができるが、これらのプログラムの選択は、発生されたQが少ないビットパターンしか解釈することができないという点で制限される。この場合、特注の非プログラマブル設計の話をしている。
変形コンパイル(metamorphic compilation)においては、P及びBは固定され、Qが発生される。このように、変形コンパイラは所与のビットパターンBをプログラムPとして解釈するプロセッサを作製する。このことは、Bを無視する特注のハードウェアを発生することにより容易に達成することができる。非プログラマブル設計とは対照的に、変形コンパイラは、プロセッサQにより実行することが可能なアプリケーションの範囲がメモリ及び時間資源によってのみ制約されるという点でプログラマブルであるプロセッサQを発生する。
変形コンパイルの間に発生されるプロセッサQは、他の実行プラットフォーム上でエミュレーションされる仮想マシンであり得るか、又は例えば合成可能なヴェリログ(Verilog)又はVHDLにより表されるハードウェア設計であり得る。この方法を支援するために、変形コンパイラはコンパイラCQも発生し、このコンパイラCQはプロセッサQ上で実行するために該コンパイラCQにより受け入れられるプログラミング言語で書かれた任意のプログラムP’をコンパイルするものである。
要約すると、変形コンパイルを、古典的なハードウェア及びソフトウェアコンパイルと以下のように対比することができる:
− ソフトウェアコンパイルは、任意のプログラム及び固定のプロセッサに対してビットパターンを発生する;
− ハードウェアコンパイルは、固定のアプリケーションに対してビットパターン及びプロセッサを発生する;
− 変形コンパイルは、固定のビットパターン及び任意のプログラムに対してプロセッサ及びコンパイラを発生する。
これを、図3〜8を用いて説明する。“P”をプログラムとする。“B”を、命令メモリ内の当該プログラムに対してコンパイラ“C”により作成される二進イメージとする。“S”を、“B”により発生される前記実行ユニット内の実行パターンとする(図3参照)。
“P_1”を別のプログラムとする。同一のコンパイラ“C”が“P_1”を別の二進イメージ“B_1”に変換する。この二進イメージは、同一のプロセッサ内に新たな実行パターン“S_1”を発生させる(図4参照)。
変形コンパイルにおいては、図2の命令デコーダを置換する。“Z”を、ユーザにより選択される二進パターンとする。これは、例えば画像、テキストファイル又は何らかの他のデータを表すパターン等の、如何なる二進パターンとすることもできる。図2における命令デコーダを、命令メモリから読み取り、実行ビットを生成する別のデコードdecode_2により置換する。decode_2が“Z”を含む命令メモリから発生するビットは、二進イメージ“B”に対して元の命令デコーダにより発生される実行ビットと等しい。従って、“Z”により発生される実行パターンは、“B”により発生される実行パターンと同一である。図5における“MM_processor”は、該新たな命令デコーダを使用するプロセッサである。発生される実行パターンが等価である限りにおいて、正確に同一の実行ビットを発生する必要はない。当該例示的構成においては、同一の実行ビットを発生する。
“Z”はユーザにより選択されるので、これは、例えば単に“0”を含むメモリ等の如何なるものでもよい。同一の系列の実行ビットを発生することができるように、当該命令デコーダは、適切な実行ビットを発生するためにプログラムカウンタのビットパターン(これは、プログラムメモリ内の各命令に対して固有である(これは命令アドレスである))を使用することができる。このことは、使用するプロセッサテンプレートがデコードユニット内でプログラムカウンタを使用することを意味する。図6を参照されたい。
decode_2は、多様な実行ビットパターンを発生することができる。decode_2を用いて構築されるプロセッサは、依然としてプログラマブルである。図2における通常のコンパイラと同様にプログラムメモリのためのビットパターンを発生するコンパイラを作成することができる。この新たなソフトウェアコンパイラ(D)は、元のプログラム“P”をビットパターン“Z”にコンパイルする。図7を参照されたい。
プログラム“P_1”を、先に見たものと同一の実行パターン“S_1”を発生させる新たな二進イメージ(例えば、“B_2”)にコンパイルすることも可能である(図8参照)。
[変形コンパイルの一実施態様]
図1を参照することにより説明したタイプのプロセッサを使用する実施態様において、構成コンパイラ10は一連のステップにおいて変形コンパイルを実施することができる。第1ステップにおいて、構成コンパイラ10はプログラムPを、基準実行回路のための一連の基準マシン命令(reference machine instructions)に翻訳することができる。第2ステップにおいて、構成コンパイラ10は、入力されたビット列Bを、各々が対応するマシン命令として使用することができる一連の部分に分割することができる。
第3ステップにおいて、構成コンパイラ10は、基準マシン命令を、上記一連の基準マシン命令及び上記ビット列Bの各々における対応する位置のビット列Bの部分と比較する。この比較から、構成コンパイラ10は、対応する位置において上記ビット列の部分を基準マシン命令に翻訳するために必要とされる翻訳を決定する。例えば、上記部分の異なる下位部分を、基準マシンプログラムにおける対応する位置の基準マシン命令のオペコード並びにオペランド及び結果コードと比較することができる。このことから、上記下位部分におけるビット列Bからの情報のためのルックアップデータを、基準マシン命令から抽出することができる。第4ステップにおいて、構成コンパイラ10は、結果としての情報(例えば、上記ルックアップデータ)をプログラムコンパイラ11に対して利用可能にさせ、その結果、プログラムコンパイラ11は発生された演算的意味を持つプロセッサに対してプログラムP’をコンパイルするように構成される。第5ステップにおいて、構成コンパイラ10は、結果としての情報(例えば、上記ルックアップデータ)が、命令デコード制御メモリ126に記憶されるようにさせる。
一実施態様においては、重なり合わない下位部分が使用される。しかしながら、重なり合う下位部分を使用することも可能である。例えば、上記基準マシン命令プログラムにおける特定の演算は、特定のレジスタオペランドを含み得る。この場合、構成コンパイラ10は、対応する基準マシン命令を調べることにより、ビット列Bにおける上記特定のレジスタオペランドを必要とする全ての部分(“B命令”)を検索することができる。構成コンパイラ10は、上記基準マシンプログラムにおける対応する命令に対して、“B”における命令が該特定のオペランドを必要とするか、又は必要としないか(又は、可能性として、どちらでもよい)を示すルックアップテーブルを発生することができる。ルックアップテーブルの代わりに、構成コンパイラ10は、基準マシンプログラムにおける対応する命令に適用された場合に、この特定のオペランドが必要とされるか否かを示す結果となるブール式を導出することもできる。ルックアップテーブルに基づいてブール式を発生する方法自体は既知である。プログラムの実行の間において、当該命令がオペランドを必要とするか否かを決定するために、このブール式をBの各部分(“B”命令)に適用することができるか、又は各部分をルックアップテーブルに対する入力として使用することができる。該ブール関数は、Bの部分の下位部分を入力として必要とする。他のブール関数を、命令の他の特徴(例えば、オペコード)をBの部分の別の下位部分(可能性として重なっても良いが)を用いて決定するために導出することができる。
ビット列B及びプログラムPの内容に依存して、ビット列の異なる下位部分における同一の内容は異なる方法で翻訳されることを要し得るという点で、曖昧さ(不明確さ)が生じ得る。構成コンパイラ10は斯様な曖昧さを種々の方法で解決することができる。一実施態様において、コンパイラは、斯様な曖昧さを防止し又は斯かる曖昧さの数を減少させるために、命令として扱われるビット列Bの部分の長さ、及び、オプションとして、オペコード又はオペランド/結果データ/アドレスとして使用される下位部分の長さを増加させることができる。
一実施態様において、命令デコーダ124は翻訳を明確にするためにプログラムカウンタ値を使用するように構成することができる。例えば、命令デコーダ124は翻訳をルックアップするために、命令メモリ120からの命令の一部又は部分と組み合わせて該プログラムカウンタ値から導出される情報を供給するように構成することができる。コンパイラ10は、プログラムカウンタ値から導出される情報及びビット列Bの部分からデータの異なる組み合わせの翻訳を選択するために、部分列の異なる部分に対応するプログラムカウンタ値を決定するように構成することができる。
他の実施態様において、命令デコーダ124はプログラムカウンタからの情報の構成可能な抽出を行うことができる。この実施態様において、構成コンパイラ10は、使用される情報を定義するために、命令デコーダ124の構成を選択するように構成することができる。例えば、コンパイラ10は、ビット列Bの同一の下位部分に付与されるべき全ての異なる翻訳を収集し、プログラムカウンタ値から情報を導出する複数の所定の方法のうちの、これら翻訳を明確にするために十分な情報を提供する1つを選択し、命令デコーダ124が該選択された情報導出方法を使用するよう構成されるようにすることができる。この条件を満たすと共に最小限の量の情報しか必要としない情報導出方法を選択することができる。例えば、異なる情報導出方法は、プログラムカウンタ値のうちの異なる数の可変最下位ビットを使用することができる。
同様の明確化法を、曖昧な翻訳を有するビット列Bの複数の下位部分に適用することができる。構成コンパイラ10は、明確化のために、ビット列Bの一層長い部分を命令として使用することと、プログラムカウンタの一層多くを使用することとの間での取引を用いることができる。更に、曖昧さの量は、翻訳を定義するためにプログラムPの一部のみを使用すると共に、該プログラムの残部に対しては通常のコンパイルを用いることにより低減することができる。
勿論、幾つかの可能性のある基準マシン命令、オペコード又はオペランドコードは、可能性のある基準マシン命令に翻訳する(転換する)オリジナルのものを有さないかもしれない。このことは、これらの可能性のある基準マシン命令、オペコード又はオペランドコードが当該プログラムのためのマシンプログラムに発生しない場合には、該プログラムにとり問題ではない。しかしながら、他のプログラムを実行するためには、これらのマシン命令、オペコード又はオペランドコードに対して任意のオリジナルのものを選択することができる(これらが既に選択されたオリジナルのものから異なる限りにおいて)。オプションとして、このようなオリジナルは、ビット列Bの使用されない部分に基づいて選択することができる。
このようにして、プロセッサの演算的意味Q(この演算的意味を持つプロセッサも、プロセッサQと称する)は、プログラムP及びビット列Bに基づいて定義することができる。構成コンパイラ10の一例を図1のシステムの前後関係において示したが、他の実施態様も可能であることに注意すべきである。例えば、命令の翻訳はソフトウェア制御の下で実行することもできる。即ち、エミュレーションを用いることができる。この場合、命令デコーダ124及び命令デコード制御メモリ126の機能は、エミュレーションプログラムにより実施化することができる。他の例として、コンパイラ10は、ビット列Bの一連の部分を入力することに応答して一連の基準マシン命令を実行するプロセッサの、例えば合成可能なヴェリログ又はVHDL記述により表されたハードウェア設計を発生するように構成することもできる。
ビット列Bが入力される一例を説明したが、他の例として、構成コンパイラ10がビット列Bを、例えば乱数発生により又はプログラムPとは異なる他のプログラムP’の翻訳として発生することもできると理解されるべきである。
要約すると、演算的意味Qを持つプロセッサがビット列Bからとられる一連の命令を実行する場合、該プロセッサはプログラムPを有効に実行するという特性により、ビット列BがプログラムPから演算的意味Qを決定するために用いられる。このことは、プログラムコンパイラ11を構成すると、即ち、如何なるプログラムP’をも演算的意味Qに従って翻訳するための固有のコンパイラCQを、言い換えると、如何なるプログラムP’をも、該演算的意味を持つプロセッサにより実行された場合に該プロセッサに該プロセッサが該プログラムP’を有効に実行するようにさせるようなマシン命令に翻訳する固有のコンパイラを作成すると言うこともできる。
[改竄防止、難読化及び透かし入れのための変形コンパイルの適用]
プロセッサQによるBの解釈がアプリケーションAと意味的に等価となるように任意のビットパターンBを用いてアプリケーションAをプロセッサQに変形させる場合に、2つのことが起きる。第1に、プロセッサQ(仮想マシン又は1つのハードウェア)の表現及び二進オブジェクトBは極めて制限され、QもBもオリジナルのアプリケーションAを損なうことなしに変更することはできないということを意味する。第2に、オリジナルのアルゴリズムAの符号化(エンコーディング)は、ここでは、2つの部分に分割される。該アルゴリズムの一方の部分はビットパターンBを用いてエンコードされ、他方の部分はプロセッサQにエンコードされる。
プロセッサQはプログラマブルである。結果として、如何なる任意のアプリケーションに対しても、コンパイラCQは、Qによる解釈が該任意のアプリケーションの実施となるようなコードを発生する。従って、Qの表現を単独で調べることが、オリジナルのアプリケーションAに関する如何なる情報も明らかにすることにはならない。また、Bはランダムに選択されたものであるから、該ビットパターンBを調べることも、アプリケーションAに関する如何なる情報も明らかにすることにならない。オリジナルのアプリケーションAに関して何かを知るためには、攻撃者は、Qにより実行されるプログラムBの実行痕跡を観察することによりプロセッサQのアーキテクチャ及び命令セットを導出しなければならない。このことは、解放型プラットフォーム上で実行されるアプリケーションをリバースエンジニアリングすることよりも大幅に困難な挑戦である。
ビットパターンBは自由に選択することができると共にプロセッサQに対して切り離せないほど結合され、且つ、オリジナルのアプリケーションを損なうことなしに変更することはできないという事実は、Bを透かし(ウォーターマーク)として使用することができることを意味する。例えば、Bが(他にも情報はあるが)実施許諾者のロゴ及び著作権文書(テキスト)、又は実施権者の名称及び組織を含むことが可能である。このようにして、オリジナルのアプリケーションは、不明化されるのみならず、法的所有者及び実施権者の権利を記述する法的文書に切り離せないほど結合される。
変形コンパイルの他の魅力的な応用例は、アプリケーションの一部を不明化(隠蔽)すると共に、残部を改竄自由にすることである。これを達成するために、オリジナルのアプリケーションAを2つの部分A1及びA2に分割し、A1が不明化したい全てのコードを含むようにする(例えば、ライセンスチェックコードを隠蔽する又は独自仕様のアルゴリズムのリバースエンジニアリングを防止するため)。変形コンパイルを、A1を仮想マシンQに変形するためにA1をプログラムPとして用い、A2のオブジェクトコードをプログラムコードとして用いて適用する。この場合、Aの実施は2つの部分からなる。即ち、一方の部分はA2のオブジェクトコードをプログラムコードとして使用する仮想マシンQのシミュレータであり、結果として部分A1の実施は不明化される。第2の部分A2は、アプリケーションAのホストプラットフォームのための標準のオブジェクトコードとして実施される。
ここで、A2のオブジェクトコードは、ホストマシン用のコード及びアプリケーション部分A1を実行する責任を負う仮想マシンQのためのコードの両方として働く。攻撃者はアプリケーション部分A2のオブジェクトコードをリバースエンジニアリングすることができるかも知れないが、これを変更することはアプリケーション部分A1に関する実施の挙動も変化させてしまう。結果として、全体のアプリケーションに影響を与えることなくソフトウェアをローカルに変更することは、最早、不可能である。このことは、変形されたアプリケーションに対する攻撃を困難にさせる。
不明化及び抗改竄性の組み合わせに加えて、当該アプリケーションに対して透かし入れも用いることができる。これは、ここでも、オリジナルのアプリケーションプログラムAを2つの部分A1及びA2に分割し、A1が不明化したい全てのコードを含み、A2が抗改竄的にのみしたいと欲するコードを含むようにする。当該変形コンパイルを、A1を仮想マシンQに、透かしCと組み合わされたA2のオブジェクトコードをプログラムコードとして用いて変形するために使用することができる。前述したように、この場合、プログラム部分A1の実施は不明化され、プログラム部分A2は改竄抵抗性のものにされ、且つ、透かしCが追加され、該透かしはアプリケーション部分A1の実行を損なうことなく除去又は変更することはできない。
もっと関連のある変形コンパイルの利用は、層状の自己適用である。変形コンパイルの1つの結果は、任意のビットパターンBを実行することができる仮想マシンQである。該仮想マシンQ自体は、プログラムPQにより実施される。この場合、プログラムPQに対して変形コンパイルをビットパターンB又は更に他の自由に選択されたビットパターンの何れかを用いて適用することができる。この処理は、自由に選択される二進パターンを用いて数回適用することができる。各層は不明化及び抗改竄性を向上させると共に、異なる透かしを適用することを可能にする。
要約すると、変形コンパイルは:
− プログラムに変更又は削除することができる透かしを追加する;
− アプリケーションの異なる部分に対して異なるレベルの保護を用いる;
− 攻撃者が当該実施を変化させ得ることを防止するために、アプリケーション部分を抗改竄性にさせる;
− 攻撃者が当該実施を変化させ得ると共に該実施を理解/リバースエンジニアリングし得ることを防止するために、アプリケーション部分を不明化させる、
ことを可能にする。
解放型環境において実行されるアプリケーションの、リバースエンジニアリング及び改竄攻撃に対する保護を向上させる手段としての変形コンパイルの方法を提案する。変形コンパイルは:(a)(複数の)仮想マシンを層化することによりプログラム実行を不明化すること;(b)アプリケーション及び実行環境を切り離せないほど結び付けること;並びに(c)アプリケーションコード、仮想マシン及びアプリケーションデータに法的情報を公然と埋め込むこと;のうちの1以上を達成するために使用することができる。変形コンパイルの性質は、仮想マシン、アプリケーション又はアプリケーションデータの何れかを変化させることが、当該アプリケーションを役立たなくさせることを保証する。
図9は、上記変形コンパイラがユーザ指定イメージ“Z”及びユーザ指定プログラム“P”をどの様に取り込むかを示している。該プログラム“P”は、通常は、通常のプロセッサにおける実行パターン“S”を生じさせるビットパターン“B”(図示略)にコンパイルされるであろうものである。
図10は、当該変形プロセッサ内で二進イメージ“Z”により実行パターン“S”がどの様に発生されるかを示す。
当該変形コンパイラが新たな命令デコーダのソフトウェア的構成を発生した場合、該ソフトウェア的構成は、当該プロセッサの残部のソフトウェア的構成と一緒に、プログラムを形成する。このプログラムは当該プロセッサ上で実行パターン“NS”を生じさせる。
当該変形コンパイラは、オリジナルのユーザイメージがprocessor_2上で実行パターン“NS”を生じさせるような新たなdecoder_2を発生させることができる。
図11に示されるように、processor_2は、イメージ“Z”を実行することができると共に、プログラム“P”に関連させる実行パターンであるパターン“S”を生じさせると共にイメージ“Z”を実行するprocessor_1のためのシミュレータである実行パターン“NS”を生じさせることができる。
単一のプラットフォーム上で実行しているので、実行パターン“N”及び“NS”は該プラットフォーム上で混ぜ合わせることができる。
[形式的表記]
このことは、形式的に下記の表記法により示すことができる。アプリケーションは、ギリシャ文字α、β、γにより示され、当該アプリケーションの何らかのプログラミング言語でのソースコード表現を示す。プログラマブルなプロセッサは大文字Y、Z等により示される。プログラマブルプロセッサにより入力として使用されるビット列は小文字a、b及びcにより表される。言語標準に従うアプリケーションαの表示的意味は、表現M(α)により示される。プロセッサY上で実行される二進情報aの演算的意味は、表現MY(a)により表される。CY(α)は、MY(CY(α))=M(α)による、プロセッサYのためにコンパイラCによって発生される二進情報の表現である。
この表記法において、アプリケーションα及び任意のビット列aが与えられると、プログラマブルプロセッサY及びコンパイラCYは、MY(a)=M(α)なる特性で発生される。任意のアプリケーションβに対して、該コンパイラCYは、MY(CY(β))=M(β)となるようなビット列CY(β)を発生する。
一実施態様において、アプリケーションαは、プロセッサZa及び対応するコンパイラを発生させるプログラマブルなプロセッサのシミュレータZである。他の実施態様において、結果としてのプログラマブルプロセッサYは導出ステップを任意の回数適用することにより導出される。
ここで使用される場合、プロセッサの演算的意味なる用語は、加算、減算、ロード、記憶(ストア)及びジャンプ操作(演算)等のマシン命令のオペコードに対応する操作(演算)を定義するデータを含む。このデータは、実際のプロセッサ又は該実際のプロセッサ若しくはシミュレーションプロセッサが当該オペコードに従って動作するようにさせるために使用されるべきプロセッサシミュレーションプログラムの他のオペコードを定義することができ、該データは実行回路において使用するための回路制御信号値のセットであって、該実行回路が上記オペコードに従って動作するようにさせるために使用されるべき回路制御信号値のセットを含むことができる。ここで使用される場合、プロセッサを該プロセッサが前記演算的意味に従ってマシン命令を実行するように構成するとは、斯様なデータをプロセッサに記憶させる、斯様なデータに従って動作させる自動的に発生された回路構成を備えるプロセッサを製造する、及び/又は該データに従ってオペコードに応答するプロセッサをシミュレーションするためのシミュレーションプログラムを発生することを含む。ここで使用される場合、マシン命令とは、例えば加算、ロード、記憶及びジャンプ命令等を含む、プロセッサ又はプロセッサシミュレーションプログラムにより個々に実行することができる命令である。
尚、上述した実施態様は本発明を限定するというよりは解説するものであり、当業者であれば添付請求項の範囲から逸脱することなく多くの代替実施態様を設計することができることに注意すべきである。また、請求項において、括弧内の如何なる符号も、当該請求項を限定するものと見なしてはならない。また、“有する”なる文言は、請求項に記載されたもの以外の構成要素又はステップの存在を排除するものではない。また、単数形の構成要素は、複数の斯様な構成要素の存在を排除するものではない。本発明は、幾つかの別個のエレメントを有するハードウェアにより、及び/又は適切にプログラムされたプロセッサにより実施化することができる。幾つかの手段を列挙する装置の請求項において、これら手段の幾つかは1つの同一のハードウェア品目により実施化することができる。特定の手段が相互に異なる従属請求項に記載されているという単なる事実は、これら手段の組み合わせを有利に使用することができないということを示すものではない。

Claims (18)

  1. プロセッサを構成する方法であって、
    − ビット列B及びプログラムPを入力するステップと、
    − プロセッサを、該プロセッサが前記ビット列Bをマシン命令のソースとして使用する場合にプログラムPを実行するように構成するステップと、
    を有する、方法。
  2. 前記プログラムPが一連の基準マシン命令を定義し、前記構成するステップが、
    − 前記ビット列B及び前記一連の基準マシン命令から、前記プロセッサを該プロセッサが前記ビット列Bをマシン命令のソースとして使用する場合に前記プログラムPを実行するように構成するための翻訳データを計算するステップと、
    − 前記プロセッサを前記翻訳データにより構成するステップと、
    を有する、請求項1に記載の方法。
  3. 前記翻訳データを計算するステップが、
    − 前記ビット列Bを、前記プロセッサにより各マシン命令として使用するための連続する部分に分割するステップと、
    − 前記ビット列の前記部分を前記一連の基準マシン命令における対応する位置の基準マシン命令に翻訳するための翻訳を決定するステップと、
    を有する、請求項2に記載の方法。
  4. 前記翻訳データが、前記部分の異なる下位部分を、基準マシンプログラムにおける対応する位置の基準マシン命令のオペコード、オペランド及び結果コードのうちの少なくとも1つに翻訳する、
    請求項3に記載の方法。
  5. 前記翻訳データが、基準マシン命令を得るために前記ビット列Bの前記部分をルックアップするためのルックアップデータを有する、請求項3に記載の方法。
  6. 前記ビット列における前記連続する部分が基準マシン命令の長さより大きな長さを有する、請求項3に記載の方法。
  7. 前記プロセッサにより実行される場合の、前記ビット列の異なる部分に対応するプログラムカウンタ値を決定するステップと、
    前記ビット列の前記部分を前記プログラムカウンタ値から導出される情報と組み合わせて、明確にされた部分を得ると共に、該明確にされた部分を前記基準マシン命令に翻訳するための翻訳を決定するステップと、
    を有する、請求項3に記載の方法。
  8. 前記翻訳データにより定義される翻訳の下で前記基準マシン命令に翻訳するオリジナルを有さない基準マシン命令を決定するステップと、
    前記オリジナルを有さない基準マシン命令に対して前記翻訳データにおいて既に定義されたオリジナルとは異なるオリジナルを選択すると共に、前記プロセッサを構成するための前記翻訳データを、該プロセッサが前記選択されたオリジナルをマシン命令のソースとして使用する場合に前記構成されたプロセッサが前記決定された基準マシン命令を実行するように拡張するステップと、
    を有する、請求項2に記載の方法。
  9. 前記翻訳データにより構成されたプロセッサのためのコンパイラに対して前記翻訳データを利用可能にさせるステップと、
    前記コンパイラにより他のプログラムP’をコンパイルして、前記プロセッサのためのコンパイルされたマシン命令のプログラムを生成するステップと、
    前記コンパイルされたマシン命令のプログラムを前記プロセッサにより実行するステップと、
    を有する、請求項2又は請求項8に記載の方法。
  10. 前記プログラムPが他のプロセッサをシミュレーションするためのプログラマブルプロセッサのシミュレータプログラムであり、
    前記プログラマブルプロセッサのシミュレータプログラムが、
    − 他のビット列及び他のプログラマブルプロセッサのシミュレータプログラムを入力するステップと、
    − 前記他のプログラマブルプロセッサのシミュレータプログラムにより定義される処理を、他のプログラマブルプロセッサが前記他のビット列をマシン命令のソースとして使用する場合に実行する該他のプログラマブルプロセッサの他の翻訳データを計算するステップであって、該他の翻訳データが入力としての前記他のビット列及び前記他のプログラマブルプロセッサのシミュレータプログラムから計算されるステップと、
    により得られる、請求項9に記載の方法。
  11. オリジナルのアプリケーションAを入力するステップと、該オリジナルのアプリケーションAを第1部分A1及び第2部分A2に分割するステップと、前記第1部分A1を前記プログラムPとして使用するステップと、前記第2部分A2のオブジェクトコードを前記ビット列Bとして使用するステップとを有する、請求項1に記載の方法。
  12. オリジナルのアプリケーションAを入力するステップと、該オリジナルのアプリケーションAを第1部分A1及び第2部分A2に分割するステップと、前記第1部分A1を前記プログラムPとして使用するステップと、前記第2部分A2を透かしCと組み合わせるステップと、該第2部分A2及び透かしCの組み合わせを前記ビット列Bとして使用するステップとを有する、請求項1に記載の方法。
  13. 前記プロセッサが合成可能なハードウェア記述により表される、請求項1ないし12の何れか一項に記載の方法。
  14. 前記ビット列Bの部分が、テキストの表現、標示及び計算環境から動的に収集される情報のうちの少なくとも1つである、請求項1ないし13の何れか一項に記載の方法。
  15. 前記入力されるビット列の如何なる変更も、オリジナルのアプリケーションが正しく動作することを妨げる、請求項1ないし14の何れか一項に記載の方法。
  16. プロセッサを構成する装置であって、前記装置が、
    − 一連の基準マシン命令を定義するプログラムP及びビット列Bを入力する入力部と、
    − 構成プロセッサと、
    を有し、前記構成プロセッサが、
    − 前記ビット列B及び前記一連の基準マシン命令から、前記プロセッサが前記ビット列Bをマシン命令のソースとして使用する場合に該プロセッサが前記プログラムPを実行するように該プロセッサを構成するための翻訳データを計算し、
    − 前記プロセッサを、該プロセッサが前記翻訳データに従ってマシン命令を実行するように構成する、
    装置。
  17. − ビット列Bをマシン命令のソースとして記憶するプログラムメモリと、
    − 前記ビット列Bからの命令に対する当該プロセッサの応答を定義する翻訳データを記憶する命令デコード制御メモリと、
    − 前記プログラムメモリの出力端に結合され、該プログラムメモリからのマシン命令の基準マシン命令への翻訳を前記命令デコード制御メモリからの前記翻訳データに依存して行う命令デコーダと、
    を有する、プロセッサ。
  18. コンピュータにより実行された場合に該コンピュータに、
    − 一連の基準マシン命令を定義するプログラムP及びビット列Bを入力させ、
    − 前記ビット列B及び前記一連の基準マシン命令から、プロセッサが前記ビット列Bをマシン命令のソースとして使用する場合に該プロセッサが前記プログラムPにより定義された処理を実行するように該プロセッサを構成するための翻訳データを計算させ、
    − 前記プロセッサを構成するための構成データを前記翻訳データに従って発生させる、
    命令のプログラムを有する、コンピュータプログラム。
JP2015513320A 2012-05-25 2013-05-17 プログラムのリバースエンジニアリング及び/又は改竄に対する保護のための方法、システム及び装置 Active JP6133409B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
NL2008888 2012-05-25
NL2008888 2012-05-25
PCT/IB2013/054042 WO2013175368A1 (en) 2012-05-25 2013-05-17 Method, system and device for protection against reverse engineering and/or tampering with programs

Publications (2)

Publication Number Publication Date
JP2015523635A true JP2015523635A (ja) 2015-08-13
JP6133409B2 JP6133409B2 (ja) 2017-05-24

Family

ID=48808407

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015513320A Active JP6133409B2 (ja) 2012-05-25 2013-05-17 プログラムのリバースエンジニアリング及び/又は改竄に対する保護のための方法、システム及び装置

Country Status (9)

Country Link
US (1) US10095847B2 (ja)
EP (1) EP2856378B1 (ja)
JP (1) JP6133409B2 (ja)
CN (1) CN104321774B (ja)
BR (1) BR112014028947A2 (ja)
MX (1) MX2014014102A (ja)
RU (1) RU2014152808A (ja)
WO (1) WO2013175368A1 (ja)
ZA (1) ZA201409425B (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9659156B1 (en) * 2014-03-20 2017-05-23 Symantec Corporation Systems and methods for protecting virtual machine program code
US9501301B2 (en) * 2015-02-26 2016-11-22 Nxp B.V. Flexible instruction sets for obfuscated virtual machines
US9760736B2 (en) * 2015-09-29 2017-09-12 International Business Machines Corporation CPU obfuscation for cloud applications
CN105825089A (zh) * 2016-03-15 2016-08-03 上海斐讯数据通信技术有限公司 一种智能终端jni数据跟踪方法及系统
CN109358844A (zh) * 2018-09-30 2019-02-19 仝瑞麟 程序执行方法及装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01321519A (ja) * 1988-06-24 1989-12-27 Hitachi Micro Comput Eng Ltd マイクロプロセッサ
JPH0475137A (ja) * 1990-07-18 1992-03-10 Hitachi Ltd データ処理装置
JPH07182304A (ja) * 1993-12-24 1995-07-21 Rohm Co Ltd マイクロコンピュータ及びその製造方法
JP2002132364A (ja) * 2000-10-19 2002-05-10 Yutaka Iizuka プログラムを内部解析から保護する方法、コンピュータ読み取り可能な記録媒体及びプログラムの配布方法
JP2003288203A (ja) * 2002-03-27 2003-10-10 Asahi Kasei Corp プロセッサの開発支援装置
US20050005157A1 (en) * 1999-08-18 2005-01-06 Sun Microsystems, Inc. Logic block used to check instruction buffer configuration
US20080127125A1 (en) * 2006-10-27 2008-05-29 Microsoft Corporation Virtualization For Diversified Tamper Resistance
US20100313188A1 (en) * 2005-08-06 2010-12-09 Microsoft Corporation Method for Preventing Software Reverse Engineering, Unauthorized Modification, and Runtime Data Interception

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6101592A (en) * 1998-12-18 2000-08-08 Billions Of Operations Per Second, Inc. Methods and apparatus for scalable instruction set architecture with dynamic compact instructions
US6862563B1 (en) * 1998-10-14 2005-03-01 Arc International Method and apparatus for managing the configuration and functionality of a semiconductor design
US6834343B1 (en) * 1999-05-27 2004-12-21 Microsoft Corporation Method for watermarking computer programs
US7770016B2 (en) * 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US7080257B1 (en) * 2000-03-27 2006-07-18 Microsoft Corporation Protecting digital goods using oblivious checking
EP1352307A2 (en) * 2000-09-22 2003-10-15 EDC Systems, Inc. Systems and methods for preventing unauthorized use of digital content
CA2327911A1 (en) * 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
WO2002061574A1 (en) * 2001-01-30 2002-08-08 Koninklijke Philips Electronics N.V. Computer instruction with instruction fetch control bits
US7266811B2 (en) * 2001-09-05 2007-09-04 Conexant Systems, Inc. Methods, systems, and computer program products for translating machine code associated with a first processor for execution on a second processor
EP1542112A4 (en) * 2002-07-09 2008-04-09 Fujitsu Ltd UCT RESISTANT TO OPEN-TYPE UNIVERSAL ATTACKS, AND ASSOCIATED APPLICATION SYSTEM
US20050028132A1 (en) * 2003-07-31 2005-02-03 Srinivasamurthy Venugopal K. Application specific optimization of interpreters for embedded systems
US20050102474A1 (en) * 2003-11-06 2005-05-12 Sridhar Lakshmanamurthy Dynamically caching engine instructions
US7594221B2 (en) * 2004-04-20 2009-09-22 Hewlett-Packard Development Company, L.P. Method and apparatus for translating binary code
EP1850261A1 (en) * 2005-02-10 2007-10-31 Matsushita Electric Industrial Co., Ltd. Program conversion device and program execution device
JP2006286084A (ja) 2005-03-31 2006-10-19 Fujitsu Ltd 符号器、復号器および符号化方法
US7760903B2 (en) * 2005-08-30 2010-07-20 Microsoft Corporation Tamper-resistant text stream watermarking
US20100191959A1 (en) * 2005-09-23 2010-07-29 Space Micro Inc. Secure microprocessor and method
JP5113169B2 (ja) * 2006-07-12 2013-01-09 イルデト・コーポレート・ビー・ヴイ 暗号関数を難読化する方法およびシステム
CN101491001B (zh) * 2006-07-12 2012-03-14 耶德托公司 数字数据处理单元的防篡改系统和方法
US8505002B2 (en) * 2006-09-29 2013-08-06 Arm Limited Translation of SIMD instructions in a data processing system
EP1947584B1 (en) * 2006-12-21 2009-05-27 Telefonaktiebolaget LM Ericsson (publ) Obfuscating computer program code
JP4708446B2 (ja) * 2007-03-02 2011-06-22 パナソニック株式会社 符号化装置、復号装置およびそれらの方法
US20080229115A1 (en) * 2007-03-16 2008-09-18 Microsoft Corporation Provision of functionality via obfuscated software
EP2240857A4 (en) * 2007-12-21 2013-12-25 Univ Virginia Patent Found SYSTEM, METHOD AND COMPUTER PROGRAM FOR PROTECTING SOFTWARE THROUGH ANTI-FALSIFICATION AND OBSCURING TRANSFORMATIONS
WO2010127438A1 (en) * 2009-05-06 2010-11-11 Irdeto Canada Corporation Interlocked binary protection using whitebox cryptography
US20100325446A1 (en) * 2009-06-19 2010-12-23 Joseph Martin Mordetsky Securing Executable Code Integrity Using Auto-Derivative Key
EP2388730A1 (en) * 2010-05-17 2011-11-23 Nagravision S.A. Method for generating software code
US20120159444A1 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Fusing debug information from different compiler stages
US8621620B2 (en) * 2011-03-29 2013-12-31 Mcafee, Inc. System and method for protecting and securing storage devices using below-operating system trapping
US9575903B2 (en) * 2011-08-04 2017-02-21 Elwha Llc Security perimeter
JP2013070026A (ja) 2011-09-08 2013-04-18 Rohm Co Ltd 半導体装置、半導体装置の製造方法、半導体装置の実装構造、およびパワー用半導体装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01321519A (ja) * 1988-06-24 1989-12-27 Hitachi Micro Comput Eng Ltd マイクロプロセッサ
JPH0475137A (ja) * 1990-07-18 1992-03-10 Hitachi Ltd データ処理装置
JPH07182304A (ja) * 1993-12-24 1995-07-21 Rohm Co Ltd マイクロコンピュータ及びその製造方法
US20050005157A1 (en) * 1999-08-18 2005-01-06 Sun Microsystems, Inc. Logic block used to check instruction buffer configuration
JP2002132364A (ja) * 2000-10-19 2002-05-10 Yutaka Iizuka プログラムを内部解析から保護する方法、コンピュータ読み取り可能な記録媒体及びプログラムの配布方法
JP2003288203A (ja) * 2002-03-27 2003-10-10 Asahi Kasei Corp プロセッサの開発支援装置
US20100313188A1 (en) * 2005-08-06 2010-12-09 Microsoft Corporation Method for Preventing Software Reverse Engineering, Unauthorized Modification, and Runtime Data Interception
US20080127125A1 (en) * 2006-10-27 2008-05-29 Microsoft Corporation Virtualization For Diversified Tamper Resistance

Also Published As

Publication number Publication date
US10095847B2 (en) 2018-10-09
EP2856378B1 (en) 2017-12-27
MX2014014102A (es) 2015-01-26
CN104321774B (zh) 2018-08-28
CN104321774A (zh) 2015-01-28
BR112014028947A2 (pt) 2017-06-27
ZA201409425B (en) 2017-05-31
WO2013175368A1 (en) 2013-11-28
US20150161363A1 (en) 2015-06-11
RU2014152808A (ru) 2016-07-20
EP2856378A1 (en) 2015-04-08
JP6133409B2 (ja) 2017-05-24

Similar Documents

Publication Publication Date Title
KR101440646B1 (ko) 컴퓨터 구현가능 방법, 및 소프트웨어 보안 향상 방법
TWI648648B (zh) 安卓平台上可執行程式的保護方法
CN106462677B (zh) 一种保护软件项目的方法和装置
US10175964B2 (en) Compiler caching for runtime routine redundancy tracking
JP6429785B2 (ja) 演算子のないコンパイラ
US8874928B2 (en) System and method for obfuscating constants in a computer program
JP6133409B2 (ja) プログラムのリバースエンジニアリング及び/又は改竄に対する保護のための方法、システム及び装置
CA2612455C (en) Translating expressions in a computing environment
Das et al. SHAKTI-MS: a RISC-V processor for memory safety in C
CN112631656A (zh) 一种基于源代码的智能合约优化方法及装置
Yurichev Reverse engineering for beginners
Wichelmann et al. MAMBO–V: Dynamic Side-Channel Leakage Analysis on RISC–V
Protsenko et al. Protecting android apps against reverse engineering by the use of the native code
Demicco et al. Generic Tagging for RISC-V Binaries
Staursky Lambda Calculus for Binary Security and Analysis
Hetland et al. Extending Python
Tews et al. Specification and verification of the Nova microhypervisor
Patel Decompiler For Pseudo Code Generation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160512

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170214

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: 20170321

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170419

R150 Certificate of patent or registration of utility model

Ref document number: 6133409

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250