JP6374454B2 - Module encryption / decryption program - Google Patents
Module encryption / decryption program Download PDFInfo
- Publication number
- JP6374454B2 JP6374454B2 JP2016155565A JP2016155565A JP6374454B2 JP 6374454 B2 JP6374454 B2 JP 6374454B2 JP 2016155565 A JP2016155565 A JP 2016155565A JP 2016155565 A JP2016155565 A JP 2016155565A JP 6374454 B2 JP6374454 B2 JP 6374454B2
- Authority
- JP
- Japan
- Prior art keywords
- module
- program
- executed
- execution
- encrypted
- 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
- 238000000034 method Methods 0.000 claims description 47
- 230000037430 deletion Effects 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
Images
Description
本発明は、ソフトウエアの耐タンパ性を向上させる技術に関する。 The present invention relates to a technique for improving tamper resistance of software.
ソフトウエアのうち、例えば認証アルゴリズムを含むもののように、その中身を知られたくないものが存在する。にもかかわらず、ソースコードはもとより、実行形式のソフトウエアにおいても、逆アセンブルやデバッギングにより、ソフトウエアのアルゴリズム等の内容が明るみにされるという脅威が存在する。特許文献1には以下のような技術が開示されている。該技術では、ソースコードにおける条件分岐命令を複雑化することにより分岐条件の解析を困難とする。これにより、コードの難読性を高め、上記のような脅威を回避することを目指している。つまり、逆アセンブル等が可能であっても、それによって解析され生じたソースコード自体の難読性により、解析の手間が生じる。このようにして、ソフトウエアの耐タンパ性の向上を図ることができる。
しかし、ソースコード自体の難読性を上げても、そこから生じる実行形式のコード自体が平文であるため、時間をかければ必ず解析が可能である点が問題となる。そこで、実行形式のコードを暗号化し実行時に復号化するという方法が考えられる。これにより、記憶域に保存された状態の実行形式のファイルについては、暗号化されているため、解析がほぼ不可能である。しかしながら、暗号化するだけでは実行時には何らかの形で復号化する必要があり、復号化し実行中のコードについてはデバッガ等による解析が可能である点が問題となる。例えば、実行時に全てのコードを復号化してから実行する方法であると、実行前においては暗号化されているため、解析はほぼ不可能であるが、実行時にプログラム全てを復号化する方式であると、メモリ上において復号化されたプログラムがロードされた状態のイメージを解析することにより、その内容を把握することが可能である。そうすると、暗号化されたモジュールを容易に解析できないような、プログラムの実行方式の実現という課題が生じる。 However, the problem is that even if the obfuscation of the source code itself is improved, the executable code itself generated from it is in plain text, so that it can be analyzed without delay. Therefore, a method of encrypting the executable code and decrypting it at the time of execution can be considered. As a result, the executable format file stored in the storage area is encrypted, and thus analysis is almost impossible. However, if only encryption is performed, it is necessary to decrypt in some form at the time of execution, and the code that is being decrypted and being executed can be analyzed by a debugger or the like. For example, if it is a method to execute after decrypting all codes at the time of execution, it is encrypted before execution, so analysis is almost impossible, but it is a method to decrypt all programs at the time of execution By analyzing the image in a state where the decrypted program is loaded on the memory, the contents can be grasped. Then, the subject of implementation | achievement of the program execution system which cannot analyze an encrypted module easily arises.
以上の課題を解決するために、第一に本発明は以下のようなプログラム複合体を提供する。該プログラム複合体は複数のモジュールから構成されている。実行前においては、少なくとも一つのモジュールは暗号化データで保持され、実行時においては暗号化されたモジュールの前に実行されるモジュールが復号化の処理を行い、復号化されたモジュールが実行されるといったプログラム複合体である。 In order to solve the above problems, first, the present invention provides the following program complex. The program complex is composed of a plurality of modules. Before execution, at least one module is held as encrypted data, and at the time of execution, the module executed before the encrypted module performs the decryption process, and the decrypted module is executed. It is a program complex.
具体的には、モジュールの集合体からなるプログラム本体であって、各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体である。 Specifically, there is a program main body composed of a set of modules, and at least one of the modules is in an encrypted state when not executed, and a next module which is a module to be executed next is And a decrypted program for causing the computer to execute a process for enabling the arithmetic unit to execute the decryption at the timing before the end of the currently executing module if encrypted. Is the body.
第二は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを記憶域から削除する処理を行うプログラム複合体である。 The second is a program complex that performs the process of deleting the module from the storage area after calling the module to be executed next, based on the first program complex.
具体的には、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項1に記載のプログラム複合体である。 Specifically, the program further comprises a deletion program for causing a computer to execute a process of deleting a caller module, which is a module that called the next module after the start of execution of the next module, from the storage medium for the arithmetic unit. It is a program complex.
第三は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを再度暗号化する処理を行うプログラム複合体である。 The third is a program complex that performs the process of re-encrypting the module after calling the module to be executed next, based on the first program complex.
具体的には、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項1に記載のプログラム複合体。
Specifically, the program complex according to
以上のような構成をとる第一の本発明によって、実行前には暗号化データでモジュールを保持し、実行時に暗号化されたモジュールを直前に復号化して実行することが可能である。そうすると、実行直前まで、秘匿したいモジュールを暗号化の状態とすることが可能である。このため、デバッガ等でプログラムを解析する場合においても、一度に全てのモジュールが可読で有る場合に比べて、解析に手間がかかることとなる。これにより、プログラムの耐タンパ性が向上することとなる。 According to the first aspect of the present invention configured as described above, it is possible to hold a module with encrypted data before execution, and to decrypt and execute the module encrypted at the time of execution. Then, it is possible to put a module to be kept secret until it is executed just before execution. For this reason, even when a program is analyzed by a debugger or the like, it takes more time for analysis than when all modules are readable at once. As a result, the tamper resistance of the program is improved.
また、第二の本発明によって、秘匿したいモジュールを実行した後に速やかに記憶媒体より削除することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを消去し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。 In addition, according to the second aspect of the present invention, it is possible to quickly delete a module desired to be concealed from a storage medium after executing the module. As a result, the plaintext module remaining in the storage area after execution can be erased, and the contents cannot be analyzed. As a result, an operation in which a plaintext module exists in the storage area only at the time of execution becomes possible, and the tamper resistance of the program is improved.
また、第三の本発明によって、秘匿したいモジュールを実行した後に速やかに再暗号化することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを暗号化し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。 Further, according to the third aspect of the present invention, it is possible to quickly re-encrypt after executing a module to be kept secret. This makes it impossible to encrypt the plaintext module remaining in the storage area after execution and analyze its contents. As a result, an operation in which a plaintext module exists in the storage area only at the time of execution becomes possible, and the tamper resistance of the program is improved.
以下に、図を用いて本発明の実施の形態を説明する。なお、本発明はこれら実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施しうる。 Hereinafter, embodiments of the present invention will be described with reference to the drawings. Note that the present invention is not limited to these embodiments, and can be implemented in various modes without departing from the spirit of the present invention.
≪実施例1≫
<概要>
図1は、本実施例のプログラム複合体の動作の一例を説明するための概念図である。この図にあるように、プログラムAとしたプログラム複合体は記憶域のアドレスXからアドレスYの間にモジュールP個が存在している。モジュール2からモジュールPは暗号化されている。プログラムは、モジュール1から順にモジュールPまで実行されることとする。モジュール1はモジュール2を呼び出し、モジュール2はモジュール3を呼び出すという階層的な実行方式をとる。
Example 1
<Overview>
FIG. 1 is a conceptual diagram for explaining an example of the operation of the program complex of the present embodiment. As shown in this figure, the program complex designated as program A has P modules between address X and address Y in the storage area.
ここで、保護すべきモジュールはモジュールPであるとする。実行前の状態では、解析者はモジュールPがアドレスYの位置に存在することは知ることはない。実際にモジュールP−1まで実行し、解析した後でないと、モジュールPを解析することができない。一方、実行時にすべてのモジュールを先に復号化する暗号化方式であると、復号化した後にはプログラム全体の流れを見渡すことが可能となるので、モジュールPが保護すべきモジュールであることが早期に特定でき、モジュールPを解析することが可能である。 Here, it is assumed that the module to be protected is the module P. In the state before execution, the analyst does not know that the module P exists at the position of the address Y. The module P can be analyzed only after the module P-1 is actually executed and analyzed. On the other hand, if the encryption method is such that all modules are decrypted first at the time of execution, it is possible to overlook the flow of the entire program after decryption, so that the module P is an early module to be protected. The module P can be analyzed.
図2は図1の内容をさらに概略化したものであり、プログラムAの動作を説明するための図である。この図にあるように、初期状態(0201)ではモジュール1の他は暗号化されている。実行が開始されると、モジュール1が実行され、モジュール1の完了前に、モジュール1がモジュール2を復号化し、順次、次のモジュールを復号化しながら実行していく。そして、保護すべきP番目のモジュールを復号化しながら実行し、終了する(0202)。
FIG. 2 is a schematic diagram of the contents of FIG. 1 and is a diagram for explaining the operation of the program A. As shown in this figure, the rest of the
このように、本実施例のプログラム複合体は、プログラムの実行時において、モジュールが実行され終了する直前に次に実行すべきモジュールを復号化する動作が可能である。これにより、実行時になって初めてモジュールのコードが可読となるため、図2において保護すべきP番目のモジュールを解析しようとした場合には、直接P番目のモジュールを解析することは出来ず、順番に実行して解析する必要がある。このため、デバッガなどでプログラムを解析する場合、一度に全ての関数が可読である場合に比べ、大幅に解析に時間がかかることとなる。さらに、暗号化により保護対象関数Pまでの流れが隠蔽されているので、解析者がプログラムの全体像を十分につかめない。 As described above, the program complex according to the present embodiment can perform an operation of decoding the module to be executed next immediately before the execution and termination of the module when the program is executed. As a result, the module code becomes readable only at the time of execution. Therefore, when trying to analyze the P-th module to be protected in FIG. 2, the P-th module cannot be directly analyzed. Need to run and analyze. For this reason, when a program is analyzed with a debugger or the like, the analysis takes much longer than when all functions are readable at once. Furthermore, since the flow up to the protection target function P is concealed by encryption, the analyst cannot fully grasp the entire program.
<機能的構成>
図3は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(0300)は、「プログラム本体」(0301)と、「モジュールの集合体」(0302)と、「復号化プログラム」(0303)と、を有する。
<Functional configuration>
FIG. 3 is a diagram illustrating an example of functional blocks in the program complex of the present embodiment. As shown in this figure, the “program complex” (0300) of this embodiment includes a “program body” (0301), a “collection of modules” (0302), a “decryption program” (0303), and Have.
「プログラム本体」(0301)は、モジュールの集合体より構成される。モジュールは複数存在し、少なくとも1つの、保護すべきモジュールからなる。保護すべきモジュールは暗号化されている。 The “program body” (0301) is composed of a collection of modules. There are a plurality of modules, and at least one module is to be protected. The module to be protected is encrypted.
「モジュールの集合体」(0302)は複数のモジュールからなる。ここでモジュールとは、関数や、サブルーチン、メソッドなどを含む。モジュールは次に実行すべき次モジュールが暗号化されている場合には、復号化プログラム(0303)を呼び出し、当該モジュール終了前のタイミングにおいて次モジュールを復号化し、次モジュールを実行する。図3では、モジュール2の次モジュールが保護すべきモジュールとなっている。したがって、モジュール2は、モジュール2の終了前のタイミングにおいて復号化プログラム(0303)を呼び出し、モジュール3を復号化し、実行させる。
The “module aggregate” (0302) is composed of a plurality of modules. Here, the module includes a function, a subroutine, a method, and the like. When the next module to be executed next is encrypted, the module calls the decryption program (0303), decrypts the next module at the timing before the end of the module, and executes the next module. In FIG. 3, the module following the
ここで、モジュールの「実行」とは、モジュールをメモリ等の記憶域にロードして、演算装置にデータを送り込み、その結果を受け取ることで、システムの内部状態に変化を加えることである。「演算装置」は、CPUやMPU、GPUなどの演算可能な装置を指す。これら「演算装置」を内部に組み込み、演算の結果を記憶域において保持可能な装置を「計算機」とする。 Here, “execution” of a module is to change the internal state of the system by loading the module into a storage area such as a memory, sending data to the arithmetic device, and receiving the result. “Arithmetic device” refers to a device capable of computation, such as a CPU, MPU, or GPU. A device that incorporates these “arithmetic units” and can store the result of the calculation in a storage area is called a “computer”.
暗号化されているモジュールは必ずしも、保護すべきモジュールに限らない。解析者を欺くために、保護すべきモジュール以外のモジュールをも暗号化することによって、保護すべき関数に至るまでの道筋を隠蔽することができる。これにより、解析にかかる手間が増大し、耐タンパ性の向上を見込むことができる。 The encrypted module is not necessarily the module to be protected. In order to deceive the analyst, the path to the function to be protected can be hidden by encrypting modules other than the module to be protected. As a result, the labor required for the analysis increases, and an improvement in tamper resistance can be expected.
図4は「モジュールの終了前のタイミング」を説明するための図である。図の横軸は時間軸であり、モジュールが実行されるタイミングを示す。モジュール1は平文のモジュールであり、終了前に暗号化モジュールであるモジュール2を復号化するために復号化プログラムを呼び出すと共にモジュール2を実行させる。モジュール2は終了前にモジュール3を実行する。モジュール4はモジュール3の終了前のタイミングにて実行が開始され、同時にモジュール2の終了前のタイミングにて実行が開始されている。この場合はモジュール2が復号化プログラムを呼びだしてモジュール4を復号化し、実行してもよいし、モジュール3が復号化プログラムを呼び出し、終了前にモジュール4を復号化し、実行してもよい。モジュール5はモジュール4の終了後に実行されているから、モジュール2の終了前のタイミングでモジュール2が復号化プログラムを呼び出すことによって復号化され実行される。
FIG. 4 is a diagram for explaining “timing before the end of the module”. The horizontal axis in the figure is the time axis, and indicates the timing when the module is executed. The
このように、「次に実行されるモジュールである次モジュール」とは、モジュール2とモジュール4との関係や、モジュール2とモジュール5との関係のように、必ずしも次に実行されるモジュールだけに限られない。上記のとおり、モジュール内の適切な位置に復号化プログラムの呼び出しと、次モジュールの実行命令を組み込むことで、要求されたタイミングでモジュールが実行され、適切なプログラムの動作が得られる。
As described above, “the next module to be executed next” refers to only the module to be executed next, such as the relationship between the
「復号化プログラム」(0303)は、次モジュールの復号化を行う。具体的には、実行中のモジュールより次モジュールの記憶域におけるアドレス情報を受け取り、その情報を元に、復号化を行う。復号化プログラムは図2のように、別個独立として存在し、モジュールから呼び出されるものでもよいし、各モジュールに直接埋め込まれたものでもよい。また、復号化プログラムを複数存在させ、複数の種類の暗号化方式に対応させるものでもよい。この場合、実行中のモジュールには次モジュールに適合する暗号化方式の復号化プログラムの実行命令を含ませることができる。 The “decryption program” (0303) decrypts the next module. Specifically, address information in the storage area of the next module is received from the module being executed, and decryption is performed based on the information. As shown in FIG. 2, the decryption program exists as a separate and independent program, and may be called from a module, or may be directly embedded in each module. Further, a plurality of decryption programs may be present to correspond to a plurality of types of encryption methods. In this case, an execution instruction of a decryption program of an encryption method suitable for the next module can be included in the module being executed.
<処理の流れ>
図5は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS0501)。暗号化されている場合には、復号化するための処理を実行する(ステップS0502)。暗号化されていない場合には、ステップS0502はスキップする。その後次モジュールを実行し(ステップS0503)、プログラムの終了か否かの判断を行い(ステップS0504)、終了で無ければ、ステップS0501に戻る。終了であれば、プログラムを終了させる。
<Process flow>
FIG. 5 is a flowchart showing an example of the processing flow in the program complex of this embodiment. First, it is determined whether or not the next module is encrypted (step S0501). If it is encrypted, a process for decrypting is executed (step S0502). If not encrypted, step S0502 is skipped. Thereafter, the next module is executed (step S0503), and it is determined whether or not the program is finished (step S0504). If not finished, the process returns to step S0501. If finished, end the program.
<ハードウエア的構成>
図6は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(0601)と、「揮発性メモリ」(0602)と、「不揮発性メモリ」(0603)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(0604)を有する。そしてそれらが「システムバス」(0605)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
<Hardware configuration>
FIG. 6 is a schematic diagram showing an example of a configuration in a program complex when the above functional components are realized as hardware. The operation of each hardware component in the application switching process will be described using this figure. As shown in this figure, the program complex of this embodiment includes a “CPU (central processing unit)” (0601), “volatile memory” (0602), and “nonvolatile memory” ( 0603). Also, it has an “input / output I / F” (0604) to which a mouse, a keyboard, etc. that accept operation input from the user and a display device are connected. These are connected to each other through a data communication path such as a “system bus” (0605), and transmit / receive information and process information.
また、「揮発性メモリ」(0601)は、各種処理を行うプログラムを「CPU」(0601)に実行させるために「不揮発性メモリ」(0602)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。 The “volatile memory” (0601) is a work area that is also a work area of the program at the same time it is read from the “nonvolatile memory” (0602) in order to cause the “CPU” (0601) to execute a program for performing various processes. I will provide a.
ここで、入出力I/F(0604)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(0603)より揮発性メモリ(0602)にロードされる。プログラムAはCPU(0601)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(0601)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(0601)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(0602)に書きこむ。書きこまれたコードはCPU(0601)において実行される。 Here, the program A is started by a command from the input / output I / F (0604). Then, the program A is loaded from the nonvolatile memory (0603) to the volatile memory (0602). The program A is processed by the CPU (0601). Program A consists of N modules and a decoding program. The modules are executed in order by the CPU (0601), and when it is determined that the next module is encrypted, the decryption program is executed by the CPU (0601) by the currently executing module and encrypted. The module is decoded to form a plaintext module, and the code is written in the volatile memory (0602). The written code is executed by the CPU (0601).
<効果の簡単な説明>
以上のように本実施例のプログラム複合体によって、暗号化された次に実行されるべきモジュールを呼び出し元のモジュールによって復号化し、実行することができる。これにより、モジュールは階層的に実行されることとなり、実行直前まで保護すべきモジュールを暗号化したままとすることが可能である。これにより、一度に全てのモジュールを復号化する場合よりも、解析に手間がかかることとなるため、プログラムの耐タンパ性が向上する。
<Simple explanation of effect>
As described above, the encrypted module to be executed next can be decrypted by the calling module and executed by the program complex of this embodiment. As a result, the modules are executed hierarchically, and the module to be protected can be kept encrypted until immediately before the execution. As a result, more time is required for analysis than when all the modules are decrypted at once, and the tamper resistance of the program is improved.
≪実施例2≫
<概要>
図7は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時(0801)においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を記憶域から削除する(0802)。
<< Example 2 >>
<Overview>
FIG. 7 is a conceptual diagram for explaining an application example of the program complex of the present embodiment. As shown in this figure, modules other than
このように本実施例のプログラム複合体は、次に実行すべきモジュールが開始されると、次モジュールを呼び出したモジュールを記憶域から削除することが可能な切換装置である。これにより、プログラム実行終了時において記憶域に残存しているモジュールのコードを解析することが不可能となり、プログラムの耐タンパ性が向上する。 As described above, the program complex of this embodiment is a switching device that can delete the module that called the next module from the storage area when the module to be executed next is started. This makes it impossible to analyze the code of the module remaining in the storage area at the end of program execution, and the tamper resistance of the program is improved.
<機能的構成>
図8は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(0800)は、「プログラム本体」(0801)と、「モジュールの集合体」(0802)と、「復号化プログラム」(0803)と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」(0800)が「削除プログラム」(0804)を新たに有する点である。
<Functional configuration>
FIG. 8 is a diagram illustrating an example of functional blocks in the program complex of the present embodiment. As shown in this figure, the “program complex” (0800) of this embodiment includes a “program body” (0801), a “collection of modules” (0802), a “decryption program” (0803), Have. Since these structural requirements have already been described in the above embodiment, the description thereof will be omitted. The feature point of the program complex of the present embodiment is that the “program complex” (0800) newly has a “delete program” (0804).
「削除プログラム」(0804)は、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための処理を行う。図7において説明すると、モジュール2の動作が完了したのを、モジュール2あるいはモジュール3で検知し、モジュール2またはモジュール3からモジュール2の記憶域のアドレスを取得する。取得したアドレスに基づいて、削除プログラムはモジュール2の削除を実行する。
<処理の流れ>
図9は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS0901)。暗号化されている場合には、復号化するための処理を実行する(ステップS0902)。暗号化されていない場合には、ステップS0902はスキップする。その後次モジュールを実行開始(ステップS0903)する。次いで、次モジュールは呼出元モジュールの削除を行う(ステップS0904)。その後、プログラムの終了か否かの判断を行い(ステップS0905)、終了で無ければ、ステップS0901に戻る。終了であれば、プログラムを終了させる。
The “deletion program” (0804) performs a process for causing the computer to execute a process of deleting the caller module, which is the module that called the next module after the start of the execution of the next module, from the storage medium for the arithmetic unit. Referring to FIG. 7, the completion of the operation of the
<Process flow>
FIG. 9 is a flowchart showing an example of the flow of processing in the program complex of this embodiment. First, it is determined whether or not the next module is encrypted (step S0901). If it is encrypted, a process for decrypting is executed (step S0902). If it is not encrypted, step S0902 is skipped. Thereafter, execution of the next module is started (step S0903). Next, the next module deletes the calling source module (step S0904). Thereafter, it is determined whether or not the program is finished (step S0905). If not finished, the process returns to step S0901. If finished, end the program.
<ハードウエア構成>
図10は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(1001)と、「揮発性メモリ」(1002)と、「不揮発性メモリ」(1003)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(1004)を有する。そしてそれらが「システムバス」(1005)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
<Hardware configuration>
FIG. 10 is a schematic diagram illustrating an example of a configuration in the program complex when the above functional components are realized as hardware. The operation of each hardware component in the application switching process will be described using this figure. As shown in this figure, the program complex of the present embodiment includes a “CPU (central processing unit)” (1001), a “volatile memory” (1002), and a “nonvolatile memory” ( 1003). In addition, it has an “input / output I / F” (1004) to which a mouse, a keyboard, etc. that accept operation input from the user, and a display device are connected. Then, they are connected to each other by a data communication path such as a “system bus” (1005) to transmit / receive information and process information.
また、「揮発性メモリ」(1002)は、各種処理を行うプログラムを「CPU」(1001)に実行させるために「不揮発性メモリ」(1003)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。 The “volatile memory” (1002) is a work area that is also a work area of the program at the same time that it is read from the “nonvolatile memory” (1003) in order to cause the “CPU” (1001) to execute a program for performing various processes. I will provide a.
ここで、入出力I/F(1004)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(1003)より揮発性メモリ(1002)にロードされる。プログラムAはCPU(1001)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(1001)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(1001)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(1002)に書きこむ。書きこまれたコードはCPU(1001)において実行される。 Here, the program A is activated by a command from the input / output I / F (1004). Then, the program A is loaded from the nonvolatile memory (1003) to the volatile memory (1002). The program A is processed by the CPU (1001). Program A consists of N modules and a decoding program. The modules are sequentially executed in the CPU (1001), and when it is determined that the next module is encrypted, the decryption program is executed in the CPU (1001) by the currently executing module and encrypted. The module is decoded to form a plaintext module, and the code is written in the volatile memory (1002). The written code is executed by the CPU (1001).
平文となったモジュールを実行する際に、プログラムAは削除プログラムをCPU(1001)にて実行する。削除プログラムは、プログラムAのうち先に実行されたモジュールを揮発性メモリ(1002)から削除する。 When executing the plaintext module, the program A executes the deletion program by the CPU (1001). The deletion program deletes the previously executed module of the program A from the volatile memory (1002).
<効果の簡単な説明>
このようにして、実行後のモジュールを削除していくことによって、実行後に記憶域に残っている平文のコードを除くことができる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
<Simple explanation of effect>
In this way, by deleting the module after execution, the plaintext code remaining in the storage area after execution can be removed. This makes it impossible to analyze the code of the module after execution. Therefore, it is possible to execute a program complex having high tamper resistance.
≪実施例3≫
<概要>
図11は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時(1101)においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を再度暗号化する(1102)。
Example 3
<Overview>
FIG. 11 is a conceptual diagram for explaining an application example of the program complex of the present embodiment. As shown in this figure, modules other than
このように本実施例のプログラム複合体は、次モジュールの実行時にそのモジュールを呼出した呼出元のモジュールを再度暗号化する処理が可能である。これにより、モジュールあるいはプログラム本体の実行後において、記憶域に残存しているモジュールのコードを解析されることが不可能となる。したがって、プログラム複合体の耐タンパ性が向上する。 As described above, the program complex according to the present embodiment can perform a process of re-encrypting the calling source module that called the module when the next module is executed. This makes it impossible to analyze the code of the module remaining in the storage area after the execution of the module or program body. Therefore, the tamper resistance of the program complex is improved.
<機能的構成>
図12は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(1200)は、「プログラム本体」(1201)と、「モジュールの集合体」(1202)と、「復号化プログラム」(1203)と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」(1200)が「再暗号化プログラム」(1204)を新たに有する点である。
<Functional configuration>
FIG. 12 is a diagram illustrating an example of functional blocks in the program complex of the present embodiment. As shown in this figure, the “program complex” (1200) of this embodiment includes a “program body” (1201), a “collection of modules” (1202), a “decryption program” (1203), Have. Since these structural requirements have already been described in the above embodiment, the description thereof will be omitted. The feature of the program complex of the present embodiment is that the “program complex” (1200) newly has a “re-encryption program” (1204).
「再暗号化プログラム」(1204)は、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための処理を行う。具体的には、次モジュールの実行開始後において、呼出元モジュール(モジュール2)のアドレス情報を再暗号化プログラムは呼出元モジュールあるいは実行中モジュール(モジュール3)から取得する。実行中モジュールは再暗号化プログラムを実行し、呼出元モジュールを暗号化する。 The “re-encryption program” (1204) performs a process for causing the computer to execute a process of re-encrypting the caller module in the storage medium for the arithmetic device after the execution of the next module is started. Specifically, after the execution of the next module is started, the re-encryption program acquires the address information of the caller module (module 2) from the caller module or the module being executed (module 3). The executing module executes the re-encryption program and encrypts the calling module.
<処理の流れ>
図13は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS1301)。暗号化されている場合には、復号化するための処理を実行する(ステップS1302)。暗号化されていない場合には、ステップS1302はスキップする。その後次モジュールを実行開始(ステップS1303)する。次いで、次モジュールは呼出元モジュールの再暗号化を行う(ステップS1304)。その後、プログラムの終了か否かの判断を行い(ステップS1305)、終了で無ければ、ステップS1301に戻る。終了であれば、プログラムを終了させる。
<Process flow>
FIG. 13 is a flowchart showing an example of the processing flow in the program complex of the present embodiment. First, it is determined whether or not the next module is encrypted (step S1301). If it is encrypted, a process for decrypting is executed (step S1302). If not encrypted, step S1302 is skipped. Thereafter, execution of the next module is started (step S1303). Next, the next module re-encrypts the caller module (step S1304). Thereafter, it is determined whether or not the program is finished (step S1305), and if not finished, the process returns to step S1301. If finished, end the program.
<ハードウエア構成>
図14は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(1401)と、「揮発性メモリ」(1402)と、「不揮発性メモリ」(1403)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(1404)を有する。そしてそれらが「システムバス」(1405)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
<Hardware configuration>
FIG. 14 is a schematic diagram illustrating an example of a configuration in the program complex when the above functional components are realized as hardware. The operation of each hardware component in the application switching process will be described using this figure. As shown in this figure, the program complex of this embodiment includes a “CPU (central processing unit)” (1401), a “volatile memory” (1402), and a “nonvolatile memory” ( 1403). Also, it has an “input / output I / F” (1404) to which a mouse, a keyboard, etc. that accept operation input from the user, and a display device are connected. These are connected to each other through a data communication path such as a “system bus” (1405), and perform transmission / reception and processing of information.
また、「揮発性メモリ」(1402)は、各種処理を行うプログラムを「CPU」(1401)に実行させるために「不揮発性メモリ」(1403)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。 In addition, the “volatile memory” (1402) is a work area that is a work area of the program at the same time it is read from the “nonvolatile memory” (1403) in order to cause the “CPU” (1401) to execute a program for performing various processes. I will provide a.
ここで、入出力I/F(1404)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(1403)より揮発性メモリ(1402)にロードされる。プログラムAはCPU(1401)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(1401)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(1401)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(1402)に書きこむ。書きこまれたコードはCPU(1401)において実行される。 Here, the program A is started by a command from the input / output I / F (1404). Then, the program A is loaded from the nonvolatile memory (1403) to the volatile memory (1402). The program A is processed by the CPU (1401). Program A consists of N modules and a decoding program. The modules are sequentially executed in the CPU (1401), and when it is determined that the next module is encrypted, the decryption program is executed in the CPU (1401) by the currently executing module and encrypted. The module is decoded to form a plaintext module, and the code is written in the volatile memory (1402). The written code is executed by the CPU (1401).
平文となったモジュールを実行する際に、プログラムAは再暗号化プログラムをCPU(1401)にて実行する。再暗号化プログラムは、プログラムAのうち先に実行されたモジュールを再度暗号化し、不揮発性メモリないしは揮発性メモリに保持する。 When executing the module in plain text, the program A executes the re-encryption program on the CPU (1401). The re-encryption program encrypts the previously executed module of the program A again and holds it in a nonvolatile memory or a volatile memory.
<効果の簡単な説明>
このようにして、本実施例のプログラム複合体は、実行後に記憶域に残っている平文のコードを再び暗号化できる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
<Simple explanation of effect>
In this way, the program complex of this embodiment can encrypt again the plaintext code remaining in the storage area after execution. This makes it impossible to analyze the code of the module after execution. Therefore, it is possible to execute a program complex having high tamper resistance.
0300 プログラム複合体
0301 プログラム本体
0302 モジュールの集合体
0303 復号化プログラム
0300 Program complex 0301
Claims (2)
各モジュールのうち,少なくとも保護すべきモジュールは非実行時には暗号化された状態であって,保護すべきモジュール以外のモジュールもが暗号化されている,プログラム本体と、
現在実行中のモジュールの終了前であって現在実行中のモジュールが終了する時点で次に実行される次モジュールの実行直前のタイミングにて演算装置が実行可能に次モジュールを復号化するための処理を計算機に実行させるための復号化プログラムと、
次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを実行メモリ領域から削除する処理を計算機に実行させるための削除プログラムと、からなり、
実行中のモジュール内に、復号化プログラムの呼び出しと、次モジュールの実行命令とが組み込まれているおり,
前記復号化は、次モジュールの暗号化されている記憶域におけるアドレス情報を実行中のモジュールから受け取って行われ,
復号化プログラムは,各モジュールに直接組み込まれたものであって,複数存在し、複数の暗号化方式に対応したものである
プログラム複合体。 A program body consisting of a collection of modules that are expanded in the execution memory area during execution,
Of each module, at least a module to be protected is in an encrypted state when not executed, and a module other than the module to be protected is also encrypted,
Processing for decoding the next module so that it can be executed by the arithmetic unit at the timing immediately before the next module to be executed next when the module currently being executed ends before the module currently being executed ends A decryption program for causing a computer to execute
A deletion program for causing the computer to execute a process of deleting the caller module that is the module that called the next module after the start of execution of the next module from the execution memory area,
In the module being executed, the decryption program call and the execution instruction of the next module are incorporated.
The decryption is performed by receiving address information in the encrypted storage area of the next module from the executing module,
A decryption program is a program complex that is incorporated directly into each module, and there are multiple decryption programs that correspond to multiple encryption methods.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016155565A JP6374454B2 (en) | 2016-08-08 | 2016-08-08 | Module encryption / decryption program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016155565A JP6374454B2 (en) | 2016-08-08 | 2016-08-08 | Module encryption / decryption program |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011204370A Division JP5988473B2 (en) | 2011-09-20 | 2011-09-20 | Module encryption / decryption program |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2016224972A JP2016224972A (en) | 2016-12-28 |
JP6374454B2 true JP6374454B2 (en) | 2018-08-15 |
Family
ID=57746687
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016155565A Active JP6374454B2 (en) | 2016-08-08 | 2016-08-08 | Module encryption / decryption program |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6374454B2 (en) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9412487D0 (en) * | 1994-06-22 | 1994-08-10 | Inmos Ltd | A computer system for executing branch instructions |
JP3172396B2 (en) * | 1995-06-30 | 2001-06-04 | キヤノン株式会社 | Cryptographic communication device and cryptographic communication system |
US7039814B2 (en) * | 2001-03-07 | 2006-05-02 | Sony Corporation | Method for securing software via late stage processor instruction decryption |
JP4475894B2 (en) * | 2002-08-01 | 2010-06-09 | パナソニック株式会社 | Device for decrypting encrypted data and placing it in execution memory space, and method thereof |
JP4557516B2 (en) * | 2003-07-30 | 2010-10-06 | パナソニック株式会社 | ENCRYPTED PROGRAM GENERATION DEVICE AND ENCRYPTED PROGRAM GENERATION METHOD |
JP4770425B2 (en) * | 2005-11-24 | 2011-09-14 | 富士ゼロックス株式会社 | Program, method and apparatus for creating protected execution program |
JP2008257221A (en) * | 2007-03-13 | 2008-10-23 | Matsushita Electric Ind Co Ltd | Signal processing apparatus |
JP2010217975A (en) * | 2009-03-13 | 2010-09-30 | Nec System Technologies Ltd | Information processor, application program, and method for executing application program |
-
2016
- 2016-08-08 JP JP2016155565A patent/JP6374454B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
JP2016224972A (en) | 2016-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20170295013A1 (en) | Method for fulfilling a cryptographic request requiring a value of a private key | |
CN105227565B (en) | The method and apparatus that anti-reversing for Android system cracks shared object file | |
US20160117518A1 (en) | File Encryption/Decryption Device And File Encryption/Decryption Method | |
CN107612683B (en) | Encryption and decryption method, device, system, equipment and storage medium | |
CN107273723B (en) | So file shell adding-based Android platform application software protection method | |
CN105022936A (en) | Class file encryption and decryption method and class file encryption and decryption device | |
CN107491317A (en) | A kind of symmetrical encryption and decryption method and systems of AES for accelerating platform based on isomery | |
CN107528690A (en) | A kind of symmetrical encryption and decryption method and systems of SM4 for accelerating platform based on isomery | |
JP5988473B2 (en) | Module encryption / decryption program | |
CN106375080B (en) | Flash file encryption and decryption method and device | |
US9292708B2 (en) | Protection of interpreted source code in virtual appliances | |
Kotov et al. | Understanding crypto-ransomware | |
TW201525761A (en) | Encryption and decryption method for library of open system | |
CN108229190B (en) | Transparent encryption and decryption control method, device, program, storage medium and electronic equipment | |
CN114124364A (en) | Key security processing method, device, equipment and computer readable storage medium | |
CN109325322B (en) | Software intellectual property protection system and method for embedded platform | |
KR20170022023A (en) | An apparatus for obfuscating and restoring program execution code and method thereof | |
JP2010217975A (en) | Information processor, application program, and method for executing application program | |
US9378395B2 (en) | Method, a device and a computer program support for execution of encrypted computer code | |
JP6374454B2 (en) | Module encryption / decryption program | |
JP6374453B2 (en) | Module encryption / decryption program | |
CN103605927A (en) | Encryption and decryption method based on embedded Linux system | |
CN109995526A (en) | A kind of storage method of key and the call method and device of device, key | |
JP2016028334A (en) | Encryption/decryption program of module | |
CN107688729B (en) | Application program protection system and method based on trusted host |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170622 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20170721 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170907 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20171211 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20180309 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20180319 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20180523 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20180621 |
|
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: 20180703 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20180719 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6374454 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 |