JP6203028B2 - 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 - Google Patents
疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 Download PDFInfo
- Publication number
- JP6203028B2 JP6203028B2 JP2013258128A JP2013258128A JP6203028B2 JP 6203028 B2 JP6203028 B2 JP 6203028B2 JP 2013258128 A JP2013258128 A JP 2013258128A JP 2013258128 A JP2013258128 A JP 2013258128A JP 6203028 B2 JP6203028 B2 JP 6203028B2
- Authority
- JP
- Japan
- Prior art keywords
- conversion table
- program
- instruction
- virtual machine
- variable
- 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
Links
Images
Landscapes
- Storage Device Security (AREA)
Description
(a)プログラムは、ある固定の疑似乱数生成ロジックを持つ。
(b)プログラムは、ある仮想マシン(VM)上で実行される。
(c)仮想マシンは、起動時にランダムに命令変換表を作成し、プログラムの実行命令を命令変換表に基づいて変換して実行する。
(d)また、特定の変数についても、仮想マシン上において乱数を足し合わせる等の変形を行い実行する。なお、命令変換表を作成するための乱数や、変数についての乱数は、仮想マシンが従来方式により生成する。
(e)命令変換表を固定とすることで、環境ごとに異なる指紋データを生成可能である。すなわち、命令変換表自体又は生成した疑似乱数自体が各環境の識別子として活用できる。これにより、実行環境の検証データ(どの実行環境で実行されたかの証拠データ)を生成することができる。
(f)また、命令変換表を固定としその表を秘匿して保管することで、プログラムを見ただけではその動作を解析することができない難読化手法を実現する。
(g)さらに、上記の難読化手法において、仮想マシンが命令変換表を動的にダウンロードする手法を具備することにより安全性を向上させることができる。
(h)さらに、上記の難読化手法において、サーバ上から命令変換表を削除することで、プログラムを正しく実行できなくすることができるようになる。
(1) 疑似乱数を生成する疑似乱数生成装置であって、疑似乱数を生成するための疑似乱数生成プログラムを実行する仮想マシンを起動する起動手段を備え、前記仮想マシンは、前記疑似乱数生成プログラムを記憶するプログラム記憶手段と、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表と、前記疑似乱数生成プログラムの少なくとも一部の実行命令を、前記命令変換表に基づいて変換し、変換した実行命令を実行する実行制御手段とを備える、疑似乱数生成装置。
したがって、(1)に係る疑似乱数生成装置は、プログラムによって疑似乱数を生成し、かつ、そのプログラムが解析されても乱数性が損なわれない疑似乱数を生成することができる。
(a)固定の命令変換表又は変数変換表を作成し、仮想マシンソフトウェアに安全な形で埋め込んでおく。仮想マシンソフトウェアは解析されないものとする。
(b)保護したいプログラムを固定の命令変換表又は変数変換表に基づいて変換する。その後、この変換されたプログラムや仮想マシンは、利用者のもとに配布される。
(c)プログラムは、命令変換表又は変数変換表が埋め込まれた仮想マシン(VM)上で実行される。不正者が変換されたプログラムを解析しようとした場合、命令変換表又は変数変換表によりプログラムが変更されているため、命令変換表又は変数変換表を知らない攻撃者は解析できない。一方で、命令変換表又は変数変換表を内蔵した仮想マシンソフトウェアでは、各演算命令が命令変換表又は変数変換表により元の形に変換されて実行されるため、変換前のプログラムの動作と同じ動作をすることが保証される。
(d)なお、命令変換表又は変数変換表を動的に安全にダウンロード(例えば、管理するサーバからダウンロード)する機構を仮想マシンソフトウェアに具備すれば、当該プログラム実行時のみ動的に命令変換表又は変数変換表をダウンロードして実行することができるため、仮想マシンソフトウェアを解析されたとしても命令変換表又は変数変換表が漏洩することは無い。また、この仕組みを応用することにより、命令変換表又は変数変換表を削除(例えば、管理するサーバから削除)してしまえばダウンロードできなくなるため、プログラムを実行できなくすることができるようになる。
(5) 仮想マシン上で動作するプログラムを難読化するプログラム難読化装置であって、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表を作成する変換表作成手段と、前記変換表作成手段によって作成された前記命令変換表を仮想マシンソフトウェアに組み入れて、前記命令変換表を組み入れた仮想マシンソフトウェアを作成する仮想マシンソフトウェア作成手段と、プログラムを前記命令変換表に基づいて変換するプログラム変換手段と、前記仮想マシンソフトウェア作成手段によって作成された前記仮想マシンソフトウェアと、前記プログラム変換手段によって変換されたプログラムとを、前記仮想マシンソフトウェアを組み込む装置であって前記変換されたプログラムを実行する装置に配布する配布手段と、を備えるプログラム難読化装置。
したがって、(5)に係るプログラム難読化装置は、プログラムの解析を困難にすることができる。
仮想マシン20は、コンピュータの動作をエミュレートするソフトウェアであり、割り当てられたリソースを管理し、プログラムを実行する。
疑似乱数生成プログラムは、常に仮想環境である仮想マシン20を介して、実行環境のリソースを活用し演算をコンピュータに実行させる。
1.仮想マシン20の起動時にランダムに命令変換表32を作成する。例えば、加算、減算、乗算、除算の各命令をランダムに並び替え、プログラムが加算を実行しようとしたときには、仮想マシン20がローカル環境に対して、乗算を実行するように命令し、結果をプログラムに返す、等の処理を行う。また、特定の変数についても、変数変換表33を用意し、仮想マシン20が生成した乱数を加算する等の処理を変数変換表33にて定義しておく。これらの命令変換表32及び変数変換表33を作成するための乱数は、仮想マシン20が従来方式により生成してよい。
2.プログラムは、ある特定の演算を実行することで疑似乱数を生成する。適当なシードを入力として、仮想マシン20を経由して演算を実行するが、その際、仮想マシン20の起動時に生成した命令変換表32及び変数変換表33により命令の変換及び変数変換が実行され、そのまま計算した値とは別の値が演算結果として得られる。
3.仮想マシン20を起動するごとに命令変換表32及び変数変換表33を作り直せば、演算は毎回異なることとなり、毎回異なる疑似乱数が生成される。一方で、攻撃者は、プログラムを解析しても、疑似乱数生成の挙動が予測できず、攻撃することができない。
4.また、固定の命令変換表32及び変数変換表33を仮想マシンソフトウェアに埋め込んでおけば、一種のフォレンジックデータとして活用することも可能である。すなわち、生成した疑似乱数を見れば、プログラムがどの環境で実行されたのかを特定することができる。
以上の効果により、安全な疑似乱数生成を実現する。本機能は、単に疑似乱数生成だけではなく鍵生成等様々な応用が可能である。
疑似乱数生成装置10は、起動手段11を備える。
さらに、実行制御手段22は、疑似乱数生成プログラムを実行中に、特定の命令から特定の命令までの間(例えば、疑似乱数生成プログラムには出現しないはずのI/O命令等の命令をフェッチした後から、次にI/O命令等をフェッチするまでの間)でのみ、命令変換表32に記憶されている実行命令をフェッチすると、命令変換表32に基づいて変換して実行するとしてもよい。
例えば、変数変換表33の例に基づいて、変数制御手段23は、疑似乱数生成プログラムで用いられる変数1に記憶させる変数値を、変数1に対応する「+」によって、変数値に乱数(従来方式により生成した乱数)を加算し、加算した変数値を変数1に記憶させる。
図6は、本発明の一実施形態に係るプログラム難読化装置40の構成を示す図である。プログラム難読化装置40は、変換表作成手段41と、仮想マシンソフトウェア作成手段42と、プログラム変換手段43と、配布手段44とを備える。各手段ごとに説明する。
ダウンロードが組み入れられると、仮想マシン20は、例えば、命令変換表32及び変数変換表33を安全に管理するサーバ(図示せず)から、命令変換表32及び変数変換表33をダウンロードする。
したがって、プログラム難読化装置40は、プログラムの解析を困難にすることができる。
11 起動手段
20 仮想マシン
21 変更手段
22 実行制御手段
23 変数制御手段
30 プログラム記憶手段
31 秘匿記憶領域
32 命令変換表
33 変数変換表
40 プログラム難読化装置
41 変換表作成手段
42 仮想マシンソフトウェア作成手段
43 プログラム変換手段
44 配布手段
Claims (7)
- 疑似乱数を生成する疑似乱数生成装置であって、
疑似乱数を生成するための疑似乱数生成プログラムを実行する仮想マシンを起動する起動手段を備え、
前記仮想マシンは、
前記疑似乱数生成プログラムを記憶するプログラム記憶手段と、
プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表と、
前記疑似乱数生成プログラムの少なくとも一部の実行命令を、前記命令変換表に基づいて変換し、変換した実行命令を実行する実行制御手段とを備える、
疑似乱数生成装置。 - 前記仮想マシンは、
前記起動手段によって起動されると、前記命令変換表における実行命令の対応付けを変更する変更手段を、さらに備える請求項1に記載の疑似乱数生成装置。 - 前記仮想マシンは、
前記疑似乱数生成プログラムで用いられる変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する変数変換表と、
前記疑似乱数生成プログラムで用いられる少なくとも一部の変数に記憶される変数値を、前記変数変換表に基づいて変換し、変換した変数値を前記変数に記憶させる変数制御手段とを、さらに備える請求項1又は2に記載の疑似乱数生成装置。 - 請求項1に記載の疑似乱数生成装置が実行する方法であって、
前記起動手段が、前記疑似乱数生成プログラムを実行する仮想マシンを起動する起動ステップと、
前記仮想マシンの前記実行制御手段が、前記疑似乱数生成プログラムの少なくとも一部の実行命令を、前記命令変換表に基づいて変換し、変換した実行命令を実行する実行制御ステップと、
を備える方法。 - 仮想マシン上で動作するプログラムを難読化するプログラム難読化装置であって、
前記プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表又は、前記命令変換表及び前記プログラムで用いられる少なくとも一部の変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する変数変換表を作成する変換表作成手段と、
前記変換表作成手段によって作成された前記命令変換表又は、前記命令変換表及び前記変数変換表を仮想マシンソフトウェアに組み入れて、前記命令変換表又は、前記命令変換表及び前記変数変換表を組み入れた仮想マシンソフトウェアを作成する仮想マシンソフトウェア作成手段と、
前記プログラムを前記命令変換表又は、前記命令変換表及び前記変数変換表に基づいて変換するプログラム変換手段と、
前記仮想マシンソフトウェア作成手段によって作成された前記仮想マシンソフトウェアと、前記プログラム変換手段によって変換されたプログラムとを、前記仮想マシンソフトウェアを組み込む装置であって前記変換されたプログラムを実行する装置に配布する配布手段と、
を備えるプログラム難読化装置。 - 前記仮想マシンソフトウェア作成手段は、前記命令変換表又は、前記命令変換表及び前記変数変換表を仮想マシンソフトウェアに組み入れることに替えて、前記命令変換表又は、前記命令変換表及び前記変数変換表をダウンロードするように、仮想マシンソフトウェアに組み入れる、請求項5に記載のプログラム難読化装置。
- コンピュータが実行するプログラム難読化方法であって、
前記コンピュータにより、
プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表又は、前記命令変換表及び前記プログラムで用いられる少なくとも一部の変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する変数変換表を作成する変換表作成ステップと、
前記変換表作成ステップにおいて作成された前記命令変換表又は、前記命令変換表及び前記変数変換表を仮想マシンソフトウェアに組み入れて、前記命令変換表又は、前記命令変換表及び前記変数変換表を組み入れた仮想マシンソフトウェアを作成する仮想マシンソフトウェア作成ステップと、
前記プログラムを前記命令変換表又は、前記命令変換表及び前記変数変換表に基づいて変換するプログラム変換ステップと、
前記仮想マシンソフトウェア作成ステップにおいて作成された前記仮想マシンソフトウェアと、前記プログラム変換ステップにおいて変換されたプログラムとを、前記仮想マシンソフトウェアを組み込む装置であって前記変換されたプログラムを実行する装置に配布する配布ステップと、
を備えるプログラム難読化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013258128A JP6203028B2 (ja) | 2013-12-13 | 2013-12-13 | 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013258128A JP6203028B2 (ja) | 2013-12-13 | 2013-12-13 | 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015114964A JP2015114964A (ja) | 2015-06-22 |
JP6203028B2 true JP6203028B2 (ja) | 2017-09-27 |
Family
ID=53528678
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013258128A Active JP6203028B2 (ja) | 2013-12-13 | 2013-12-13 | 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6203028B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR3079638B1 (fr) * | 2018-03-29 | 2021-04-09 | Airtag | Procede de mise en oeuvre d'une fonction cryptographique pour une cle secrete |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003140758A (ja) * | 2001-11-07 | 2003-05-16 | Hitachi Ltd | プログラム暗号化方法、復号化方法および実行方法 |
US7383443B2 (en) * | 2002-06-27 | 2008-06-03 | Microsoft Corporation | System and method for obfuscating code using instruction replacement scheme |
FR2841997B1 (fr) * | 2002-07-08 | 2005-11-11 | Gemplus Card Int | Securisation d'application telechargee notamment dans une carte a puce |
EP1850261A1 (en) * | 2005-02-10 | 2007-10-31 | Matsushita Electric Industrial Co., Ltd. | Program conversion device and program execution device |
JP4971200B2 (ja) * | 2006-02-06 | 2012-07-11 | パナソニック株式会社 | プログラム難読化装置 |
JP2007304726A (ja) * | 2006-05-09 | 2007-11-22 | Fuji Xerox Co Ltd | プログラム難読化装置、難読化方法及び難読化プログラム |
JP4470982B2 (ja) * | 2007-09-19 | 2010-06-02 | 富士ゼロックス株式会社 | 情報処理装置及び情報処理プログラム |
JP2009104589A (ja) * | 2007-10-05 | 2009-05-14 | Canon Inc | 情報処理装置及びその方法、プログラム、記録媒体 |
JP2009223778A (ja) * | 2008-03-18 | 2009-10-01 | Hitachi Software Eng Co Ltd | 仮想マシンイメージによるプログラム配布装置 |
JP5149061B2 (ja) * | 2008-04-25 | 2013-02-20 | Kddi株式会社 | プログラム難読化装置、プログラム難読化方法およびプログラム |
JP5477994B2 (ja) * | 2010-04-13 | 2014-04-23 | Kddi株式会社 | 自己書き換え処理装置、自己書き換え処理方法、およびプログラム |
JP5627444B2 (ja) * | 2010-12-24 | 2014-11-19 | Kddi株式会社 | ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム |
JP2012208655A (ja) * | 2011-03-29 | 2012-10-25 | Kddi Corp | 自己書き換え処理装置、自己書き換え処理方法、およびプログラム |
JP2013045277A (ja) * | 2011-08-24 | 2013-03-04 | Hitachi Solutions Ltd | プログラム難読化方法およびリモートデバッグシステム |
-
2013
- 2013-12-13 JP JP2013258128A patent/JP6203028B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2015114964A (ja) | 2015-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7101761B2 (ja) | コール・パス依存認証 | |
RU2439669C2 (ru) | Способ предотвращения обратного инжиниринга программного обеспечения, неавторизованной модификации и перехвата данных во время выполнения | |
US6463538B1 (en) | Method of software protection using a random code generator | |
JP5808019B2 (ja) | ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護 | |
EP2398182B1 (en) | A device and a method for generating software code | |
US20170116410A1 (en) | Software protection | |
KR101504857B1 (ko) | 보안 시스템에서 랜덤하게 할당된 메모리 범위로 jit를 지원하는 시스템 및 방법 | |
KR20090024804A (ko) | 난수 발생기 시스템, 난수 생성 방법 및 컴퓨터 판독가능 매체 | |
WO2013181196A1 (en) | Stochastic processing | |
WO2014210277A1 (en) | Diversified instruction set processing to enhance security | |
US20170068804A1 (en) | Method for Protecting a Computer Program From Being Influenced, and Computer System | |
US10303885B2 (en) | Methods and systems for securely executing untrusted software | |
Averbuch et al. | Truly-protect: An efficient VM-based software protection | |
JP6698774B2 (ja) | 共通中間言語のための保安提供装置と方法、及び保安実行装置と方法 | |
Averbuch et al. | An efficient vm-based software protection | |
CN107871066B (zh) | 基于安卓系统的代码编译方法及装置 | |
JP6203028B2 (ja) | 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 | |
CN110535642B (zh) | 一种分散存储密钥的方法、智能终端及存储介质 | |
KR20160108427A (ko) | 암호화 알고리즘에 사용될 때 비밀 데이터를 보호하는 방법 | |
WO2013175368A1 (en) | Method, system and device for protection against reverse engineering and/or tampering with programs | |
JP7079711B2 (ja) | 変換装置、変換方法、変換プログラム及び難読プログラム | |
EP3380974B1 (en) | Method to generate a secure code | |
KR101630791B1 (ko) | 의사 난수로부터 진성 난수를 생성하는 방법 및 이 방법을 컴퓨터상에서 실행할 수 있는 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체 | |
Hua et al. | MMGuard: Automatically Protecting On-Device Deep Learning Models in Android Apps | |
JP3970856B2 (ja) | プログラム難読化装置、プログラム配布システム、コンピュータプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160721 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170530 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20170613 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170721 |
|
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: 20170815 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170829 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6203028 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |