JP5988473B2 - モジュールの暗号化/復号化プログラム - Google Patents

モジュールの暗号化/復号化プログラム Download PDF

Info

Publication number
JP5988473B2
JP5988473B2 JP2011204370A JP2011204370A JP5988473B2 JP 5988473 B2 JP5988473 B2 JP 5988473B2 JP 2011204370 A JP2011204370 A JP 2011204370A JP 2011204370 A JP2011204370 A JP 2011204370A JP 5988473 B2 JP5988473 B2 JP 5988473B2
Authority
JP
Japan
Prior art keywords
module
program
execution
executed
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
Application number
JP2011204370A
Other languages
English (en)
Other versions
JP2013065237A (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.)
Dnp Hypertech Co Ltd
Original Assignee
Dnp Hypertech Co Ltd
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 Dnp Hypertech Co Ltd filed Critical Dnp Hypertech Co Ltd
Priority to JP2011204370A priority Critical patent/JP5988473B2/ja
Priority to PCT/JP2012/065246 priority patent/WO2013042409A1/ja
Priority to US14/346,012 priority patent/US9251356B2/en
Priority to KR1020147010195A priority patent/KR101942010B1/ko
Priority to KR1020167028810A priority patent/KR20160123395A/ko
Publication of JP2013065237A publication Critical patent/JP2013065237A/ja
Application granted granted Critical
Publication of JP5988473B2 publication Critical patent/JP5988473B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • 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
    • 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/123Restricting unauthorised execution of programs by using dedicated hardware, e.g. dongles, smart cards, cryptographic processors, global positioning systems [GPS] devices
    • 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
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • 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

Description

本発明は、ソフトウエアの耐タンパ性を向上させる技術に関する。
ソフトウエアのうち、例えば認証アルゴリズムを含むもののように、その中身を知られたくないものが存在する。にもかかわらず、ソースコードはもとより、実行形式のソフトウエアにおいても、逆アセンブルやデバッギングにより、ソフトウエアのアルゴリズム等の内容が明るみにされるという脅威が存在する。特許文献1には以下のような技術が開示されている。該技術では、ソースコードにおける条件分岐命令を複雑化することにより分岐条件の解析を困難とする。これにより、コードの難読性を高め、上記のような脅威を回避することを目指している。つまり、逆アセンブル等が可能であっても、それによって解析され生じたソースコード自体の難読性により、解析の手間が生じる。このようにして、ソフトウエアの耐タンパ性の向上を図ることができる。
特開2011−28506号公報
しかし、ソースコード自体の難読性を上げても、そこから生じる実行形式のコード自体が平文であるため、時間をかければ必ず解析が可能である点が問題となる。そこで、実行形式のコードを暗号化し実行時に復号化するという方法が考えられる。これにより、記憶域に保存された状態の実行形式のファイルについては、暗号化されているため、解析がほぼ不可能である。しかしながら、暗号化するだけでは実行時には何らかの形で復号化する必要があり、復号化し実行中のコードについてはデバッガ等による解析が可能である点が問題となる。例えば、実行時に全てのコードを復号化してから実行する方法であると、実行前においては暗号化されているため、解析はほぼ不可能であるが、実行時にプログラム全てを復号化する方式であると、メモリ上において復号化されたプログラムがロードされた状態のイメージを解析することにより、その内容を把握することが可能である。そうすると、暗号化されたモジュールを容易に解析できないような、プログラムの実行方式の実現という課題が生じる。
以上の課題を解決するために、第一に本発明は以下のようなプログラム複合体を提供する。該プログラム複合体は複数のモジュールから構成されている。実行前においては、少なくとも一つのモジュールは暗号化データで保持され、実行時においては暗号化されたモジュールの前に実行されるモジュールが復号化の処理を行い、復号化されたモジュールが実行されるといったプログラム複合体である。
具体的には、モジュールの集合体からなるプログラム本体であって、各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体である。
第二は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを記憶域から削除する処理を行うプログラム複合体である。
具体的には、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項1に記載のプログラム複合体である。
第三は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを再度暗号化する処理を行うプログラム複合体である。
具体的には、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項1に記載のプログラム複合体。
以上のような構成をとる第一の本発明によって、実行前には暗号化データでモジュールを保持し、実行時に暗号化されたモジュールを直前に復号化して実行することが可能である。そうすると、実行直前まで、秘匿したいモジュールを暗号化の状態とすることが可能である。このため、デバッガ等でプログラムを解析する場合においても、一度に全てのモジュールが可読で有る場合に比べて、解析に手間がかかることとなる。これにより、プログラムの耐タンパ性が向上することとなる。
また、第二の本発明によって、秘匿したいモジュールを実行した後に速やかに記憶媒体より削除することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを消去し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。
また、第三の本発明によって、秘匿したいモジュールを実行した後に速やかに再暗号化することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを暗号化し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。
以下に、図を用いて本発明の実施の形態を説明する。なお、本発明はこれら実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施しうる。なお、実施例1は、主に請求項1、2に共通の部分について説明する。また、実施例2は、主に請求項について説明する。また、実施例3は、主に請求項について説明する。

≪実施例1≫
<概要>
図1は、本実施例のプログラム複合体の動作の一例を説明するための概念図である。この図にあるように、プログラムAとしたプログラム複合体は記憶域のアドレスXからアドレスYの間にモジュールP個が存在している。モジュール2からモジュールPは暗号化されている。プログラムは、モジュール1から順にモジュールPまで実行されることとする。モジュール1はモジュール2を呼び出し、モジュール2はモジュール3を呼び出すという階層的な実行方式をとる。
ここで、保護すべきモジュールはモジュールPであるとする。実行前の状態では、解析者はモジュールPがアドレスYの位置に存在することは知ることはない。実際にモジュールP−1まで実行し、解析した後でないと、モジュールPを解析することができない。一方、実行時にすべてのモジュールを先に復号化する暗号化方式であると、復号化した後にはプログラム全体の流れを見渡すことが可能となるので、モジュールPが保護すべきモジュールであることが早期に特定でき、モジュールPを解析することが可能である。
図2は図1の内容をさらに概略化したものであり、プログラムAの動作を説明するための図である。この図にあるように、初期状態(0201)ではモジュール1の他は暗号化されている。実行が開始されると、モジュール1が実行され、モジュール1の完了前に、モジュール1がモジュール2を復号化し、順次、次のモジュールを復号化しながら実行していく。そして、保護すべきP番目のモジュールを復号化しながら実行し、終了する(0202)。
このように、本実施例のプログラム複合体は、プログラムの実行時において、モジュールが実行され終了する直前に次に実行すべきモジュールを復号化する動作が可能である。これにより、実行時になって初めてモジュールのコードが可読となるため、図2において保護すべきP番目のモジュールを解析しようとした場合には、直接P番目のモジュールを解析することは出来ず、順番に実行して解析する必要がある。このため、デバッガなどでプログラムを解析する場合、一度に全ての関数が可読である場合に比べ、大幅に解析に時間がかかることとなる。さらに、暗号化により保護対象関数Pまでの流れが隠蔽されているので、解析者がプログラムの全体像を十分につかめない。
<機能的構成>
図3は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(0300)は、「プログラム本体」(0301)と、「モジュールの集合体」(0302)と、「復号化プログラム」(0303)と、を有する。
「プログラム本体」(0301)は、モジュールの集合体より構成される。モジュールは複数存在し、少なくとも1つの、保護すべきモジュールからなる。保護すべきモジュールは暗号化されている。
「モジュールの集合体」(0302)は複数のモジュールからなる。ここでモジュールとは、関数や、サブルーチン、メソッドなどを含む。モジュールは次に実行すべき次モジュールが暗号化されている場合には、復号化プログラム(0303)を呼び出し、当該モジュール終了前のタイミングにおいて次モジュールを復号化し、次モジュールを実行する。図3では、モジュール2の次モジュールが保護すべきモジュールとなっている。したがって、モジュール2は、モジュール2の終了前のタイミングにおいて復号化プログラム(0303)を呼び出し、モジュール3を復号化し、実行させる。
ここで、モジュールの「実行」とは、モジュールをメモリ等の記憶域にロードして、演算装置にデータを送り込み、その結果を受け取ることで、システムの内部状態に変化を加えることである。「演算装置」は、CPUやMPU、GPUなどの演算可能な装置を指す。これら「演算装置」を内部に組み込み、演算の結果を記憶域において保持可能な装置を「計算機」とする。
暗号化されているモジュールは必ずしも、保護すべきモジュールに限らない。解析者を欺くために、保護すべきモジュール以外のモジュールをも暗号化することによって、保護すべき関数に至るまでの道筋を隠蔽することができる。これにより、解析にかかる手間が増大し、耐タンパ性の向上を見込むことができる。
図4は「モジュールの終了前のタイミング」を説明するための図である。図の横軸は時間軸であり、モジュールが実行されるタイミングを示す。モジュール1は平文のモジュールであり、終了前に暗号化モジュールであるモジュール2を復号化するために復号化プログラムを呼び出すと共にモジュール2を実行させる。モジュール2は終了前にモジュール3を実行する。モジュール4はモジュール3の終了前のタイミングにて実行が開始され、同時にモジュール2の終了前のタイミングにて実行が開始されている。この場合はモジュール2が復号化プログラムを呼びだしてモジュール4を復号化し、実行してもよいし、モジュール3が復号化プログラムを呼び出し、終了前にモジュール4を復号化し、実行してもよい。モジュール5はモジュール4の終了後に実行されているから、モジュール2の終了前のタイミングでモジュール2が復号化プログラムを呼び出すことによって復号化され実行される。
このように、「次に実行されるモジュールである次モジュール」とは、モジュール2とモジュール4との関係や、モジュール2とモジュール5との関係のように、必ずしも次に実行されるモジュールだけに限られない。上記のとおり、モジュール内の適切な位置に復号化プログラムの呼び出しと、次モジュールの実行命令を組み込むことで、要求されたタイミングでモジュールが実行され、適切なプログラムの動作が得られる。
「復号化プログラム」(0303)は、次モジュールの復号化を行う。具体的には、実行中のモジュールより次モジュールの記憶域におけるアドレス情報を受け取り、その情報を元に、復号化を行う。復号化プログラムは図2のように、別個独立として存在し、モジュールから呼び出されるものでもよいし、各モジュールに直接埋め込まれたものでもよい。また、復号化プログラムを複数存在させ、複数の種類の暗号化方式に対応させるものでもよい。この場合、実行中のモジュールには次モジュールに適合する暗号化方式の復号化プログラムの実行命令を含ませることができる。
<処理の流れ>
図5は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS0501)。暗号化されている場合には、復号化するための処理を実行する(ステップS0502)。暗号化されていない場合には、ステップS0502はスキップする。その後次モジュールを実行し(ステップS0503)、プログラムの終了か否かの判断を行い(ステップS0504)、終了で無ければ、ステップS0501に戻る。終了であれば、プログラムを終了させる。
<ハードウエア的構成>
図6は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(0601)と、「揮発性メモリ」(0602)と、「不揮発性メモリ」(0603)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(0604)を有する。そしてそれらが「システムバス」(0605)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
また、「揮発性メモリ」(0601)は、各種処理を行うプログラムを「CPU」(0601)に実行させるために「不揮発性メモリ」(0602)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
ここで、入出力I/F(0604)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(0603)より揮発性メモリ(0602)にロードされる。プログラムAはCPU(0601)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(0601)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(0601)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(0602)に書きこむ。書きこまれたコードはCPU(0601)において実行される。
<効果の簡単な説明>
以上のように本実施例のプログラム複合体によって、暗号化された次に実行されるべきモジュールを呼び出し元のモジュールによって復号化し、実行することができる。これにより、モジュールは階層的に実行されることとなり、実行直前まで保護すべきモジュールを暗号化したままとすることが可能である。これにより、一度に全てのモジュールを復号化する場合よりも、解析に手間がかかることとなるため、プログラムの耐タンパ性が向上する。
≪実施例2≫
<概要>
図7は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時(0801)においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を記憶域から削除する(0802)。
このように本実施例のプログラム複合体は、次に実行すべきモジュールが開始されると、次モジュールを呼び出したモジュールを記憶域から削除することが可能な切換装置である。これにより、プログラム実行終了時において記憶域に残存しているモジュールのコードを解析することが不可能となり、プログラムの耐タンパ性が向上する。
<機能的構成>
図8は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(0800)は、「プログラム本体」(0801)と、「モジュールの集合体」(0802)と、「復号化プログラム」(0803)と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」(0800)が「削除プログラム」(0804)を新たに有する点である。
「削除プログラム」(0804)は、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための処理を行う。図7において説明すると、モジュール2の動作が完了したのを、モジュール2あるいはモジュール3で検知し、モジュール2またはモジュール3からモジュール2の記憶域のアドレスを取得する。取得したアドレスに基づいて、削除プログラムはモジュール2の削除を実行する。
<処理の流れ>
図9は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS0901)。暗号化されている場合には、復号化するための処理を実行する(ステップS0902)。暗号化されていない場合には、ステップS0902はスキップする。その後次モジュールを実行開始(ステップS0903)する。次いで、次モジュールは呼出元モジュールの削除を行う(ステップS0904)。その後、プログラムの終了か否かの判断を行い(ステップS0905)、終了で無ければ、ステップS0901に戻る。終了であれば、プログラムを終了させる。
<ハードウエア構成>
図10は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(1001)と、「揮発性メモリ」(1002)と、「不揮発性メモリ」(1003)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(1004)を有する。そしてそれらが「システムバス」(1005)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
また、「揮発性メモリ」(1002)は、各種処理を行うプログラムを「CPU」(1001)に実行させるために「不揮発性メモリ」(1003)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
ここで、入出力I/F(1004)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(1003)より揮発性メモリ(1002)にロードされる。プログラムAはCPU(1001)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(1001)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(1001)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(1002)に書きこむ。書きこまれたコードはCPU(1001)において実行される。
平文となったモジュールを実行する際に、プログラムAは削除プログラムをCPU(1001)にて実行する。削除プログラムは、プログラムAのうち先に実行されたモジュールを揮発性メモリ(1002)から削除する。
<効果の簡単な説明>
このようにして、実行後のモジュールを削除していくことによって、実行後に記憶域に残っている平文のコードを除くことができる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
≪実施例3≫
<概要>
図11は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時(1101)においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を再度暗号化する(1102)。
このように本実施例のプログラム複合体は、次モジュールの実行時にそのモジュールを呼出した呼出元のモジュールを再度暗号化する処理が可能である。これにより、モジュールあるいはプログラム本体の実行後において、記憶域に残存しているモジュールのコードを解析されることが不可能となる。したがって、プログラム複合体の耐タンパ性が向上する。
<機能的構成>
図12は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(1200)は、「プログラム本体」(1201)と、「モジュールの集合体」(1202)と、「復号化プログラム」(1203)と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」(1200)が「再暗号化プログラム」(1204)を新たに有する点である。
「再暗号化プログラム」(1204)は、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための処理を行う。具体的には、次モジュールの実行開始後において、呼出元モジュール(モジュール2)のアドレス情報を再暗号化プログラムは呼出元モジュールあるいは実行中モジュール(モジュール3)から取得する。実行中モジュールは再暗号化プログラムを実行し、呼出元モジュールを暗号化する。
<処理の流れ>
図13は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS1301)。暗号化されている場合には、復号化するための処理を実行する(ステップS1302)。暗号化されていない場合には、ステップS1302はスキップする。その後次モジュールを実行開始(ステップS1303)する。次いで、次モジュールは呼出元モジュールの再暗号化を行う(ステップS1304)。その後、プログラムの終了か否かの判断を行い(ステップS1305)、終了で無ければ、ステップS1301に戻る。終了であれば、プログラムを終了させる。
<ハードウエア構成>
図14は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(1401)と、「揮発性メモリ」(1402)と、「不揮発性メモリ」(1403)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(1404)を有する。そしてそれらが「システムバス」(1405)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
また、「揮発性メモリ」(1402)は、各種処理を行うプログラムを「CPU」(1401)に実行させるために「不揮発性メモリ」(1403)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
ここで、入出力I/F(1404)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(1403)より揮発性メモリ(1402)にロードされる。プログラムAはCPU(1401)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(1401)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(1401)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(1402)に書きこむ。書きこまれたコードはCPU(1401)において実行される。
平文となったモジュールを実行する際に、プログラムAは再暗号化プログラムをCPU(1401)にて実行する。再暗号化プログラムは、プログラムAのうち先に実行されたモジュールを再度暗号化し、不揮発性メモリないしは揮発性メモリに保持する。
<効果の簡単な説明>
このようにして、本実施例のプログラム複合体は、実行後に記憶域に残っている平文のコードを再び暗号化できる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
実施例1のプログラム複合体による処理の概要を説明するための図 実施例1のプログラム複合体による処理の一例を説明するための図 実施例1のプログラム複合体の機能ブロックの一例を表す図 実施例1のプログラム複合体の処理の一例を説明するためのタイミングチャート 実施例1のプログラム複合体における処理の流れの一例を表すフローチャート 実施例1のプログラム複合体におけるハードウエア構成の一例を表す概略図 実施例2のプログラム複合体による処理の一例を説明するための図 実施例2のプログラム複合体の機能ブロックの一例を表す図 実施例2のプログラム複合体における処理の流れの一例を表すフローチャート 実施例2のプログラム複合体におけるハードウエア構成の一例を表す概略図 実施例3のプログラム複合体による処理の一例を説明するための図 実施例3のプログラム複合体の機能ブロックの一例を表す図 実施例3のプログラム複合体における処理の流れの一例を表すフローチャート 実施例3のプログラム複合体におけるハードウエア構成の一例を表す概略図
0300 プログラム複合体
0301 プログラム本体
0302 モジュールの集合体
0303 復号化プログラム

Claims (2)

  1. 実行時には実行メモリ領域に展開されるモジュールの集合体からなるプログラム本体であって、
    各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、
    次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前であって次モジュールの実行直前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、
    次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを実行メモリ領域から削除する処理を計算機に実行させるための削除プログラムと、からなり、
    前記復号化は、次モジュールの暗号化されている記憶域におけるアドレス情報を実行中のモジュールから受け取って行われるプログラム複合体。
  2. 実行時には実行メモリ領域に展開されるモジュールの集合体からなるプログラム本体であって、
    各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、
    次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前であって次モジュールの実行直前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、
    次モジュールの実行開始後に呼出元モジュールを実行メモリ領域にて再暗号化する処理を計算機に実行させるための再暗号化プログラムと、からなり、
    前記復号化は、次モジュールの暗号化されている記憶域におけるアドレス情報を実行中のモジュールから受け取って行われるプログラム複合体。
JP2011204370A 2011-09-20 2011-09-20 モジュールの暗号化/復号化プログラム Active JP5988473B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2011204370A JP5988473B2 (ja) 2011-09-20 2011-09-20 モジュールの暗号化/復号化プログラム
PCT/JP2012/065246 WO2013042409A1 (ja) 2011-09-20 2012-06-14 モジュールの暗号化/復号化プログラム
US14/346,012 US9251356B2 (en) 2011-09-20 2012-06-14 Module encryption/decryption program
KR1020147010195A KR101942010B1 (ko) 2011-09-20 2012-06-14 모듈의 암호화/복호화 프로그램
KR1020167028810A KR20160123395A (ko) 2011-09-20 2012-06-14 모듈의 암호화/복호화 프로그램

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011204370A JP5988473B2 (ja) 2011-09-20 2011-09-20 モジュールの暗号化/復号化プログラム

Related Child Applications (3)

Application Number Title Priority Date Filing Date
JP2015187668A Division JP2016028334A (ja) 2015-09-25 2015-09-25 モジュールの暗号化/復号化プログラム
JP2016155564A Division JP6374453B2 (ja) 2016-08-08 2016-08-08 モジュールの暗号化/復号化プログラム
JP2016155565A Division JP6374454B2 (ja) 2016-08-08 2016-08-08 モジュールの暗号化/復号化プログラム

Publications (2)

Publication Number Publication Date
JP2013065237A JP2013065237A (ja) 2013-04-11
JP5988473B2 true JP5988473B2 (ja) 2016-09-07

Family

ID=47914190

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011204370A Active JP5988473B2 (ja) 2011-09-20 2011-09-20 モジュールの暗号化/復号化プログラム

Country Status (4)

Country Link
US (1) US9251356B2 (ja)
JP (1) JP5988473B2 (ja)
KR (2) KR101942010B1 (ja)
WO (1) WO2013042409A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6083348B2 (ja) * 2013-07-31 2017-02-22 株式会社ソシオネクスト プログラム実行方法および復号装置
WO2016139078A1 (en) * 2015-03-02 2016-09-09 Inventio Ag Protecting a computer program against reverse engineering
JP2019149763A (ja) * 2018-02-28 2019-09-05 オムロン株式会社 データの処理方法、制御システム、制御装置
US11941109B2 (en) * 2021-12-21 2024-03-26 Cyberark Software Ltd. Customizable and dynamically mutable operating systems

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7216110B1 (en) * 1999-10-18 2007-05-08 Stamps.Com Cryptographic module for secure processing of value-bearing items
US7752141B1 (en) * 1999-10-18 2010-07-06 Stamps.Com Cryptographic module for secure processing of value-bearing items
JP4475894B2 (ja) * 2002-08-01 2010-06-09 パナソニック株式会社 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法
CN100359425C (zh) 2002-08-01 2008-01-02 松下电器产业株式会社 用于解密已加密数据并在存储器空间中定位用于执行的解密数据的方法和设备
JP4557516B2 (ja) * 2003-07-30 2010-10-06 パナソニック株式会社 暗号化プログラム生成装置および暗号化プログラム生成方法
JP4770425B2 (ja) 2005-11-24 2011-09-14 富士ゼロックス株式会社 保護済み実行プログラムの作成のためのプログラム、方法及び装置
JP5374751B2 (ja) * 2008-07-31 2013-12-25 株式会社ハイパーテック メモリ管理方法
JP2010217975A (ja) * 2009-03-13 2010-09-30 Nec System Technologies Ltd 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法
JP2011028506A (ja) 2009-07-24 2011-02-10 Renesas Electronics Corp プログラムの難読化方法とプログラムと装置
US8782429B2 (en) * 2009-12-23 2014-07-15 Ab Initio Technology Llc Securing execution of computational resources
US20120331303A1 (en) * 2011-06-23 2012-12-27 Andersson Jonathan E Method and system for preventing execution of malware

Also Published As

Publication number Publication date
JP2013065237A (ja) 2013-04-11
KR20160123395A (ko) 2016-10-25
US20150006909A1 (en) 2015-01-01
WO2013042409A1 (ja) 2013-03-28
US9251356B2 (en) 2016-02-02
KR20140069176A (ko) 2014-06-09
KR101942010B1 (ko) 2019-01-24

Similar Documents

Publication Publication Date Title
RU2620712C2 (ru) Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
US20160117518A1 (en) File Encryption/Decryption Device And File Encryption/Decryption Method
EP3038004A1 (en) Method for providing security for common intermediate language-based program
CN105227565B (zh) 用于安卓系统的防逆向破解共享对象文件的方法和装置
CN107612683B (zh) 一种加解密方法、装置、系统、设备和存储介质
CN105022936A (zh) 一种类class文件加密解密方法和装置
JP5988473B2 (ja) モジュールの暗号化/復号化プログラム
CN108229190B (zh) 透明加解密的控制方法、装置、程序、存储介质和电子设备
US20140082356A1 (en) Protection of interpreted source code in virtual appliances
CN106375080B (zh) 一种flash文件的加密及解密方法及其装置
CN114124364A (zh) 密钥安全处理方法、装置、设备及计算机可读存储介质
KR20170022023A (ko) 프로그램 실행 코드를 난독화하기 위한 장치 및 방법, 난독화된 프로그램 실행 코드를 복구하여 실행하기 위한 장치 및 방법
JP2010217975A (ja) 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法
US9378395B2 (en) Method, a device and a computer program support for execution of encrypted computer code
JP6374454B2 (ja) モジュールの暗号化/復号化プログラム
JP6374453B2 (ja) モジュールの暗号化/復号化プログラム
CN103605927A (zh) 一种基于嵌入式Linux系统实现加密和解密方法
WO2016188134A1 (zh) 一种实现应用加固的方法及装置
CN109995526A (zh) 一种密钥的存储方法和装置、密钥的调用方法和装置
JP2016028334A (ja) モジュールの暗号化/復号化プログラム
CN107688729B (zh) 基于可信主机的应用程序保护系统及方法
CN104866740A (zh) 一种防静态分析文件的方法及装置
CN110618967B (zh) 应用程序运行方法、安装包生成方法、装置、设备及介质
JP6215468B2 (ja) プログラム保護装置
KR101704703B1 (ko) 더미 코드를 사용하는 애플리케이션 코드 은닉 장치 및 이를 이용한 애플리케이션 코드 은닉 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140508

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150730

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150925

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160309

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160509

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160808

R150 Certificate of patent or registration of utility model

Ref document number: 5988473

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250