JP2011018119A - プログラム難読化装置及びプログラム - Google Patents
プログラム難読化装置及びプログラム Download PDFInfo
- Publication number
- JP2011018119A JP2011018119A JP2009160916A JP2009160916A JP2011018119A JP 2011018119 A JP2011018119 A JP 2011018119A JP 2009160916 A JP2009160916 A JP 2009160916A JP 2009160916 A JP2009160916 A JP 2009160916A JP 2011018119 A JP2011018119 A JP 2011018119A
- Authority
- JP
- Japan
- Prior art keywords
- program
- obfuscation
- group
- branch
- program list
- 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
Images
Abstract
【課題】 動的解析に対する安全性を高めたプログラム難読化手法を提案する。
【解決手段】 プログラム難読化装置Tは、プログラムを難読化するための難読化規則を記憶する難読化規則記憶部11、入力された難読化対象のプログラムを解析する解析処理部12、難読化規則記憶部11に記憶された難読化規則および解析処理部12による解析結果に基づく難読化処理を施してその結果を出力する難読化処理部13、を備えており、入力された難読化対象のプログラムに含まれる演算式部分について、その演算式に含まれる変数を条件式に用いた分岐を生成すると共に、難読化前と同じ演算結果となる複数のダミーコードを前記分岐に係る変数を使用して生成し、これら複数のダミーコードを前記分岐先のコード部分にそれぞれ含めたプログラムを生成して、これを難読化結果として出力する。
【選択図】 図1
【解決手段】 プログラム難読化装置Tは、プログラムを難読化するための難読化規則を記憶する難読化規則記憶部11、入力された難読化対象のプログラムを解析する解析処理部12、難読化規則記憶部11に記憶された難読化規則および解析処理部12による解析結果に基づく難読化処理を施してその結果を出力する難読化処理部13、を備えており、入力された難読化対象のプログラムに含まれる演算式部分について、その演算式に含まれる変数を条件式に用いた分岐を生成すると共に、難読化前と同じ演算結果となる複数のダミーコードを前記分岐に係る変数を使用して生成し、これら複数のダミーコードを前記分岐先のコード部分にそれぞれ含めたプログラムを生成して、これを難読化結果として出力する。
【選択図】 図1
Description
本発明は、プログラム難読化装置及びプログラムに関する。
プログラムを悪意あるリバースエンジニアリング(逆解析)から守るために、様々なプログラム難読化技術が提案されている。なお、難読化とは、プログラムの実行結果を変化させること無くプログラムを複雑に変換することで、プログラムの解析コストを増大させる技術である。
難読化手法の1つとして、不明瞭な条件式(Opaque Predicates)を用いた難読化手法がある。“Opaque Predicates”とは、難読化のために利用される恒真/恒偽の条件式のことをいう。
図7には、図6に例示するプログラム(関数func)に“Opaque Predicates”を用いた難読化を適用した例を示してある。すなわち、図6のプログラムに対し、条件式「a*(a−1) mod 2==1」及び条件節「++a;」からなる条件分岐71を加えることで、図7のプログラムは生成されている。ここで、「mod」とは、当該演算子の左にある整数値を右にある整数値で割った時の剰余を返す演算である(例えば、7 mod 2=1)。そして、「a」がどのような整数値であっても「a*(a−1)」は“2”の倍数であるため、「a*(a−1) mod 2」の値は常に“0”、つまり、条件式「a*(a−1) mod 2==1」は恒偽の“Opaque Predicates”である。そのため、条件節「++a;」は決して実行されない。
図7には、図6に例示するプログラム(関数func)に“Opaque Predicates”を用いた難読化を適用した例を示してある。すなわち、図6のプログラムに対し、条件式「a*(a−1) mod 2==1」及び条件節「++a;」からなる条件分岐71を加えることで、図7のプログラムは生成されている。ここで、「mod」とは、当該演算子の左にある整数値を右にある整数値で割った時の剰余を返す演算である(例えば、7 mod 2=1)。そして、「a」がどのような整数値であっても「a*(a−1)」は“2”の倍数であるため、「a*(a−1) mod 2」の値は常に“0”、つまり、条件式「a*(a−1) mod 2==1」は恒偽の“Opaque Predicates”である。そのため、条件節「++a;」は決して実行されない。
図6のプログラムと図7のプログラムを比較すると、その機能・動作は変わらない一方で、図7のプログラム(難読化後のプログラム)には冗長な条件分岐71が含まれている分、図2のプログラム(元のプログラム)よりもプログラム全体の長さが長くなり、解析コスト、つまりプログラムの挙動解析に必要となるコストは大きくなる。これにより、プログラムの解析が困難になり、難読化が施されたプログラムは元のプログラムに比較して安全性が向上する。
次に、難読化を施されたプログラムに対する動的解析を説明する。動的解析とは、プログラムを実行しつつ、プログラムにランダムに入力を与えたり、プログラム内部を書き換えたりすることで、出力結果や実行フローの違いを観察することでプログラムの挙動を分析することを言う。
攻撃者は、“Opaque Predicates”の無効化を行う場合には、以下のような動的解析を行う。すなわち、通常考えられる条件分岐の場合には、プログラムの入力を変えれば或る割合でその真偽値も変化するが、“Opaque Predicates”の真偽値はどのような入力に対しても変化しないため、“Opaque Predicates”を用いた条件分岐の条件節は、どのような入力においても必ず実行されるか、必ず実行されないかのいずれかであることを利用する。具体的には、動的解析において入力を変えて何度も実行フローを観察するうちに、攻撃者は、必ず実行される又は必ず実行されない条件節を特定でき、これにより、“Opaque Predicates”を利用した難読化の無効化を図る。
攻撃者は、“Opaque Predicates”の無効化を行う場合には、以下のような動的解析を行う。すなわち、通常考えられる条件分岐の場合には、プログラムの入力を変えれば或る割合でその真偽値も変化するが、“Opaque Predicates”の真偽値はどのような入力に対しても変化しないため、“Opaque Predicates”を用いた条件分岐の条件節は、どのような入力においても必ず実行されるか、必ず実行されないかのいずれかであることを利用する。具体的には、動的解析において入力を変えて何度も実行フローを観察するうちに、攻撃者は、必ず実行される又は必ず実行されない条件節を特定でき、これにより、“Opaque Predicates”を利用した難読化の無効化を図る。
プログラム難読化に関する発明として、例えば、特許文献1には、プログラムのソースコードに対して、前記プログラムの仕様を変更しないように、関数へのポインタ変数を新たに複数個導入し、前記関数ポインタ変数のいずれかに関数のアドレスを代入する命令文を複数個挿入し、前記プログラムにおける関数の呼出しを、前記関数ポインタ変数の値に応じて関数を呼出すように変換する発明が提案されている。
本発明は、動的解析に対する安全性を高めたプログラム難読化手法を提案することを目的とする。
第1の本発明は、プログラムリストの入力を受け付ける受付手段と、前記受付手段により受け付けられたプログラムリストを、当該プログラムリストにおいて使用されている変数を条件式に用いた分岐を含むと共に、当該分岐先のコード部分に当該変数を使用したダミーコードを含むプログラムリストに変換する変換手段と、前記変換手段により変換されたプログラムリストを出力する出力手段と、を備えたことを特徴とするプログラム難読化装置である。
第2の本発明は、第1の本発明において、前記ダミーコードは、有限群の任意の要素に対して当該有限群の位数回演算を施したものが単位元になる性質を利用したものである。
第3の本発明は、第2の本発明において、前記ダミーコードは、加法群の任意の要素に対して当該加法群の位数回演算を施したものが零元になる性質を利用したものである。
第4の本発明は、第3の本発明において、前記加法群として剰余環Z/nZ(nは整数)上の加法群を用いる。
第5の本発明は、第3の本発明において、前記加法群として楕円曲線上の有限群を用いる。
第6の本発明は、第2の本発明において、前記ダミーコードは、乗法群の任意の要素に対して当該乗法群の位数回演算を施したものが単位元になる性質を利用したものである。
第7の本発明は、第6の本発明において、前記乗法群として剰余環Z/nZ(nは整数)上の乗法群を用いる。
第8の本発明は、プログラムリストの入力を受け付ける受付機能と、前記受付機能により受け付けられたプログラムリストを、当該プログラムリストにおいて使用されている変数を条件式に用いた分岐を含むと共に、当該分岐先のコード部分に当該変数を使用したダミーコードを含むプログラムリストに変換する変換機能と、前記変換機能により変換されたプログラムリストを出力する出力機能と、をコンピュータに実現させるためのプログラムである。
第1の本発明によると、本発明を適用しない場合に比べ、動的解析に対する安全性を高めた難読化プログラムを得ることができるようになる。
第2の本発明によると、難読性の高いダミーコードを内容に含む難読化プログラムを得ることができるようになる。
第3の本発明によると、加法群の任意の要素に対して当該加法群の位数回演算を施したものが零元になる性質を利用して、難読性の高いダミーコードを生成することができる。
第4の本発明によると、加法群として剰余環Z/nZ(nは整数)上の加法群を用いて、加法群の任意の要素に対して当該加法群の位数回演算を施したものが零元になる性質を利用した難読性の高いダミーコードを生成することができる。
第5の本発明によると、加法群として楕円曲線上の有限群を用いて、加法群の任意の要素に対して当該加法群の位数回演算を施したものが零元になる性質を利用した難読性の高いダミーコードを生成することができる。
第6の本発明によると、乗法群の任意の要素に対して当該乗法群の位数回演算を施したものが単位元になる性質を利用して、難読性の高いダミーコードを生成することができる。
第7の本発明によると、乗法群として剰余環Z/nZ(nは整数)上の乗法群を用いて、乗法群の任意の要素に対して当該乗法群の位数回演算を施したものが単位元になる性質を利用した難読性の高いダミーコードを生成することができる。
第8の本発明によると、本発明を適用しない場合に比べ、動的解析に対する安全性を高めた難読化プログラムを得ることができるようになる。
本発明の一実施形態について、図面を参照して説明する。
図1には、本発明の一実施形態に係るプログラム難読化装置Tの機能ブロックを例示してある。
本例のプログラム難読化装置Tは、プログラムリスト(以下、単に「プログラム」という)を難読化するための難読化規則を記憶する難読化規則記憶部11、入力された難読化対象のプログラムを解析する解析処理部12、難読化規則記憶部11に記憶された難読化規則および解析処理部12による解析結果に基づく難読化処理を施してその結果を出力する難読化処理部13、を備えており、難読化対象のプログラムに使用されている変数をIf文の条件式に利用してプログラムのフローを分岐させた上で、その分岐先のコード部分に、有限群の任意の要素に対して当該有限群の位数回演算を施したものが単位元になる性質を利用したダミーコードを含めることで、動的解析に対して堅牢なプログラム難読化を施すものである。
図1には、本発明の一実施形態に係るプログラム難読化装置Tの機能ブロックを例示してある。
本例のプログラム難読化装置Tは、プログラムリスト(以下、単に「プログラム」という)を難読化するための難読化規則を記憶する難読化規則記憶部11、入力された難読化対象のプログラムを解析する解析処理部12、難読化規則記憶部11に記憶された難読化規則および解析処理部12による解析結果に基づく難読化処理を施してその結果を出力する難読化処理部13、を備えており、難読化対象のプログラムに使用されている変数をIf文の条件式に利用してプログラムのフローを分岐させた上で、その分岐先のコード部分に、有限群の任意の要素に対して当該有限群の位数回演算を施したものが単位元になる性質を利用したダミーコードを含めることで、動的解析に対して堅牢なプログラム難読化を施すものである。
本例のプログラム難読化装置Tによる難読化処理について、図6に例示したプログラム(関数func)を難読化する場合を例に説明する。
本例のプログラム難読化装置Tでは、一例として、以下の各手順(〔手順1〕〜〔手順9〕)に従って、難読化対象として入力されたプログラム中の入力変数「a」の正負により分岐し、その分岐先ではZ/nZ(nは整数)の加法群を用いた難読化を施した上で、戻り値として整数cを返すように変換したプログラムを作成して出力する。なお、以下の各手順に関する情報は、難読化規則記憶部11に難読化規則として記憶されている。また、以下の手順中の演算式における演算子「%」は、演算子「mod」と同様に、その演算子の左にある整数値を右にある整数値で割った時の剰余を返すものである。
本例のプログラム難読化装置Tでは、一例として、以下の各手順(〔手順1〕〜〔手順9〕)に従って、難読化対象として入力されたプログラム中の入力変数「a」の正負により分岐し、その分岐先ではZ/nZ(nは整数)の加法群を用いた難読化を施した上で、戻り値として整数cを返すように変換したプログラムを作成して出力する。なお、以下の各手順に関する情報は、難読化規則記憶部11に難読化規則として記憶されている。また、以下の手順中の演算式における演算子「%」は、演算子「mod」と同様に、その演算子の左にある整数値を右にある整数値で割った時の剰余を返すものである。
〔手順1〕入力変数aの正負に応じた分岐を作成。
〔手順2〕素数p1,…,pkをランダムに生成(kは整数)。
〔手順3〕k≧i,j>2を満たす整数i,jを生成。
〔手順4〕素数群{p1,…,pk}の中からi個の素数s1,s2,…,siを選択し、S=s1*s2*…*siを計算。
〔手順5〕素数群{p1,…,pk}の中からj個の素数t1,t2,…,tjを選択し、T=t1*t2*…*tjを計算。
〔手順6〕乱数(整数)rを生成し、d=s1*s2*…*si-2*rを計算。
〔手順7〕一つ目の分岐先において実行する演算式を以下の通りとする。
d*=si-1*a; c=a+(d*si)%S+2*b;
〔手順8〕d’=t1*t2*…*tj-2−dを計算。
〔手順9〕二つ目の分岐先において実行する演算式を以下の通りとする。
d+=d’; d*=tj-1; c=a*((d*tj)%T+1)+2*b;
〔手順2〕素数p1,…,pkをランダムに生成(kは整数)。
〔手順3〕k≧i,j>2を満たす整数i,jを生成。
〔手順4〕素数群{p1,…,pk}の中からi個の素数s1,s2,…,siを選択し、S=s1*s2*…*siを計算。
〔手順5〕素数群{p1,…,pk}の中からj個の素数t1,t2,…,tjを選択し、T=t1*t2*…*tjを計算。
〔手順6〕乱数(整数)rを生成し、d=s1*s2*…*si-2*rを計算。
〔手順7〕一つ目の分岐先において実行する演算式を以下の通りとする。
d*=si-1*a; c=a+(d*si)%S+2*b;
〔手順8〕d’=t1*t2*…*tj-2−dを計算。
〔手順9〕二つ目の分岐先において実行する演算式を以下の通りとする。
d+=d’; d*=tj-1; c=a*((d*tj)%T+1)+2*b;
図2には、上記の〔手順1〕〜〔手順9〕により難読化されたプログラムを例示してある。図2の例では、以下の設定を用いて難読化されている。
p1=11,p2=7,p3=3,p4=41,p5=13,
i=3,s1=7(=p2),s2=3(=p3),s3=11(=p1),
j=3,t1=41(=p4),t2=13(=p5),t3=7(=p2),
r=5,
S=231(=s1*s2*s3),T=3731(=t1*t2*t3)
p1=11,p2=7,p3=3,p4=41,p5=13,
i=3,s1=7(=p2),s2=3(=p3),s3=11(=p1),
j=3,t1=41(=p4),t2=13(=p5),t3=7(=p2),
r=5,
S=231(=s1*s2*s3),T=3731(=t1*t2*t3)
この例では、関数ObfFuncへの入力変数「a」の正負に依存して分岐が発生する。分岐先のコード群21およびコード群22は、元のプログラム中の演算式「a=a+2*b」に対応して加法群の零元を利用した難読化が施されて生成されたコード群である。
次に、上記の各手順(〔手順1〕〜〔手順9〕)によって難読化されたプログラム(図2)の実行結果は元のプログラム(図6)の実行結果に等しいことを説明する。
上記の〔手順7〕における二つ目の演算式内にある「d*si」は、剰余環Z/SZ上の加法群の零元になっている。つまり、この値はSの倍数になっており、Sで割った場合の余りは“0”となる。このため、二つ目の演算式「c=a+(d*si)%S+2*b;」は「c=a+2*b;」に等しく、これは元のプログラムにおける演算式と同じ演算結果になる。同様に、上記の〔手順9〕における三つ目の演算式内にある「d*tj」の値も剰余環Z/TZ上の加法群の零元であり、三つ目の演算式内にある「(d*tj)%T+1」の値は“1”に等しい。したがって、〔手順9〕における三つ目の演算式「c=a*((d*tj)%T+1)+2*b;」もやはり「c=a+2*b;」に等しく、元のプログラムにおける演算式と同じ演算結果になる。
上記の〔手順7〕における二つ目の演算式内にある「d*si」は、剰余環Z/SZ上の加法群の零元になっている。つまり、この値はSの倍数になっており、Sで割った場合の余りは“0”となる。このため、二つ目の演算式「c=a+(d*si)%S+2*b;」は「c=a+2*b;」に等しく、これは元のプログラムにおける演算式と同じ演算結果になる。同様に、上記の〔手順9〕における三つ目の演算式内にある「d*tj」の値も剰余環Z/TZ上の加法群の零元であり、三つ目の演算式内にある「(d*tj)%T+1」の値は“1”に等しい。したがって、〔手順9〕における三つ目の演算式「c=a*((d*tj)%T+1)+2*b;」もやはり「c=a+2*b;」に等しく、元のプログラムにおける演算式と同じ演算結果になる。
つまり、上記の各手順に従って難読化されたプログラムは、入力変数の値により分岐先が変化するという特徴を持っている。また、分岐先において実行される演算式は、加法群の任意の要素に対して当該加法群の位数回演算を施したものが零元になる性質を利用したものであり、コード内容は異なるが、その実行結果は元のプログラムと同様なものとなる。このため、どの分岐先が実行される場合でも、元のプログラムと同一の実行結果が保証される。そして、プログラムの入力変数に関連して処理フローが変化するため、上記の難読化プログラムは動的解析に対して安全性が高いものとなっている。更に、本手法では、各分岐先のコード部分にそれぞれ異なるダミーコード群を生成するため、攻撃者が処理フローを理解することが困難になる。
以上のように、本例のプログラム難読化装置Tでは、入力された難読化対象のプログラムに含まれる演算式部分について、その演算式に含まれる変数を条件式に用いた分岐を生成すると共に、有限群の任意の要素に対して当該有限群の位数回演算を施したものが単位元になる性質を利用して、難読化前と同じ演算結果となる複数のダミーコードを前記分岐に係る変数を使用して生成し、これら複数のダミーコードを前記分岐先のコード部分にそれぞれ含めたプログラムを生成して、これを難読化結果として出力する。
特に、本例では、加法群の任意の要素に対して当該加法群の位数回演算を施したものが零元になる性質を使用してダミーコードを生成している。つまり、分岐の条件式に用いた変数を用いた演算式であり且つその演算結果が常に“0”となる演算式(「(d*si)%S」又は(d*tj)%T)を生成し、その演算結果を加算する演算を含む演算式を生成することにより、難読化対象に係る演算式部分を変換したコード群を生成している。このため、難読化されたプログラムは難読化前に比べて冗長であるものの、その実行結果は難読化前のものと同じになる。
なお、上述した〔手順1〕〜〔手順9〕による難読化手法は一例に過ぎず、これに限定するものではない。
例えば、本例では、入力変数「a」の正負に応じた分岐としているが、入力変数「a」が偶数又は奇数のいずれであるかに応じた分岐とする等、その分岐の条件を種々なものとすることができる。
また例えば、本例では、入力変数「a」に基づく分岐やダミーコードを生成しているが、入力変数「b」に基づく分岐やダミーコードを生成するようにしてもよく、或いはプログラム中の内部変数に基づく分岐やダミーコードを生成するようにしてもよい。
また例えば、本例では、分岐の数を“2”に設定したが、これをより大きな数に設定するようにしてもよく、これにより難読化の効果を高めることができる。
また例えば、本例では、素数(p1,…,pk)を用いてS,Tを計算しているが、素数に代えて、“0”以外の整数又は自然数を用いるようにしてもよい。
例えば、本例では、入力変数「a」の正負に応じた分岐としているが、入力変数「a」が偶数又は奇数のいずれであるかに応じた分岐とする等、その分岐の条件を種々なものとすることができる。
また例えば、本例では、入力変数「a」に基づく分岐やダミーコードを生成しているが、入力変数「b」に基づく分岐やダミーコードを生成するようにしてもよく、或いはプログラム中の内部変数に基づく分岐やダミーコードを生成するようにしてもよい。
また例えば、本例では、分岐の数を“2”に設定したが、これをより大きな数に設定するようにしてもよく、これにより難読化の効果を高めることができる。
また例えば、本例では、素数(p1,…,pk)を用いてS,Tを計算しているが、素数に代えて、“0”以外の整数又は自然数を用いるようにしてもよい。
ここで、本例では、有限群として環Z/nZ上の加法群を使用したが、乗法群を用いても同様の効果を得ることができる。すなわち、例えば、(Z/nZ)*上の乗法群の単位元(つまり“1”)を用いるようにする。つまり、分岐の条件式に用いた変数を用いた演算式であり且つその演算結果が常に“1”となる演算式を生成し、その演算結果を乗算する演算を含む演算式を生成することにより、難読化対象に係る演算式部分を変換したコード群を生成する。また、有限体上に構成される楕円曲線上の加法群も同様に用いることができる。
図3には、本例のプログラム難読化装置Tの利用形態を例示してある。
本例のプログラム難読化装置Tは、一般的なプログラム開発者(図中のA)によって利用されることを想定している。
プログラム開発者Aは、他の人物(本例では利用ユーザB)の利用に供されるプログラムの開発を完了すると、当該プログラムP1をプログラム難読化装置Tに対して入力として与える(ステップS1)。
プログラム難読化装置Tは、受け取ったプログラムP1に対して難読化を施し、その結果として生成される難読化プログラムP2を出力する(ステップS2)。このとき、プログラム難読化装置Tは、入力されたプログラムP1と難読化プログラムP2の機能および出力が変化しないように変換を行う。ただし、難読化プログラムP2にはダミーコードが追加されているので、元のプログラムP1よりも解析コストは大きくなる。
プログラム開発者Aは、物理的に離れたところにいる利用ユーザBに対し、難読化プログラムP2を渡す(ステップS3)。渡す手段としては、インターネット等の通信回線を介する方法、或いは、CD−ROM等の外部記憶媒体にデータとして格納して渡す方法などがある。
本例のプログラム難読化装置Tは、一般的なプログラム開発者(図中のA)によって利用されることを想定している。
プログラム開発者Aは、他の人物(本例では利用ユーザB)の利用に供されるプログラムの開発を完了すると、当該プログラムP1をプログラム難読化装置Tに対して入力として与える(ステップS1)。
プログラム難読化装置Tは、受け取ったプログラムP1に対して難読化を施し、その結果として生成される難読化プログラムP2を出力する(ステップS2)。このとき、プログラム難読化装置Tは、入力されたプログラムP1と難読化プログラムP2の機能および出力が変化しないように変換を行う。ただし、難読化プログラムP2にはダミーコードが追加されているので、元のプログラムP1よりも解析コストは大きくなる。
プログラム開発者Aは、物理的に離れたところにいる利用ユーザBに対し、難読化プログラムP2を渡す(ステップS3)。渡す手段としては、インターネット等の通信回線を介する方法、或いは、CD−ROM等の外部記憶媒体にデータとして格納して渡す方法などがある。
図4には、難読化プログラムP2が利用ユーザBに渡された時点での、プログラム開発者A、利用ユーザB、ソフトウェア開発者Aが作成したプログラム(元のプログラム)P1、難読化プログラムP2の関係を例示してある。
図4は、プログラム開発者Aが元のプログラムP1と難読化プログラムP2を所持しており、利用ユーザBが難読化プログラムP2のみを所持している状態を示している。プログラムP1と難読化プログラムP2の機能および出力は同じであり、利用ユーザBは難読化プログラムP2により元のプログラムP1と同じ機能および出力を利用できる。更に、利用ユーザBは元のプログラムP1を所持していないので、 プログラムP1の持つ機密情報(例えば、ライセンスに関する情報など)を得るためには、難読化プログラムP2を解析しなければならない。 プログラムP1の解析コストよりも難読化プログラムP2の解析コストの方が大きいため、元のプログラムP1をユーザに手渡す状況と比較すると、プログラム中の機密情報が流出する機会はより小さいものとなる。
図4は、プログラム開発者Aが元のプログラムP1と難読化プログラムP2を所持しており、利用ユーザBが難読化プログラムP2のみを所持している状態を示している。プログラムP1と難読化プログラムP2の機能および出力は同じであり、利用ユーザBは難読化プログラムP2により元のプログラムP1と同じ機能および出力を利用できる。更に、利用ユーザBは元のプログラムP1を所持していないので、 プログラムP1の持つ機密情報(例えば、ライセンスに関する情報など)を得るためには、難読化プログラムP2を解析しなければならない。 プログラムP1の解析コストよりも難読化プログラムP2の解析コストの方が大きいため、元のプログラムP1をユーザに手渡す状況と比較すると、プログラム中の機密情報が流出する機会はより小さいものとなる。
図5には、本例に係るプログラム難読化装置Tとして動作するコンピュータの主要なハードウェアを例示してある。
本例では、各種演算処理を行うCPU41、CPU41の作業領域となるRAM42、基本的な制御プログラムを記録したROM43、本発明の一実施形態に係るプログラムや各種データを記憶する補助記憶装置(例えば、HDD等の磁気ディスクや、フラッシュメモリ等の書き換え可能な不揮発性メモリなど)44、各種情報を表示出力するための表示装置や操作者により入力操作に用いられるキーボードやマウス等の入力機器とのインターフェースである入出力I/F45、他の装置との間で有線又は無線により通信を行うインターフェースである通信I/F46、等のハードウェア資源を有するコンピュータにより構成されている。
そして、本発明の一実施形態に係るプログラムを補助記憶装置44等から読み出してRAM42に展開し、これをCPU41により実行させることで、本発明の一実施形態に係るプログラム難読化装置Tをコンピュータ上に実現している。
本例では、各種演算処理を行うCPU41、CPU41の作業領域となるRAM42、基本的な制御プログラムを記録したROM43、本発明の一実施形態に係るプログラムや各種データを記憶する補助記憶装置(例えば、HDD等の磁気ディスクや、フラッシュメモリ等の書き換え可能な不揮発性メモリなど)44、各種情報を表示出力するための表示装置や操作者により入力操作に用いられるキーボードやマウス等の入力機器とのインターフェースである入出力I/F45、他の装置との間で有線又は無線により通信を行うインターフェースである通信I/F46、等のハードウェア資源を有するコンピュータにより構成されている。
そして、本発明の一実施形態に係るプログラムを補助記憶装置44等から読み出してRAM42に展開し、これをCPU41により実行させることで、本発明の一実施形態に係るプログラム難読化装置Tをコンピュータ上に実現している。
なお、1台のコンピュータによりプログラム難読化装置Tを実現してもよく、各機能部を複数台のコンピュータに分散して設けてプログラム難読化装置Tを実現してもよい。
また、本発明の一実施形態に係るプログラムは、例えば、当該プログラムを記憶したCD−ROM等の外部記憶媒体から読み込む形式や、通信回線等を介して受信する形式などにより、本例に係るコンピュータに設定される。
また、本例のようなソフトウェア構成により各機能部を実現する態様に限られず、それぞれの機能部を専用のハードウエアモジュールで実現するようにしてもよい。
また、本発明の一実施形態に係るプログラムは、例えば、当該プログラムを記憶したCD−ROM等の外部記憶媒体から読み込む形式や、通信回線等を介して受信する形式などにより、本例に係るコンピュータに設定される。
また、本例のようなソフトウェア構成により各機能部を実現する態様に限られず、それぞれの機能部を専用のハードウエアモジュールで実現するようにしてもよい。
T:プログラム難読化装置、 11:難読化規則記憶部、 12:解析処理部、 13:難読化処理部、 P1:元プログラム、 P2:難読化プログラム
Claims (8)
- プログラムリストの入力を受け付ける受付手段と、
前記受付手段により受け付けられたプログラムリストを、当該プログラムリストにおいて使用されている変数を条件式に用いた分岐を含むと共に、当該分岐先のコード部分に当該変数を使用したダミーコードを含むプログラムリストに変換する変換手段と、
前記変換手段により変換されたプログラムリストを出力する出力手段と、
を備えたことを特徴とするプログラム難読化装置。 - 前記ダミーコードは、有限群の任意の要素に対して当該有限群の位数回演算を施したものが単位元になる性質を利用したものである、
ことを特徴とする請求項1に記載のプログラム難読化装置。 - 前記ダミーコードは、加法群の任意の要素に対して当該加法群の位数回演算を施したものが零元になる性質を利用したものである、
ことを特徴とする請求項2に記載のプログラム難読化装置。 - 前記加法群として剰余環Z/nZ(nは整数)上の加法群を用いる、
ことを特徴とする請求項3に記載のプログラム難読化装置。 - 前記加法群として楕円曲線上の有限群を用いる、
ことを特徴とする請求項3に記載のプログラム難読化装置。 - 前記ダミーコードは、乗法群の任意の要素に対して当該乗法群の位数回演算を施したものが単位元になる性質を利用したものである、
ことを特徴とする請求項2に記載のプログラム難読化装置。 - 前記乗法群として剰余環Z/nZ(nは整数)上の乗法群を用いる、
ことを特徴とする請求項6に記載のプログラム難読化装置。 - プログラムリストの入力を受け付ける受付機能と、
前記受付機能により受け付けられたプログラムリストを、当該プログラムリストにおいて使用されている変数を条件式に用いた分岐を含むと共に、当該分岐先のコード部分に当該変数を使用したダミーコードを含むプログラムリストに変換する変換機能と、
前記変換機能により変換されたプログラムリストを出力する出力機能と、
をコンピュータに実現させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009160916A JP2011018119A (ja) | 2009-07-07 | 2009-07-07 | プログラム難読化装置及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009160916A JP2011018119A (ja) | 2009-07-07 | 2009-07-07 | プログラム難読化装置及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011018119A true JP2011018119A (ja) | 2011-01-27 |
Family
ID=43595883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009160916A Pending JP2011018119A (ja) | 2009-07-07 | 2009-07-07 | プログラム難読化装置及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011018119A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018501578A (ja) * | 2014-12-22 | 2018-01-18 | コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. | プログラム実行の隠蔽 |
-
2009
- 2009-07-07 JP JP2009160916A patent/JP2011018119A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018501578A (ja) * | 2014-12-22 | 2018-01-18 | コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. | プログラム実行の隠蔽 |
US10685096B2 (en) | 2014-12-22 | 2020-06-16 | Koninklijke Philips N.V. | Hiding of a program execution |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Brenner et al. | Secret program execution in the cloud applying homomorphic encryption | |
CN105453481B (zh) | 包括表网络的计算设备 | |
EP2388730A1 (en) | Method for generating software code | |
JP5861018B1 (ja) | テーブルネットワークによって構成されたコンピューティングデバイス | |
Hill et al. | Distribution of random streams for simulation practitioners | |
US8090956B2 (en) | Program converting device, secure processing device, computer program, and recording medium | |
CN106789058B (zh) | 一种代理重加密算法描述及解析方法 | |
EP3488553A1 (en) | Device and method for performing obfuscated arithmetic | |
AbdElHaleem et al. | A generalized framework for elliptic curves based PRNG and its utilization in image encryption | |
EP3127271B1 (en) | Obfuscated performance of a predetermined function | |
RU2680761C1 (ru) | Безопасные преобразования данных | |
JP6554103B2 (ja) | 暗号アルゴリズムで使用されるときに秘密データを保護する方法 | |
WO2018008547A1 (ja) | 秘密計算システム、秘密計算装置、秘密計算方法、およびプログラム | |
JP6367959B2 (ja) | 部分文字列位置検出装置、部分文字列位置検出方法及びプログラム | |
JP4675642B2 (ja) | プログラム難読化装置およびその方法ならびにプログラム | |
JP2011018119A (ja) | プログラム難読化装置及びプログラム | |
NL2015955B1 (en) | Calculating device and method. | |
Sawka et al. | A sponge-based key expansion scheme for modern block ciphers | |
Mai et al. | Accelerating SM2 digital signature algorithm using modern processor features | |
JP5277825B2 (ja) | プログラム難読化装置及び難読化プログラム | |
EP3238113B1 (en) | Hiding of a program execution | |
JP2008286964A (ja) | ストリーム暗号の暗号化装置、復号化装置、暗号化方法、復号化方法およびプログラム | |
JP6212377B2 (ja) | 演算装置、演算方法およびコンピュータプログラム | |
JP2005266887A (ja) | プログラム難読化装置、プログラム配布システム、コンピュータプログラム | |
Jadhav et al. | Cryptography Using GPGPU |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20101119 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20110505 |