JP2020505709A - ソフトウェアコードをセキュアにするための方法 - Google Patents
ソフトウェアコードをセキュアにするための方法 Download PDFInfo
- Publication number
- JP2020505709A JP2020505709A JP2019541352A JP2019541352A JP2020505709A JP 2020505709 A JP2020505709 A JP 2020505709A JP 2019541352 A JP2019541352 A JP 2019541352A JP 2019541352 A JP2019541352 A JP 2019541352A JP 2020505709 A JP2020505709 A JP 2020505709A
- Authority
- JP
- Japan
- Prior art keywords
- software code
- basic block
- instructions
- integrity check
- address
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 63
- 230000006870 function Effects 0.000 claims description 33
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 238000003491 array Methods 0.000 claims description 3
- 230000009466 transformation Effects 0.000 description 12
- 238000004458 analytical method Methods 0.000 description 11
- 230000004224 protection Effects 0.000 description 8
- 230000006399 behavior Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/106—Enforcing content protection by specific content processing
- G06F21/1062—Editing
Abstract
Description
・保護されるべきソフトウェアコードの部分を、プロセッサによって決定するステップと、
・命令の第1のシーケンスを、ソフトウェアコードの選択された基本ブロックに、プロセッサによって挿入するステップであって、命令の第1のシーケンスは、ランタイムにおいて実行されたとき、保護されるべきソフトウェアコードの前記部分における完全性チェック値を計算し、前記計算された完全性チェック値に基づいてインデクス値を計算する、ステップと、
・メモリアドレスのインデクス付けされた配列を、ソフトウェアコードの選択された基本ブロックに、プロセッサによって挿入するステップであって、セキュアなソフトウェアコードを実行したとき、選択された基本ブロックの後に実行されるべき後続する基本ブロックのアドレスが、前記インデクス値によってインデクス付けされる、ステップと、
・ランタイムにおいて計算された前記インデクス値によって、配列中でインデクス付けされたアドレスへのジャンプ命令を、ソフトウェアコードの選択された基本ブロックの最後に、プロセッサによって挿入するステップと
を備えている。
− セキュアなソフトウェアコードをコンパイルおよびリンクしたときに、またはその後に実施される、第5のセキュアにするステップであって、
・完全性チェック値が計算されるべきソフトウェアコードの部分の開始および終了のソフトウェアコードにおける開始アドレスおよび終了アドレスを決定することと、
・前記完全性チェック値、および、前記計算された完全性チェック値に基づいて前記インデクス値を計算することとを備えた、ステップと、
− セキュアなソフトウェアコードをコンパイルおよびリンクしたときに、またはその後に実施される、第6のセキュアにするステップであって、
・前記開始アドレスおよび停止アドレスを、第5のセキュアにするステップにおいて決定された前記開始アドレスおよび終了アドレスに設定することと、
・第5のセキュアにするステップにおいて計算された前記インデクス値で、後続する基本ブロックのアドレスを、配列中に設定することとを備えた、ステップと
を備え得る。
・前記セキュアなソフトウェアコードは、複数の基本ブロックに編成されたコンピュータコード命令を備えたソフトウェアコードの変更バージョンであり、
・セキュアなソフトウェアコードの選択された基本ブロックは、セキュアなソフトウェアコードを実行したとき、選択された基本ブロックの後に実行されるべき後続する基本ブロックのアドレスを備えた、メモリアドレスのインデクス付けされた配列を備え、前記非一時的機械可読記憶媒体は、セキュアなソフトウェアコードの選択された基本ブロックに挿入された、命令の第1のシーケンスを用いてエンコードもされ、命令の第1のシーケンスは、ランタイムにおいて実行されたとき:
・保護されるべきソフトウェアコードの部分における完全性チェック値を計算し、
・前記計算された完全性チェック値に基づいて、後続する基本ブロックのアドレスを配列中でインデクス付けするインデクス値を計算し、セキュアなソフトウェアコードの選択された基本ブロックは、その最後に、ランタイムにおいて計算された前記インデクス値によってインデクス付けされた配列のアドレスへのジャンプ命令も備えている。
・前記セキュアなソフトウェアコードは、複数の基本ブロックに編成されたコンピュータコード命令を備えたソフトウェアコードの変更されたバージョンであり、
・セキュアなソフトウェアコードの選択された基本ブロックは、セキュアなソフトウェアコードを実行したとき、選択された基本ブロックの後に実行されるべき後続する基本ブロックのアドレスを備えた、メモリアドレスのインデクス付けされた配列を備え、前記方法は:
・保護されるべきソフトウェアコードの部分における完全性チェック値を計算するステップと、
・前記計算された完全性チェック値に基づいて、後続する基本ブロックのアドレスを配列中でインデクス付けするインデクス値を計算するステップと、
・前記計算されたインデクス値によって配列中でインデクス付けされたアドレスへのジャンプ命令を、選択された基本ブロックの最後に実行するステップと
を備えている。
以下の段落では、図4に示すように、ソフトウェアコードSCをセキュアにし、セキュアなソフトウェアコードSSCを作り出す、本発明の第1の態様による方法のステップを説明する。これらのセキュアにするステップは、セキュアにするデバイス20の第1のプロセッサ21によって実施され、ステップ番号が後続する文字「S」ですべてラベル付けされている。
第1のセキュアにするステップS1では、保護されるべきソフトウェアコードの部分が、ソフトウェアコードSCにおいて決定される。これは、攻撃者によるあらゆる変更を阻止するために、完全性チェックが実施されるコードの部分である。保護されるべきソフトウェアコードのこのような部分は、人間のオペレータによって第1のプロセッサ21に指定され得る。あるいは、これは、第1のプロセッサ21自体によってランダムに決定されるか、第1のプロセッサ21によって実行される第1の解析プログラムによって計算され得る。ソフトウェアコードのこのような部分は、命令の1つ以上の基本ブロックを備え得る。
より正確には、第2のセキュアにするステップS2において、セキュアにするデバイス20の第1のプロセッサ21は、ソフトウェアコードの選択された基本ブロックに、命令の第1のシーケンスを挿入し得る。この命令の第1のシーケンスは、セキュアなソフトウェアコードの選択された基本ブロックの命令を実行したとき、実行デバイス30が、選択された基本ブロックの直後に実行されるべき後続する適切な基本ブロックのアドレスを検索することを可能にすることを目的とする。
・保護されるべきソフトウェアコードの前記部分における完全性チェック値を計算し、
・前記計算された完全性チェック値に基づいてインデクス値を計算する。
第3のセキュアにするステップS3では、セキュアにするデバイス20の第1のプロセッサ21は、ソフトウェアコードの選択された基本ブロックに、図5に説明されたメモリアドレスのインデクス付けされた配列を挿入し得、ここでは、セキュアなソフトウェアコードを実行するとき、選択された基本ブロックの後に実行されるべき実際の後続する基本ブロックのアドレスが、命令の第1のシーケンスによって計算された前記インデクス値によってインデクス付けされる。
第4のセキュアにするステップS4では、セキュアにするデバイス20の第1のプロセッサ21は、ソフトウェアコードの選択された基本ブロックの最後に、ランタイムにおいて計算された前記インデクス値によってインデクス付けされた配列のアドレスへのジャンプ命令を挿入する。
以下の段落では、セキュアにするデバイス20によって実施される本発明の第1の態様によるセキュアにする方法の例示的かつ非限定的な実施形態について説明する。
・保護されるべきソフトウェアコードの少なくとも部分を含む、完全性チェック値が計算されるべきソフトウェアコードの部分の開始および終了の、ソフトウェアコードにおける実際の開始アドレスおよび終了アドレスを決定することと、
・選択された基本ブロックに挿入された命令の第1のシーケンスによって計算されるように、完全性チェック値を計算することと、
・選択された基本ブロックに挿入された命令の第1のシーケンスによって計算されるように、変換関数を完全性チェック値に適用することによってインデクス値を計算することとを備え得る。
・完全性チェック値が計算されるソフトウェアコードの部分を定義する開始アドレスおよび停止アドレスを、第5のセキュアにするステップS5において決定された開始アドレスおよび終了アドレスに設定すること。このようなアドレスは、第1の実行ステップE1の間に完全性チェック値を計算するために使用される。
・配列の、実際の後続する基本ブロックのアドレスを、第5のセキュアにするステップS5において計算されたインデクス値に設定すること。これは、実行ステップE2の間に計算されるのと同じインデクス値である、
を備え得る
上記のステップが、セキュアなソフトウェアコードを作り出すセキュアにするデバイスによって実施された後、このようなセキュアなソフトウェアコードは、実行デバイス30の第2のプロセッサ31によって、セキュアに実行され得る。選択された基本ブロックを実行したとき、実行デバイスは、命令の第1のシーケンス:
・第1の実行ステップE1の間、第2のプロセッサ31は、保護されるべきソフトウェアコードの少なくとも前記部分において完全性チェック値を計算する。
・第2の実行ステップE2の間、第2のプロセッサ21は、前記計算された完全性チェック値に基づいてインデクス値を計算する、
を実行する。
・計算された完全性チェック値は、計算されたインデクス値が、選択された基本ブロックの実行直後に実行されるべき後続する正しい基本ブロックのアドレスの配列におけるインデクスであるようになり、
・選択された基本ブロックの最後におけるジャンプ命令が、実行フローを、この後続する正しい基本ブロックの先頭にジャンプさせる。
・計算された完全性チェック値は、計算されたインデクス値が、選択された基本ブロックの実行直後に実行されるべき後続する正しい基本ブロックのアドレスとほぼ確実に異なるアドレスの配列におけるインデクスであるようになり、
・選択された基本ブロックの最後におけるジャンプ命令は、実行フローをこのアドレスへジャンプさせ、実行の予測不能な振舞に導く。
本発明の第1の態様による方法は、ソフトウェアコードの、場合によっては互いに重複するいくつかの部分を保護するために、複数回適用され得る。この場合、第1のセキュアにするステップS1の間、方法の各適用に対する保護されるべきコードの部分は、すべてのソフトウェアコードまたはソフトウェアコードのすべての機密部分が保護されるように、第1の解析プログラムによって決定され得る。変換関数が、所定の変換関数のセットの中からランダムに毎回選択される場合、保護されるべきソフトウェアコードの各部分に対して、異なる変換関数が選択され得る。
第2の態様では、本発明は、セキュアにするデバイス20の第1のプロセッサ21が、上述した第1の態様による方法の少なくともステップS1からS4を実施した後に取得されるセキュアにするソフトウェアコードの命令でエンコードされた非一時的機械可読記憶媒体にも関する。前記セキュアなソフトウェアコードは、それで、第1の態様による前記方法が適用される非セキュアなソフトウェアコードの変更されたバージョンであり、複数の基本ブロックに編成されたコンピュータコード命令を備えている。前記記憶媒体にエンコードされた命令では、セキュアなソフトウェアコードの選択された基本ブロックは、セキュアなソフトウェアコードを実行したとき選択された基本ブロックの後に実行されるべき後続する基本ブロックのアドレスを備えた、メモリアドレスのインデクス付けされた配列を備えている。
・保護されるべきソフトウェアコードの部分における完全性チェック値を計算することと、
・前記計算された完全性チェック値に基づいて、後続する基本ブロックのアドレスを配列中でインデクス付けするインデクス値を計算することを実施し、セキュアなソフトウェアコードの選択された基本ブロックは、ランタイムにおいて計算された前記インデクス値によって配列中でインデクス付けされたアドレスへのジャンプ命令も備えている。
・第1の実行ステップE1の間、第2のプロセッサ31は、保護されるべきソフトウェアコードの部分における完全性チェック値を計算し;
・第2の実行ステップE2の間、第2のプロセッサ31は、前記計算された完全性チェック値に基づいて、後続する基本ブロックのアドレスを配列中でインデクス付けするインデクス値を計算する;
を備えている。
Claims (15)
- 複数の基本ブロックに編成されたコンピュータコード命令を備えたコンパイル済みのソフトウェアコード(SC)をセキュアにする方法であって、セキュアなソフトウェアコード(SSC)を生成し、
保護されるべきソフトウェアコードの部分を、プロセッサ(21)によって決定するステップ(S1)と、
命令の第1のシーケンスを、ソフトウェアコードの選択された基本ブロックに、プロセッサによって挿入するステップ(S2)であって、命令の第1のシーケンスは、ランタイムにおいて実行されたとき、
保護されるべきソフトウェアコードの前記部分における完全性チェック値を計算し(E1)、
前記計算された完全性チェック値に基づいてインデクス値を計算する(E2)、ステップと、
メモリアドレスのインデクス付けされた配列を、ソフトウェアコードの選択された基本ブロックに、プロセッサによって挿入するステップ(S3)であって、セキュアなソフトウェアコードを実行したとき、選択された基本ブロックの後に実行されるべき後続する基本ブロックのアドレスが、前記インデクス値によってインデクス付けされる、ステップと、
ランタイムにおいて計算された前記インデクス値によって、配列中でインデクス付けされたアドレスへのジャンプ命令を、ソフトウェアコードの選択された基本ブロックの最後に、プロセッサによって挿入するステップ(S4)と
を備えた、方法。 - 保護されるべきソフトウェアコードの部分が、ランダムに決定される、請求項1に記載の方法。
- 完全性チェック値が、保護されるべきソフトウェアコードの前記部分、および選択された基本ブロックの少なくとも部分において計算される、請求項1に記載の方法。
- 命令の第1のシーケンスが、ランタイムにおいて実行されたとき、チェックサム、マスク、ハッシュ関数、バイナリシフト、および算術演算のうちの1つ以上の演算を実施することによって、前記完全性チェック値を計算する命令の第2のシーケンスを備えた、請求項1に記載の方法。
- 前記命令の第2のシーケンスが、完全性チェック関数を計算する命令の所定のシーケンスのセットにおいてランダムに選択される、請求項1に記載の方法。
- 命令の第1のシーケンスが、ランタイムにおいて実行されたとき、前記インデクス値を計算するために、変換関数を、前記計算された完全性チェック値に適用する命令の第3のシーケンスを備え、前記変換関数は、チェックサム、マスク、ハッシュ関数、バイナリシフト、および算術演算のうちの1つ以上の演算を備えた、請求項1に記載の方法。
- 変換関数が、所定の変換関数のセットにおいてランダムに選択される、請求項6に記載の方法。
- 配列におけるアドレスが、セキュアなソフトウェアコードが実行されたときにおけるセキュアなソフトウェアコードの基本ブロックのアドレスである、請求項1に記載の方法。
- 前記完全性チェック値が、開始アドレスと停止アドレスとの間のセキュアなソフトウェアコードの命令において計算され、
セキュアなソフトウェアコードをコンパイルおよびリンクしたときに、またはその後に実施される、第5のセキュアにするステップ(S5)であって、
完全性チェック値が計算されるべきソフトウェアコードの部分の開始および終了のソフトウェアコードにおける開始アドレスおよび終了アドレスを決定することと、
前記完全性チェック値、および、前記計算された完全性チェック値に基づいて前記インデクス値を計算することとを備えた、ステップと、
セキュアなソフトウェアコードをコンパイルおよびリンクしたときに、またはその後に実施される、第6のセキュアにするステップ(S6)であって、
前記開始アドレスおよび停止アドレスを、第5のセキュアにするステップにおいて決定された前記開始アドレスおよび終了アドレスに設定することと、
第5のセキュアにするステップにおいて計算された前記インデクス値で、後続する基本ブロックのアドレスを、配列中に設定することとを備えた、ステップと
を備えた、請求項1に記載の方法。 - 配列および命令の第1のシーケンスが、ソフトウェアコードの選択された基本ブロック内のランダムな位置に挿入される、請求項1に記載の方法。
- 命令の第1のシーケンスが、挿入されたジャンプ命令の前で、選択された基本ブロックの最後に挿入される、請求項1に記載の方法。
- プロセッサによる実行のためのセキュアなソフトウェアコードの命令でエンコードされた非一時的機械可読記憶媒体であって、
前記セキュアなソフトウェアコードは、複数の基本ブロックに編成されたコンピュータコード命令を備えたソフトウェアコードの変更バージョンであり、
セキュアなソフトウェアコードの選択された基本ブロックは、セキュアなソフトウェアコードを実行したとき、選択された基本ブロックの後に実行されるべき後続する基本ブロックのアドレスを備えた、メモリアドレスのインデクス付けされた配列を備え、
前記非一時的機械可読記憶媒体は、セキュアなソフトウェアコードの選択された基本ブロックに挿入された、命令の第1のシーケンスを用いてエンコードもされ、命令の第1のシーケンスは、ランタイムにおいて実行されたとき、
保護されるべきソフトウェアコードの部分における完全性チェック値を計算し(E1)、
前記計算された完全性チェック値に基づいて、後続する基本ブロックのアドレスを配列中でインデクス付けするインデクス値を計算し(E2)、
セキュアなソフトウェアコードの選択された基本ブロックは、その最後に、ランタイムにおいて計算された前記インデクス値によってインデクス付けされた配列のアドレスへのジャンプ命令も備えた、非一時的機械可読記憶媒体。 - 完全性チェック値が、保護されるべきソフトウェアコードの部分と、選択された基本ブロックの少なくとも部分とにおいて計算される、請求項12に記載の非一時的機械可読記憶媒体。
- セキュアなソフトウェアコードの選択された基本ブロックの命令をプロセッサ(31)によって実行する方法であって、
前記セキュアなソフトウェアコードは、複数の基本ブロックに編成されたコンピュータコード命令を備えたソフトウェアコードの変更されたバージョンであり、
セキュアなソフトウェアコードの選択された基本ブロックは、セキュアなソフトウェアコードを実行したとき、選択された基本ブロックの後に実行されるべき後続する基本ブロックのアドレスを備えた、メモリアドレスのインデクス付けされた配列を備え、
前記方法は、
保護されるべきソフトウェアコードの部分における完全性チェック値を計算するステップ(E1)と、
前記計算された完全性チェック値に基づいて、後続する基本ブロックのアドレスを配列中でインデクス付けするインデクス値を計算するステップ(E2)と、
前記計算されたインデクス値によって配列中でインデクス付けされたアドレスへのジャンプ命令を、選択された基本ブロックの最後に実行するステップ(E3)と
を備えた、方法。 - 完全性チェック値が、保護されるべきソフトウェアコードの部分と、選択された基本ブロックの少なくとも部分とにおいて計算される、請求項14に記載の方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021175286A JP7154365B2 (ja) | 2017-01-26 | 2021-10-27 | ソフトウェアコードをセキュアにするための方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP17153409.2 | 2017-01-26 | ||
EP17153409.2A EP3355218A1 (en) | 2017-01-26 | 2017-01-26 | Method to secure a software code |
PCT/EP2018/051866 WO2018138212A1 (en) | 2017-01-26 | 2018-01-25 | Method to secure a software code |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021175286A Division JP7154365B2 (ja) | 2017-01-26 | 2021-10-27 | ソフトウェアコードをセキュアにするための方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020505709A true JP2020505709A (ja) | 2020-02-20 |
Family
ID=57909507
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019541352A Pending JP2020505709A (ja) | 2017-01-26 | 2018-01-25 | ソフトウェアコードをセキュアにするための方法 |
JP2021175286A Active JP7154365B2 (ja) | 2017-01-26 | 2021-10-27 | ソフトウェアコードをセキュアにするための方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021175286A Active JP7154365B2 (ja) | 2017-01-26 | 2021-10-27 | ソフトウェアコードをセキュアにするための方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11250110B2 (ja) |
EP (2) | EP3355218A1 (ja) |
JP (2) | JP2020505709A (ja) |
CN (1) | CN110574028B (ja) |
ES (1) | ES2873979T3 (ja) |
WO (1) | WO2018138212A1 (ja) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10467390B1 (en) | 2016-08-18 | 2019-11-05 | Snap Inc. | Cyclically dependent checks for software tamper-proofing |
EP3617920A1 (en) * | 2018-08-31 | 2020-03-04 | Nagravision S.A. | Software tamper resistance |
WO2021015204A1 (ja) * | 2019-07-23 | 2021-01-28 | 株式会社ソニー・インタラクティブエンタテインメント | アクセス制御装置、アクセス制御方法及びプログラム |
US11687440B2 (en) * | 2021-02-02 | 2023-06-27 | Thales Dis Cpl Usa, Inc. | Method and device of protecting a first software application to generate a protected software application |
CN113032737B (zh) * | 2021-03-15 | 2021-11-30 | 清华大学 | 软件的保护方法、装置、电子设备及存储介质 |
CN115906014A (zh) * | 2021-08-13 | 2023-04-04 | 华为技术有限公司 | 一种数据处理方法及相关装置 |
US11799857B2 (en) * | 2021-08-31 | 2023-10-24 | Cisco Technology, Inc. | Software posture for zero trust access |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011170836A (ja) * | 2009-12-24 | 2011-09-01 | Kazuomi Oishi | 情報処理装置及びプログラム、情報処理方法、記録媒体 |
EP2937803A1 (en) * | 2014-04-23 | 2015-10-28 | Nxp B.V. | Control flow flattening for code obfuscation where the next block calculation needs run-time information |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7054443B1 (en) * | 2000-03-27 | 2006-05-30 | Microsoft Corporation | System and method for protecting digital goods using random and automatic code obfuscation |
JP2003280754A (ja) | 2002-03-25 | 2003-10-02 | Nec Corp | 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム |
AU2003302996A1 (en) * | 2002-12-12 | 2004-07-09 | Finite State Machine Labs, Inc. | Systems and methods for detecting a security breach in a computer system |
US7664937B2 (en) * | 2007-03-01 | 2010-02-16 | Microsoft Corporation | Self-checking code for tamper-resistance based on code overlapping |
US8874928B2 (en) | 2008-10-31 | 2014-10-28 | Apple Inc. | System and method for obfuscating constants in a computer program |
US8751823B2 (en) | 2011-08-01 | 2014-06-10 | Apple Inc. | System and method for branch function based obfuscation |
US9141800B2 (en) * | 2011-12-20 | 2015-09-22 | Advanced Micro Devices, Inc. | Method and apparatus for detecting intrusions in a computer system |
US8661549B2 (en) | 2012-03-02 | 2014-02-25 | Apple Inc. | Method and apparatus for obfuscating program source codes |
US20130347109A1 (en) * | 2012-06-21 | 2013-12-26 | Cisco Technology, Inc. | Techniques for Detecting Program Modifications |
US10599820B2 (en) * | 2014-04-23 | 2020-03-24 | Nxp B.V. | Control flow flattening for code obfuscation where the next block calculation needs run-time information |
EP3012762A1 (en) * | 2014-10-24 | 2016-04-27 | Thomson Licensing | Control flow graph flattening device and method |
US9405936B2 (en) * | 2014-12-16 | 2016-08-02 | Nxp B.V. | Code integrity protection by computing target addresses from checksums |
CN105641930B (zh) * | 2015-12-28 | 2019-05-14 | 网易(杭州)网络有限公司 | 游戏数据的校验方法及装置 |
US10467390B1 (en) * | 2016-08-18 | 2019-11-05 | Snap Inc. | Cyclically dependent checks for software tamper-proofing |
-
2017
- 2017-01-26 EP EP17153409.2A patent/EP3355218A1/en not_active Withdrawn
-
2018
- 2018-01-25 EP EP18700785.1A patent/EP3574426B1/en active Active
- 2018-01-25 CN CN201880021089.6A patent/CN110574028B/zh active Active
- 2018-01-25 JP JP2019541352A patent/JP2020505709A/ja active Pending
- 2018-01-25 ES ES18700785T patent/ES2873979T3/es active Active
- 2018-01-25 US US16/481,377 patent/US11250110B2/en active Active
- 2018-01-25 WO PCT/EP2018/051866 patent/WO2018138212A1/en unknown
-
2021
- 2021-10-27 JP JP2021175286A patent/JP7154365B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011170836A (ja) * | 2009-12-24 | 2011-09-01 | Kazuomi Oishi | 情報処理装置及びプログラム、情報処理方法、記録媒体 |
EP2937803A1 (en) * | 2014-04-23 | 2015-10-28 | Nxp B.V. | Control flow flattening for code obfuscation where the next block calculation needs run-time information |
Non-Patent Citations (1)
Title |
---|
"12.2 Detecting Modification", ETUTORIALS.ORG, JPN6020040042, 18 February 2013 (2013-02-18), ISSN: 0004532779 * |
Also Published As
Publication number | Publication date |
---|---|
JP2022009556A (ja) | 2022-01-14 |
WO2018138212A1 (en) | 2018-08-02 |
US11250110B2 (en) | 2022-02-15 |
JP7154365B2 (ja) | 2022-10-17 |
CN110574028A (zh) | 2019-12-13 |
EP3355218A1 (en) | 2018-08-01 |
CN110574028B (zh) | 2023-05-23 |
EP3574426B1 (en) | 2021-03-03 |
US20200004934A1 (en) | 2020-01-02 |
EP3574426A1 (en) | 2019-12-04 |
ES2873979T3 (es) | 2021-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7154365B2 (ja) | ソフトウェアコードをセキュアにするための方法 | |
Liao et al. | Soliaudit: Smart contract vulnerability assessment based on machine learning and fuzz testing | |
Wang et al. | oo7: Low-overhead defense against spectre attacks via program analysis | |
US8286251B2 (en) | Obfuscating computer program code | |
US10223528B2 (en) | Technologies for deterministic code flow integrity protection | |
JP5467271B2 (ja) | 情報処理装置及びプログラム、情報処理方法、記録媒体 | |
EP3262557A1 (en) | A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code | |
US20200380150A1 (en) | Method of encoding and decoding memory data for software security, recording medium and apparatus for performing the method | |
US11269988B2 (en) | Automated software application verification system | |
JP2016115033A (ja) | 命令実行制御装置、命令実行制御方法 | |
CN110520860B (zh) | 用于防护软件代码的方法 | |
US11263313B2 (en) | Securing execution of a program | |
CN111898120B (zh) | 控制流完整性保护方法及装置 | |
CN111488558B (zh) | 脚本保护方法、装置、计算机可读存储介质和计算机设备 | |
US20220156365A1 (en) | Method to Secure a Software Code | |
EP3522006A1 (en) | Method for protecting an executable code | |
Giunta et al. | A redundancy-based attack detection technique for java card bytecode | |
Hou et al. | HermHD: Enhancing smart contract security based on code obfuscation | |
WO2023156571A1 (en) | Protecting software | |
Fedler et al. | ISA R: Improving Software Attack and Analysis Resilience via Compiler-Level Software Diversity |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190924 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20201007 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20201027 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210125 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20210629 |