JP5133973B2 - 難読化支援装置、難読化支援方法、プログラムおよび集積回路 - Google Patents

難読化支援装置、難読化支援方法、プログラムおよび集積回路 Download PDF

Info

Publication number
JP5133973B2
JP5133973B2 JP2009502371A JP2009502371A JP5133973B2 JP 5133973 B2 JP5133973 B2 JP 5133973B2 JP 2009502371 A JP2009502371 A JP 2009502371A JP 2009502371 A JP2009502371 A JP 2009502371A JP 5133973 B2 JP5133973 B2 JP 5133973B2
Authority
JP
Japan
Prior art keywords
code
obfuscation
source code
display
conversion
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
JP2009502371A
Other languages
English (en)
Other versions
JP2010517119A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial 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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2009502371A priority Critical patent/JP5133973B2/ja
Publication of JP2010517119A publication Critical patent/JP2010517119A/ja
Application granted granted Critical
Publication of JP5133973B2 publication Critical patent/JP5133973B2/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/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Document Processing Apparatus (AREA)

Description

本発明は、コンピュータプログラムが不正に解読されたり改竄されたりすることを防止するために実行されるそのコンピュータプログラムの難読化を支援する難読化支援装置に関する。
ソフトウェアアプリケーションは、開発者のビジネスプランに沿ったアプリケーションの実施や使用を保証するために不可欠ないくつかの特徴を備えている。例えば、ドングルのような装置がソフトウェアのライセンシング方法を実施するために長年用いられてきたが、近年では、消費者が、確実にコンテンツライセンシング方法に従って音楽や映像、書面といったデジタルコンテンツを利用するような、ソフトウェアにおけるデジタル著作権管理(DRM:digital rights management)方法が用いられている。これらの特徴を実現するアルゴリズムはハッカーによる攻撃に対してロバストである必要がある。そのため、プログラムに対する多数のコード難読化方法が提案され、その多くが商品化されている(例えば、非特許文献1:Christian Collerg, Clark Thombornson, and Douglas Low. A taxonomy of obfuscating transformations. Technical Report 148, Department of Computer Science, University of Auckland, July 1997.(http://www.cs.auckland.ac.nz/~collberg/Research/Publications/CollbergThomborsonLow97a.http://citeseer.ist.psu.edu/collberg97taxonomy.html)参照)。ここで、コード難読化方法とは、基本的には、オリジナルのプログラムコードを、理解および変更が困難なコードに書き換えるといった変換方法を意味する。
一回の試みで十分に難解なコードを生成することは難しい。そこで、十分に難解なコードを生成するために、難解化処理を制御するパラメータをチューニングする必要がある。しかしながら、このチューニングは非常に面倒な処理である。なぜなら、コードを実行してその実行結果を分析しない限りは、上記チューニングによって難読化が向上したかどうかをユーザが容易に認識することはできないからである。
つまり、従来の難読化支援装置は、ソースコードが難読化されてさらにコンパイルされたオブジェクトコードが実行された結果を解析し、その解析結果をユーザに提示する。そして、難読化支援装置は、ユーザからの操作に応じて、上述のパラメータをチューニングする。このようにパラメータのチューニングが実行されると、そのソースコードは再びそのチューニングされたパラメータに従って難読化される。
また、コンパイラやデバッガプログラムなどが提案されている(例えば、非特許文献2:Steven S. Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufmann Publishers, 1997.および3:A. V. Aho, R. Sethi and J. Ullman, Compilers, Principles, Techniques and Tools, Addison Wellsey, 1986.、並びに特許文献1:米国特許第5371747号明細書参照)。
上記特許文献1は、実行済みのコードのライン数に関する情報を表示することによって、最適化されたコードのデバッギングを補助する方法を開示している。この方法では、ソースコードおよび対応する機械言語コードが、それらの相関関係を示すように表示される。特許文献1は機械言語コードのデバッキングをとりまく、いくつかの問題について着目しているが、変更の質を十分に評価するためには、さらに幾つかの必要な要件がある。
しかしながら、上記従来の難読化支援装置では、ソースコードの難読化を十分に支援することができないという問題がある。つまり、上記特許文献1などの技術を難読化支援装置に適用しても、難読化されたコードと機械言語コードとが表示されるだけであって、ユーザはそれらのコード間の関係しか把握することができない。したがって、ユーザは、上述のように、機械言語コードをコンピュータに実行させ、難読化支援装置にその実行結果を解析させ、さらに、その解析結果に基づいて再びソースコードの難読化をコンピュータに実行させる。ユーザは、このような一連の処理を、難読化が適切なレベルに達するまで繰り返す必要がある。つまり、従来の難読化支援装置では、適切な難読化に手間がかかってしまう。
そこで、本発明は、かかる問題に鑑みてなされたものであって、ソースコードの適切な難読化を容易に行えるように、その難読化を十分に支援することができる難読化支援装置を提供することを目的とする。
上記目的を達成するために、本発明に係る難読化支援装置は、プログラムの難読化を支援する難読化支援装置であって、高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する分析手段と、前記ソースコードおよび難読化コードのそれぞれの前記対象部分における難読化に関する難読化情報を取得する取得手段と、前記分析手段により特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化情報とを関連付けて表示手段に表示させる表示制御手段とを備えることを特徴とする。例えば、前記取得手段は、前記ソースコードの対象部分を難読化するために用いられた難読化パラメータを前記難読化情報として取得する。
これにより、ソースコードおよび難読化コードのそれぞれの対象部分と、それらの対象部分についての難読化情報とが関連付けて表示されるため、ユーザは、一方のコードの一部分が他方のコードの何れの部分に該当するかを容易に把握することができるとともに、それらの部分を容易に対比することができる。さらに、ユーザは、それらの部分における難読化パラメータなどの難読化情報も容易に把握することができる。その結果、ユーザは、その把握した内容に基づいて、再度、コンピュータにソースコードを難読化させて、そのソースコードの適切な難読化を容易に実行させることができる。したがって、ソースコードの難読化を十分に支援することができる。
また、前記難読化支援装置は、さらに、ユーザによる操作を受け付ける入力手段と、前記入力手段により受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御手段を備えることを特徴としてもよい。
これにより、ユーザによる操作に応じて、難読化パラメータが変更されるため、ユーザは、表示されている難読化パラメータと、その難読化パラメータが適用されたソースコードおよび難読化コードのそれぞれの対象部分とを確認して、その確認した内容に基づいてその難読化パラメータを容易に且つ適切に変更することができる。さらに、その変更された難読化パラメータに従ってソースコードの対象部分が再び難読化されるため、ユーザは、ソースコードの対象部分を簡単に且つ適切に難読化させることができる。つまり、ユーザは、難読化の機能を有するコンピュータをわざわざ操作して、変更された難読化パラメータが適用されるべき部分などをそのコンピュータに指定して再び難読化させるような手間を省くことができる。例えば、ユーザは、表示されているソースコードおよび難読化コードのそれぞれの対象部分を見て、十分な難読化が行われていないと判断すると、難読化のレベルを増加させるように難読化パラメータを容易に変更することができる。つまり、本発明では、難読化パラメータの適切で容易なチューニングおよび設定を実現することができる。
また、前記取得手段は、さらに、前記変更された難読化パラメータを取得し、前記表示制御手段は、さらに、前記ソースコードの対象部分と、更新された前記難読化コードの対象部分と、前記変更された難読化パラメータとを関連付けて前記表示手段に表示させることを特徴としてもよい。
これにより、ユーザは、表示されているソースコードの対象部分と、随時更新されて表示される難読化コードの対象部分とを確認しながら、カットアンドトライで難読化パラメータをチューニングすることができ、さらに適切な難読化パラメータを設定することができる。
また、前記分析手段は、さらに、前記難読化コードをコンパイルすることより生成されたオブジェクトコードのうち、前記ソースコードおよび難読化コードのそれぞれの前記対象部分に対応している部分を、前記オブジェクトコードの対象部分として特定し、前記表示制御手段は、さらに、前記オブジェクトコードの対象部分を、前記ソースコードおよび難読化コードのそれぞれの対象部分と関連付けて前記表示手段に表示させることを特徴としてもよい。
これにより、ソースコード、難読化コードおよびオブジェクトコードのそれぞれで対応している部分が対象部分として関連付けて表示されるため、ユーザは、何れかの1つのコードの一部分が他の2つのコードの何れの部分に該当するかを容易に把握することができ、それらの部分を容易に対比することができる。
また、前記難読化支援装置は、さらに、前記オブジェクトコードを実行する実行手段を備え、前記分析手段は、前記オブジェクトコードのうち前記実行手段により実行されている部分を前記対象部分として特定し、前記オブジェクトコードの対象部分に対応する、前記ソースコードおよび難読化コードのそれぞれの部分を、前記ソースコードおよび難読化コードのそれぞれの対象部分として特定することを特徴としてもよい。
これにより、現在実行されている、ソースコード、難読化コードおよびオブジェクトコードのそれぞれの対象部分と難読化情報とが表示され、オブジェクトコードの実行にしたがって、それらの対象部分および難読化情報の表示が更新される。したがって、ユーザは、実行順序に沿って、各コードの対象部分を対比することができるとともに、それらの対象部分の難読化情報を把握することができる。
また、前記分析手段は、さらに、前記ソースコード、難読化コードおよびオブジェクトコードのそれぞれの対象部分に記述されている、前記実行手段により実行されている命令に関連する記号を特定し、前記表示制御手段は、さらに、前記分析手段により特定された記号を示すインジケータを前記表示手段に表示させることを特徴としてもよい。
これにより、各コードの対象部分の中で互いに対応して実行されている部分が、インジケータによってより詳細に示されるため、ユーザはより詳細に各コードを対比することができる。例えば、複数の記号からなるラインや、複数の記号からなる命令、コードを構成する単位(コード単位)などがインジケータにより示される。このようなインジケータは、例えば記号に対する下線や、記号の表示色、記号のフォントである。
また、前記難読化支援装置は、さらに、前記難読化コードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出するメトリクス算出手段を備え、前記取得手段は、前記メトリクス算出手段により算出されたメトリクスを前記難読化情報として取得することを特徴としてもよい。
これにより、難読化コードの対象部分についてメトリクスが、ソースコードおよび難読化コードのそれぞれの対象部分に関連付けて表示されるため、ユーザは、その難読化コードの対象部分における難読化のレベルを容易に把握することができる。
また、前記メトリクス算出手段は、前記分析手段によって特定される前記難読化コードの対象部分が変更されるごとに、当該対象部分に対するメトリクスを算出して記録媒体に格納することにより、前記メトリクスの履歴を作成することを特徴としてもよい。例えば、前記表示制御手段は、さらに、前記メトリクス算出手段により作成された前記履歴を前記表示手段に表示させる。
これにより、ユーザは、対象部分が変わるごとに、メトリクスの変化を確認することができ、難読化のレベルが不適切な部分を容易に見つけ出すことができる。
また、前記難読化支援装置は、さらに、前記難読化コードをコンパイルすることにより生成されたオブジェクトコードを実行する実行手段を備え、前記分析手段は、前記オブジェクトコードのうち前記実行手段により実行されている部分に対応する、前記ソースコードおよび難読化コードのそれぞれの部分を、前記ソースコードおよび難読化コードのそれぞれの対象部分として特定することにより、前記実行手段による前記オブジェクトコードの実行の進行に伴って、特定する前記対象部分を変更することを特徴としてもよい。
これにより、現在実行されている、ソースコードおよび難読化コードのそれぞれの対象部分とメトリクスとが表示され、オブジェクトコードの実行にしたがって、それらの対象部分およびメトリクスの表示が更新される。したがって、ユーザは、実行順序に沿って、各コードの対象部分を対比することができるとともに、そのメトリクスを容易に把握することができる。
また、前記実行手段は、前記履歴により示される、前記メトリクス算出手段により最後に算出されたメトリクスの値が、予め定められたしきい値よりも小さくなると、前記オブジェクトコードの実行を停止する、または、前記メトリクスの値が予め定められたしきい値よりも大きくなると、前記オブジェクトコードの実行を停止することを特徴としてもよい。
これにより、メトリクスの値がしきい値よりも小さくまたは大きくなった時点で、そのメトリクスに対応する、ソースコードおよび難読化コードのそれぞれの対象部分が表示された状態で停止するため、難読化のレベルが不適切な部分をユーザに対して提示することができ、ユーザに対する使い勝手をさらに向上することができる。
また、前記メトリクス算出手段は、さらに、前記ソースコードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出し、前記表示制御手段は、さらに、前記ソースコードのメトリクスを、前記ソースコードおよび難読化コードのそれぞれの対象部分に関連付けて表示させることを特徴としてもよい。
これにより、ソースコードのメトリクスと、難読化コードのメトリクスとが表示されるため、ユーザはそれらのメトリクスを対比して、難読化コードの対象部分がソースコードの対象部分からどれだけ難読化されたかを容易に把握することができる。
例えば、前記メトリクス算出手段は、前記難読化コードの対象部分にある変数のうち有効に使用されている変数の数を前記メトリクスとして算出する。または、前記メトリクス算出手段は、前記難読化コードの対象部分にある変数のうち有効に使用されている変数の割合を前記メトリクスとして算出する。または、前記メトリクス算出手段は、前記難読化コードの対象部分にある変数のうち有効に使用されている変数の平均ライフタイムを前記メトリクスとして算出する。
これにより、難読化コードの対象部分について、特定の観点から見た難読化のレベルが表示されるため、ユーザはその観点における難読化のレベルを容易に把握することができる。
また、前記難読化支援装置は、さらに、ユーザによる操作を受け付ける入力手段を備え、前記分析手段は、前記入力手段により受け付けられた操作に応じて、前記ソースコードおよび難読化コードのそれぞれの対象部分を特定することを特徴としてもよい。
これにより、ユーザは、例えば、ソースコードおよび難読化コードの何れか一方における所望の部分を対象部分として指定し、その指定された部分に対応する他方のコードの対象部分を表示させることができ、ユーザの使い勝手を向上することができる。
なお、背景技術において、変換済コード(難読化コード)からデバッグ情報をユーザに提示する方法、および変換済コードの質を算出する方法が示されているが、これら2つの要素をどのように組み合わせることができるかについては示唆されていない。さらに、変換(難読化)前と後のコードを監視することで、変換(難読化)処理を制御するという考えは、背景技術には開示されていない。
特定の変換の質は、メトリクスによって測定され、変換済コードにおける特定のラインに対して、メトリクスのセットは、実行処理中のある時点におけるコードの質を示すために評価することが可能である。
変換処理の質が、プログラムの現実行時点に対応する、オブジェクトコード、(オブジェクトコードと異なる場合は)変換済コード、およびソースコード、さらに上記メトリクスによって示されれば、ユーザは変換処理の質に関して判定を行うことができるので、上記処理のパラメータを調整することができる。
したがって、変換結果の確認中に変換の質をユーザが定量化できるように、オブジェクトコード、変換済コード、およびソースコード(オリジナルコード)との間の関係、例えば、オリジナルコード中のオペレータとオペランドの状態、特にオペレータとオペランドが既に計算済みであるかが視覚化されて、ユーザに示されるようなシステムまたは方法は非常に有用であり、その需要は高い。
また、ユーザが難読化の質を調整することができるように、現検査時点においてコードの変換パラメータ(難読化パラメータ)を必要に応じて変更することができるシステムおよび方法は非常に有用であり、その需要は高い。
さらに、現在検査対象となっているコードのある時点に対して、実行処理中の当該時点における1又は複数のオブジェクトコード、変換済コード、およびソースコードの複雑度または質を示すメトリクスを表示するシステムおよび方法は非常に有用であり、その需要は高い。
また、変換(難読化)およびコード生成処理(コンパイル)において、使用されたコード文および変数の観点から入力データから出力データへのマッピングに関する追加情報(コード・変数動き情報)の生成を保証することで、オブジェクトコード、変換済コード、およびソースコード間の関係が表示される。この追加情報は、分析方法によって処理される。実行コード内のあるロケーションに注目した場合、上記分析方法は、変換済コードおよびソースコードにおいて対応するロケーションを検出し、オブジェクトコードレジスタとメモリの使用状況から、変換済の変数および数式へのマッピングを検出し、その変数および数式から、オリジナルの変数および数式へのマッピングを検出するので、オリジナル変数の算出状態および数式を表示することができる。
また、オブジェクトコードからソースコードへのマッピングが一度行われると、現在検査の対象となっているコードに対する変換パラメータの有効なセットを決定し、新規変換パラメータを設定するために操作可能なインターフェースをユーザに表示することによって、変換パラメータの調整が行われる。
また、オブジェクトコードからソースコードへのマッピングが一度行われると、オブジェクトコード、変換済コード、およびソースコードの1つ以上について、実行フローにおける特定の箇所の複雑度または質を示すメトリクスのセット、コードの現在有効なライン、または、変換処理において1対1関係がない場合にはコードのブロック、および、モジュール全体と関連して上記コードのラインまたはブロックを特徴付けるメトリクスのセットが算出されて表示される。
なお、本発明は、このような難読化支援装置として実現することができるだけでなく、その難読化支援装置がソースコードを難読化する方法や、その難読化をコンピュータに実行させるためのプログラム、そのプログラムを格納する記憶媒体、難読化支援装置としての機能を実現する集積回路としても実現することができる。
本発明の難読化支援装置は、ソースコードの適切な難読化を容易に行えるように、その難読化を十分に支援することができるという作用効果を奏する。その結果、難読化の質を向上することができる。
(本願の背景技術に関する詳細情報)
2007年1月18日に出願された、明細書と図面と請求項とを含む日本国特許出願番号2007‐009622を本願に引用して援用する。
以下、本発明の実施の形態における難読化支援装置について図面を参照しながら説明する。
なお、本実施の形態では、難読化の評価および適用に人的要因を付加するシステムについて説明するが、本発明は、難読化に限らず、最適化およびその他のコード変換技術などにも適用することができる。本発明では、変換(難読化)前と後のプログラムコードおよびデータを比較し、ランニングコードを特徴付けるメトリクスを表示することによって、ユーザは、判定および算出後の性能に基づいて、変換パラメータを調整することができる。これによって、変換の質を向上することができる。
1.用語
以降使用される用語は、以下の意味を有する。それ以外を意味する場合は、具体的に説明される。
「メトリクス」とは、検査されたコードがいくつかの評価基準を満たす割合を示す値である。例えば、ソースコードを測定する一般的なメトリクスの1つに、関数ごとのライン数がある。上記数値は単独ではあまり意味をなさないが、2つの関数を比較することで、比較結果から、コードが最適化されたかを認識することができる(例えば、上記の場合、メトリクスが低ければ、最適化の評価基準は良くなる)。本発明で用いられるその他のメトリクスについては後に述べる。
「基本ブロック」とは、オリジナルモジュール内のコードのラインに対応する1または複数の実行可能な文である。本実施の形態において、各基本ブロックは、1つのベーシックブロックを示し、ベーシックブロックは、1つのエントリーポイント(つまり、当該ベーシックブロック内のコードは飛び越し命令の目的地であるコードではない)、および1つのエグジットポイントを有し、飛び越し命令を含まないコードである。その他、本実施の形態においては、必要に応じて粗いブロックまたは細かいブロックを用いてもよく、複数のコードラインから成るそれぞれ別個のグループであってもよい。
「コード単位」とは、プログラムコードの解析木の完全な分岐である。解析木とは、方式的文法に従ったソースコードの構文構造を示す木であり、この木の完全な分岐とは、解析木において選択されたノードおよびそのノード以下の全てのノードである。各モジュールは、1または複数のコード単位を有しており、解析木における特定の1つのノードは、1または複数のコード単位内であってもよい。例えば、「a=(b*c)+1;」である場合、多数のコード単位が存在する。各オペランドや、「b*c」および「(b*c)+1」がコード単位であってもよく、1文であってもよい。上記のように、コード単位は基本ブロックとの重複が認められるが、本発明において、2つの概念は異なる用途を有しており、区別される。
「難読化(obfuscation)」、「難読化変換」、もしくは「難読化する(obfuscating)」とは、コード本来の意味を隠すために、意味を変えずに、例えばより複雑化することで、プログラムコードの変換を行うことである。変換済コードの複雑度等を理解するために、難読化コードのメトリクス、またはオリジナルと難読化プログラムを同時に分析することによって、難読化の測定が可能である。
「最適化」、「最適化変換」、または「最適化する」とは、プログラムコードの性能を高めるために、例えば定数演算をループの内から外へ移動することによって、当該プログラムコードを変換することである。
「変換」とは、本実施の形態においては、最適化変換もしくは難読化変換のことである。本実施の形態に記載の方法は、どちらの変換にも適用可能である。しかしながら、変換は、これら2つに限定されない。その他のコード交換も、その質がメトリクスを用いて評価できるのであれば、適用可能である。ソースコードから他のソースコードへの変換、ソースコードから中間表現への変換、またはソースコードからオブジェクトコードへの変換であってもよい。
「オリジナルコード」、「ソースコード」、関連する「オリジナルコードモジュール」、および「オリジナルモジュール」とは、変換が適用されていない命令のセットを含むファイルである。本実施の形態において、各ファイルのプログラミング言語は、C、C++、またはJava(登録商標)のいずれかであるが、その他の言語を用いてもよく、高レベル言語の代わりにアセンブリ言語などの低レベル言語を用いてもよい。同様に、「変換済コード」、「難読化コード」および「変換済モジュール」は命令のセットを含むファイルであるが、これは、1または複数回の難読化もしくは最適化変換処理が行われた結果である。本実施の形態において、同一のコンピュータプログラミング言語または符号化がオリジナルおよび難読化モジュールに用いられるが、オリジナルモジュールの言語から難読化モジュールの言語へのマッピングがある限りは、変換のための入力言語が出力言語と異なってもよい。
「定義使用ウェブ(definition-use web)」は、非特許文献2に記載されている。定義使用ウェブは、1または複数の交わる「定義使用網(definition-use chain)」から構成されており、定義使用網とは、変数に値を割り当ててから、割り当てられた値が用いられる命令を含む全てのブロックまでの経路上にある基本ブロックのセットである。これらの定義使用網は、各変数定義を接続先である全ての使用に繋げるために、与えられたブロックについてデータフロー解析を行うことで構築するとしてもよい。定義使用ウェブおよび定義使用網の詳細については、上記文献に記載されている。
その他の用語は、以下の詳細な説明において定義されている。
2.詳細な説明
質を高めるために、コード変換処理を評価しチューニングする新しい方法について説明する。
上記方法には、主に3つの重要な面がある。第1に、変換は変数およびコードの動きがユーザに表示されるように行われる。第2に、実行コードを確認する際に、変換処理の容易な調整方法があるように行われる。第3に、ユーザによる変換の質の評価、および変換処理をどのように調整するかに関する決定を補助するために、現在実行の対象となっているコードに関するメトリクスがユーザに示される。
図1は、本実施の形態における難読化支援装置を備えた難読化装置の構成を示す図である。
難読化装置10は、例えばC言語などの高級言語で記述されたソースコード100を、容易且つ適切に難読化してコンパイルする装置であって、コード変換部102と、オブジェクトコード生成部106と、リンカー110と、難読化支援装置11とを備えている。
なお、本実施の形態では、ソースコード100を難読化することを例に挙げて説明するが、この難読化は変換の一例であって、ソースコード100に対して最適化などの他の変換を行ってもよい。
コード変換部102は、難読化支援装置11からソースコード100を読み込む。そして、コード変換部102は、そのソースコード100に記述されている、難読化に関する難読化情報である変換パラメータ(難読化パラメータ)に従って、そのソースコード100を難読化し、その難読化されたソースコード100を変換済コード(難読化コード)として出力する。なお、変換済コードは、例えばソースコード100と同一の高級言語で記述されている。
オブジェクトコード生成部106は、変換済コードをコンパイルすることにより、機械言語で記述されたオブジェクトコードを生成する。
リンカー110は、必要とされるライブラリなどをオブジェクトコードに付け加えることにより、実行可能コードを生成する。
難読化支援装置11は、適切な変換パラメータを容易に設定することができるようにコード変換部102による難読化を支援する装置であって、入力部101と、分析部114と、ブラウザ119とを備えている。
入力部101は、例えばキーボードやマウス、他の装置と接続するためのコネクタなどを備える。この入力部101は、他の装置などからソースコード100を取得するとともに、ユーザによる操作などに応じて、難読化に必要とされる変換パラメータ(難読化パラメータ)を受け付ける。そして、入力部101は、受け付けた変換パラメータをブラウザ119に出力する。さらに、入力部101は、受け付けた変換パラメータをソースコード100に記述し、変換パラメータが記述されたソースコード100をコード変換部102に出力する。
また、入力部101は、変換パラメータをソースコード100に記述するときには、その変換パラメータが適用されるソースコード100の部分(囲い込み変換ブロック)を特定するための印をそのソースコード100に付加する。つまり、入力部101は、ユーザによる操作に応じて、ソースコード100の中から囲い込み変換ブロックを特定し、その囲い込み変換ブロックごとに、その囲い込み変換ブロックに適用される変換パラメータと、その囲い込み変換ブロックを特定するための印とを、コード変換部102に対するメッセージとしてソースコード100に記述する。なお、本実施の形態では、この入力部101が難読化制御手段として構成されている。
分析部114は、リンカー110により生成された実行可能コードを実行し、その実行可能コードの中の実行されている部分が、変換済コードやソースコード100などの各コードのどの部分に該当するかを分析する。つまり、本実施の形態では、分析部114は、オブジェクトコード(実行可能コード)を実行する実行手段として構成されているとともに、ソースコード100、変換済コードおよびオブジェクトコードのそれぞれで対応している対象部分を特定する。
ブラウザ119は、分析部114の分析結果に基づいて、ソースコード100、変換済コード、およびオブジェクトコードのそれぞれで対応している部分や、その部分に適用されている変換パラメータなどを関連付けて出力装置1002に表示させる。なお、本実施の形態では、このブラウザ119が変換パラメータを取得する取得手段として構成されているとともに、ソースコード100、変換済コードおよびオブジェクトコードのそれぞれの対象部分と変換パラメータとを関連付けて表示させる表示制御手段として構成されている。
出力装置1002は、例えば液晶ディスプレイなどにより構成され、ブラウザ119から出力された内容を表示する。
なお、難読化装置10および難読化支援装置11の各構成要素は、一般的に、CPU(Central Processing Unit)によって実行可能なソフトウェアの一部として実現されるが、その一部または全ては、ハードウェアで実現されてもよい。
図2は、本実施の形態における難読化支援装置11を含む難読化装置10の動作の一例を示す図である。
ソースコード100は、コード変換部102によって(1または複数回の難読化もしくは最適化技術によって)処理され、その結果、上述の変換済コード104が生成される。また、この処理は、数式、コードのライン数、基本ブロック、変数等がどのように動き、コピー、削除、結合されたかを示すデータであるコード・変数動き情報116を生成する。
次に、オブジェクトコード生成部106は、変換済コード104から上述のオブジェクトコード108を生成し、リンカー110は、分析部114によって実行される実行可能コード112を生成する。上記分析部114は、コード・変数動き情報116を処理することで、後述する同期コード・データディスプレイ118のレンダリングを可能とする。このレンダリング方法は、現在実行対象となっているコードの状態を正確に表示するために、上記ソースコード100および変換済コード104を必要とする。レンダリングされたディスプレイは、出力装置1002の表示機能および以下に示す機能を有するブラウザ119を用いて示される。
つまり、コード変換部102は、入力部101に受け付けられた各変換パラメータおよび各囲い込み変換ブロックに従って、ソースコード100の各囲い込み変換ブロックを難読化することにより変換済コード104を生成する。さらに、コード変換部102は、ソースコード100から変換済コード104への変換の内容、つまり上述のような変数の動きなどを示す情報を生成する。
オブジェクトコード生成部106は、変換済コード104をオブジェクトコード108に変換し、変換済コード104からオブジェクトコード108への変換の内容、つまり上述のような変数の動きなどを示す情報を生成する。このように、コード変換部102およびオブジェクトコード生成部106により生成される、変換の内容を示す情報がコード・変数動き情報116として分析部114に出力される。
分析部114は、実行可能コード112を実行し、例えば、実行可能コード112のうち実行されている部分(ラインやブロックなど)に対応するオブジェクトコード108の部分を特定する。さらに、分析部114は、そのオブジェクトコード108の部分に対する変換済コード104およびソースコード100の部分を、コード・変数動き情報116に基づいて特定する。また、分析部114は、例えば、ソースコード100のうちの一部分が入力部101により指定されている場合には、その指定されている部分に対応する変換済コード104およびオブジェクトコード108の部分を特定する。
ブラウザ119は、分析部114による特定結果を用いて、ソースコード100、変換済コード104、およびオブジェクトコード108のそれぞれで互いに対応している部分を同期して示す同期コード・データディスプレイ118を出力装置1002に表示させる。また、ブラウザ119は、その部分に適用されている変換パラメータを取得して、その同期コード・データディスプレイ118に関連付けて出力装置1002に表示させる。
ユーザは、このような出力装置1002に表示される同期コード・データディスプレイ118および変換パラメータを確認し、ソースコード100の難読化などの変換が不適切と判断すると、入力部101を操作することにより、変換パラメータを変更する。
その結果、コード変換部102は、変更された変換パラメータに従ってソースコード100の難読化を繰り返し実行する。
図3は、同期コード・データディスプレイ118の一例を示す図である。
同期コード・データディスプレイ118は、3つの並列するウィンドウから構成され、ソースコードウィンドウ200、変換済コードウィンドウ202、およびオブジェクトコードウィンドウ204を含む。ソースコードウィンドウ200は、ソースコード100の一部分(囲い込み変換ブロック)を示し、変換済コードウィンドウ202は、変換済コード104の一部分を示し、およびオブジェクトコードウィンドウ204はオブジェクトコード108の一部分を示す。そして、これらのウィンドウにより示される各コードの部分はそれぞれ互いに対応し、同期して表示される。
さらに、コード単位210等の算出済みのコード単位はインジケータなどにより強調表示されており、実行予定オブジェクトコード単位214(次の実行対象となるコード)によって影響をうけるコード単位208は、上とは別の形式(太字イタリック体)で強調表示されている。また、実行予定オブジェクトコード単位214に対応する変換済コード104のラインは同様に強調表示(下線)されている。ここで、特に進歩的な表示項目は、部分的に算出されたコード単位206である。本図において、定数4は、位置[tmp1]216に値5を格納し、位置[tmp1]を読み込んでレジスタ218をデクリメントすることに置き換えられる。ここで、第1ステップ216は終了したが第2ステップ218は終了していないので、ソースコードウィンドウ200では、ソースコード100中の定数4は、例えば他のコード単位と異なる色などで表示されるように、部分的に算出されたと示される。
これらのウィンドウは、いずれもユーザが望むように消したり、または全画面表示してもよく、算出済、部分的算出済、及び算出予定のコード単位の強調表示についても同様に制御してもよい。
特許文献1は、(本発明の変換済コードに対応する)ソースコード、および(本発明のオブジェクトコードに対応する)機械コードのみを同期的に記載している。しかしながら、これは、オブジェクトコードを生成する前に他の変換をおこなうシステムには十分でない。上記のように、本発明では、同期コード・データディスプレイ118は、同期するソースコード100、変換済コード104、およびオブジェクトコード108を含む。よって、ユーザは変換済コード104の状態およびそれらの関係を認識することができる。これは、オブジェクトコード108を生成する前に他の変換(例えば、難読化または最適化)をおこなうシステムにとって非常に有用である。
また、本実施の形態において、図3に示されるディスプレイでは、ユーザは変換処理の質を監視してもよく、現在実行の対象となっているコードの変換パラメータを変更してもよい。
図4は、変換パラメータの変更を可能にするブラウザ119内の処理を説明するための図である。
変換パラメータの変更を実行する方法が呼び出されると、最初に囲い込み変換ブロックの検出300が行われる。この囲い込み変換ブロックは、実行対象ラインが含まれるコード内のブロックであり、例えば図5に示されるように、開始および終了の印402および412で区切られている。このような検出300は、コード・変数動き情報116、ソースコード100、および変換済コード104に基づいて行われる。同様の方法で同期コード・データディスプレイ118のレンダリングを行うことで、ソースコード100における現在の位置が分かり、変換パラメータを検出することができる。
つまり、ブラウザ119は、分析部114を介して取得されたコード・変数動き情報116および変換済コード104に基づいて、オブジェクトコード108の中の実行部分に対応するソースコード100の部分を見つけ出し、その部分を含む囲い込み変換ブロックを検出する。そして、ブラウザ119は、ソースコード100のその囲い込み変換ブロックに対して記述されている変換パラメータを取得し、その変換パラメータを出力装置1002に表示させる(変換パラメータの表示302)。
また、ユーザ入力の受け付け304によって、ユーザは変換パラメータとの連動が可能になる。本実施の形態では、この連動は操作システムの標準グラフィックユーザインターフェースを介して行われる。次に、ユーザ入力は、ソースコード100における変換パラメータの更新306に用いることができる。
つまり、ユーザは、出力装置1002に表示されている変換パラメータを確認することができ、入力部101を操作することにより、その表示されている変換パラメータを変更することができる。すなわち、ブラウザ119は、ユーザによる入力部101の操作に応じて、表示されている変換パラメータを変更する。そして、入力部101が、変更された変換パラメータの決定を受け付けると、その変更された変換パラメータをコード変換部102に出力する。コード変換部102は、その変更された変換パラメータを取得すると、ソースコード100の囲い込み変換ブロックに記述されている変換パラメータを、その変更された変換パラメータに書き換える。
最後に、ブラウザ119は、アプリケーションの再構築308の処理により、コード変換部102、オブジェクトコード生成部106、リンカー110、および分析部114に、図2に示されたような、新規の変換パラメータに基づくソースコード100の再変換(再難読化)および再構築を要求する。本実施の形態において、アプリケーションの再構築308は、他の構成要素に再変換および再構築を要求するが、別の実施の形態では、例えば、再変換および再構築の全てまたは一部をアプリケーションの再構築308で行ってもよい。
図5は、ソースコードウィンドウ200の他の例を示す図である。
ブラウザ119は、図5に示すように、ソースコード100にプラグマ(コンパイラへの指示文)として記述されている、囲い込み変換ブロックを示す印や変換パラメータをソースコードウィンドウ200に表示させてもよい。
すなわち、囲い込み変換ブロックの検出300を行うために、本実施の形態におけるCまたはC++プログラミング言語を用いたソースコード100は、図5に示すような、使用する変換パラメータを特定する#pragma transform()ライン402を備える。実行されている囲い込み変換ブロックは、コード・変数動き情報116を用いることで簡単に見つけることができる。ここで、図5では、説明を容易にするために、ソースコードウィンドウ200のみを表示する。その他のウィンドウは、ライン402が必要でないために表示されていないが、ソースコードウィンドウ200と一緒に表示が可能であることは言うまでもない。
ライン402および412は、コード変換部102に対する制御メッセージである。ライン402は、要素404、406、408、および410で特定される変換方法(変換パラメータ)が、変換処理の終わりを示すライン412までの範囲に適用されることを示す。変換制御関数(上記各要素)において、適用される変換名が、括弧内に記載された各変換の引数と共に列挙される。
本実施の形態において、変換方法は、非特許文献1から引用したものである。最初に、要素404であるredundant(off)は、非特許文献1に記載の変換技術6.2.6 Add Redundant Operands を参照しており、演算結果に影響を与えない冗長な数式をコードに追加すべきか否かを示す。引数である「off」は、変換(冗長な数式の追加)がコード変換部102によって行われないことを示す。要素406であるOutline(15)は、非特許文献1の6.3.1 Inline and Outline Methodsに記載の変換技術であり、関数をインライン展開したり、1つの関数を複数の関数に分割することを示す。ここでパラメータ「15」は、1つの関数を15行で構成される関数として分割することを示す。要素408であるencoding(5,high)は、非特許文献1の7.1.1 Change Encodingに記載の変換技術であり、例えばループカウンタに代数変換をさせる。パラメータ「5」は符号化を変更する変数の割合を示し、引数である「high」は、高強度な符号化を低強度(ただし高速)な符号化よりも多く用いるべきことを示す。要素410であるclone(on)は、非特許文献1の6.3.3 Clone Methodsに記載の変換技術であり、ソースコードの一部を選択して複製すべきことを示す。それぞれのインスタンスについては異なる変換が適用され、起動時ごとに、異なるバージョンが選択される。引数である「on」は、変換係数は有効であるが、その他の引数をもっていないことを示す。当業者にとって、その他の難読化または最適化変換がリストに追加されてもよく、同様に各変換に利用可能なパラメータを修正してもよい。
変換パラメータの表示302とユーザ入力の受け付け304は、グラフィックユーザインターフェースを介して行われることが好ましい。本実施の形態において、グラフィックユーザインターフェースは、ブラウザ119の機能として実施される。
図6は、上記グラフィックユーザインターフェースとして出力装置1002に表示されるパラメータウィンドウの一例を示す図である。
ブラウザ119は、図6に示すようなパラメータウィンドウ500を出力装置1002に表示させる。このパラメータウィンドウ500は、図5に示す要素404,406,408,410の変換パラメータを表示するとともに、ユーザによる入力部101の操作に応じて、その変換パラメータの内容を変更して表示する。また、このようなパラメータウィンドウ500は、図3に示す同期コード・データディスプレイ118や図5に示すソースコードウィンドウ200に関連付けて表示されてもよく、その同期コード・データディスプレイ118の一部に関連付けて表示されてもよい。
図7は、パラメータウィンドウ500の表示方法の一例を示す図である。
ブラウザ119は、例えば図7に示すように、ソースコードウィンドウ200と変換済コードウィンドウ202とパラメータウィンドウ500とを並べて出力装置1002に表示させる。
なお、本実施の形態では、実行対象ラインが含まれる囲い込み変換ブロックごとに、ソースコード100のその囲い込み変換ブロックと、その囲い込み変換ブロックに対応する変換済コード104の一部分と、その囲い込み変換ブロックに対応するオブジェクトコード108の一部分と、その囲い込み変換ブロックに適用された変換パラメータとをそれぞれ関連付けて出力装置1002に表示させた。しかし、囲い込み変換ブロックごとにではなく、他の単位、例えば基本ブロックごとに、それぞれのコードで対応する部分や変換パラメータを関連付けて出力装置1002に表示させてもよい。
また、実行対象ラインとは関係なく、ユーザから指定された囲い込み変換ブロックごとに、ソースコード100のその囲い込み変換ブロックと、その囲い込み変換ブロックに対応する変換済コード104の一部分と、その囲い込み変換ブロックに対応するオブジェクトコード108の一部分と、その囲い込み変換ブロックに適用された変換パラメータとをそれぞれ関連付けて出力装置1002に表示させてもよい。
この場合、例えば、入力部101がホットキー(ショートカットキー)などを備えていたり、ブラウザ119がツールバーボタンなどを出力装置1002に表示させる。そして、ユーザがそのホットキーを操作したり、入力部101を操作してそのツールバーボタンを選択するごとに、ソースコード100に記述された複数の囲い込み変換ブロックの順番に従って、新たな囲い込み変換ブロックが指定される。これにより、ユーザは所望の囲い込み変換ブロックに対する変換パラメータを容易に表示させて、その変換パラメータを変更することができる。
このように本実施の形態では、ソースコード100および変換済コード104のそれぞれの対象部分と、それらの対象部分についての変換パラメータとが関連付けて表示されるため、ユーザは、一方のコードの一部分が他方のコードの何れの部分に該当するかを容易に把握することができるとともに、それらの部分を容易に対比することができる。さらに、ユーザは、それらの部分における変換パラメータも容易に把握することができる。その結果、ユーザは、その把握した内容に基づいて、再度、難読化装置10にソースコード100を難読化させて、そのソースコード100の適切な難読化を容易に実行させることができる。したがって、ソースコードの難読化を十分に支援することができる。
また、ユーザによる操作に応じて、変換パラメータが変更されるため、ユーザは、表示されている変換パラメータと、その変換パラメータが適用されたソースコード100および変換済コード104のそれぞれの対象部分とを確認して、その確認した内容に基づいてその変換パラメータを容易に且つ適切に変更することができる。さらに、その変更された変換パラメータに従ってソースコード100の対象部分(囲い込み変換ブロック)が再び難読化されるため、ユーザは、ソースコード100の対象部分を簡単に且つ適切に難読化させることができる。つまり、本発明では、変換パラメータの適切で容易なチューニングおよび設定を実現することができる。また、ユーザは、表示されているソースコード100の対象部分と、随時更新されて表示される変換済コード104の対象部分とを確認しながら、カットアンドトライで変換パラメータをチューニングすることができ、さらに適切な変換パラメータを設定することができる。
(変形例)
上記実施の形態では難読化支援装置11は、同期コード・データディスプレイ118およびパラメータウィンドウ500を出力装置1002に表示させたが、さらに、変換済コード104の難読化の程度または質を示す同期メトリクス表示ディスプレイを表示させてもよい。
図8は、本変形例に係る難読化装置10の動作の一例を示す図である。
分析部114は、ソースコード100、変換済コード104およびオブジェクトコード108などに基づいて、ソースコード100および変換済コード104を解読することの難しさの程度または質を示すメトリクスを算出する。つまり、本変形例では、この分析部114がメトリクス算出手段の機能を備えている。ブラウザ119は、その算出されたメトリクスを示す同期メトリクス表示ディスプレイ600を出力装置1002に表示させる。
このように同期メトリクス表示ディスプレイ600が表示されることにより、ユーザによる検査対象コード(変換済コード104)の質に関する判断を補助することができる。
図9は、分析部114がメトリクスを算出する処理を説明するための図である。
第1に、分析部114は、対象基本ブロックの検出700を実行する。対象基本ブロックとは、現在実行されている基本ブロックであって、この検出は、上述の囲い込み変換ブロックの検出300と僅かに異なる。対象基本ブロックの検出700は、ソースコード100および変換済コード104に対し、検索をガイドするためにコード・変数動き情報116およびオブジェクトコード108を用いて、制御フロー図において現在実行対象となるコードが位置するブロックを検出するために、より狭い範囲に焦点を当てる。現在実行対象となるコードの位置が分かると、分析部114は、ソースコード100、変換済コード104、およびオブジェクトコード108全てのメトリクスを評価するために、メトリクスの算出702を実行する。
なお、大部分または全ての変換(難読化)が、オブジェクトコード生成部106の実行前に行われる場合、変換済コード104およびオブジェクトコード108のメトリクスは非常に似通っている。したがって、本変形例では、オブジェクトコード108のメトリクスについての説明を省略し、ソースコード100および変換済コード104のメトリクスを説明する。しかしながら、当業者であれば、必要に応じてオブジェクトコード108のメトリクスを示すように、本発明を変更してもよい。さらに、本発明は、1または任意の組み合わせである、ソースコード100のメトリクス、変換済コードのメトリクス、およびオブジェクトコードのメトリクスを示すように変更してもよい。この場合、ユーザは表示するメトリクスを変更してもよい。
このように、本変形例に係る分析部114は、ソースコード100および変換済コード104のそれぞれで対応し、現在実行されている基本ブロックごとに、それらの基本ブロックのメトリクスを順次算出する。
図10は、同期コード・データディスプレイ118および同期メトリクス表示ディスプレイ600の一例を示す図である。
分析部114は、実行オブジェクトコード108の有効ライン214に対して、ソースコード100および変換済コード104の複雑度または質を示すメトリクスのセットを算出する。その結果、ブラウザ119は、その算出されたメトリクスのセットを示す同期メトリクス表示ディスプレイ600を、同期コード・データディスプレイ118の上記有効ライン214に対応付けて出力装置1002に表示させる。例えば、同期メトリクス表示ディスプレイ600には、メトリクス802、804、806、および808などが示される。以下、それぞれのメトリクスが示す内容、およびコードを説明するために用いることが可能なその他のメトリクスについて説明する。
(変換強度の測定に用いられるメトリクス)
上記のように、図10は、特に難読化変換の質の評価における補助を対象とする、多数のメトリクスを示す。
最初に、メトリクス802は有効変数を示す。表示されている2つの数字は、1つ目が対象基本ブロックにおいて有効な変数の数であり、これはブロック内に設定される、ブロック内で参照される、もしくは対象基本ブロック内にアドレスのある、変数、ローカルパラメータ、グローバルパラメータ、関数パラメータの数である。2つ目の数字は、対象基本ブロック内で有効に用いられる、変数、ローカルグローバル、または関数パラメータの総数を示す。例えば、図10に示すメトリクス(有効変数)802では、1つ目の数字が「5」であり、2つ目の数字が「16」である。なお、図10では、ソースコード100と変換済コード104のそれぞれに対してメトリクスが表示されている。
次に、メトリクス804はワーキングセットを示す。ワーキングセットは、メトリクス(有効変数)802の別表現であって、メトリクス802で示すような単なる2つの数ではなく、むしろ変数の総数に対する有効変数の割合を示す。図10に示すメトリクス(ワーキングセット)804において、その割合は31.2%である。
メトリクス806は平均ライフタイムを示す。この平均ライフタイムは、現在の実行時点において有効な、上記定義使用網および定義使用ウェブに対する基本ビルディングブロックを、各定義使用ペアに対して測るものである。本実施の形態では、平均ライフタイムは、ソースコードのデータフロー解析結果から得られる、定義位置と使用位置との間の基本ブロックの平均数である。分析部114は各定義使用ペア間の可能な全ての経路の長さに対するスコアを割り当て、各ペア間の全ての経路にある基本ブロックの数を数える。分析部114は、これらのスコアを全て加算し、その加算結果を網の総数で割ることによって、最終平均ライフタイムを算出する。例えば、ライフタイムは、変数に値が割り当てられる、つまり変数が定義されてから、その変数が使用されるまでの経路上にある全ての基本ブロックの数であって、平均ライフタイムは、変数ごとのライフタイムを全て加算し、変数の総数で除算した結果を示す。
メトリクス808は定義使用複雑度を示し、変数定義および変数使用の複雑度のより詳細な測定基準である。
以下、定義使用複雑度について具体的なコードモジュールを用いて説明する。
図11は、比較的単純なコードモジュールの概要構成を示す図である。なお、図11中の四角はそれぞれ、コードモジュールを構成する基本ブロック900〜918を示す。例えば、このコードモジュールが変換済コード104に相当する。ここで、各定義使用ペアの複雑度を定義するために、メトリクス(平均ライフタイム)806で示される経路間の長さ以外の要素が用いられる。平均ライフタイム806は、定義基本ブロックと使用基本ブロック間のループ内におけるネスティングのレベルを示す。ここで、定義基本ブロックは、値が代入される変数をもつブロックであり、使用基本ブロックは、上記値が代入された変数が用いられるブロックである。これを数値化するためには、定義からの経路がループの内または外のステップを用いる回数を示すステップ数を評価してもよい。
最初に、分析部114は、非特許文献3のChapter10.4に記載の技術によって示唆されているような方法を用いて、各基本ブロックのネスティングレベルを算出する。この計算は、制御フローループが戻る2つの隣接ブロック間の経路である、モジュールの制御フロー図におけるバックエッジを特定することから始まる。図11の単純なコードモジュールにおいて、ブロックB7(914)からブロックB4(908)への1つのバックエッジは視覚的に特定が可能である。しかし、これらのバックエッジは、プログラムの観点から、スタートブロック900からエッジソース(この例ではブロックB7(914))への全ての経路が、エッジの行き先(この例ではブロックB4(908))を通過するか否かをテストすることによって検出することができる。通過する場合、対象エッジはバックエッジである。
全てのバックエッジが検出されると、バックエッジの行き先のブロック(例えばブロックB4(908))から、そのバックエッジの開始ブロック(例えばブロックB7(914))までの経路にあり、かつ、そのバックエッジの行き先を通過しない全てのブロックを検出することによって、各ループを決定することができる。したがって、ブロックB5(910)およびブロックB6(912)はブロックB7(914)に直接接続してループ内にあるが、ブロックB3(906)は、ブロックB8(916)と同様、ブロックB4(908)からブロックB7(914)に至るまでの全ての経路にないため、そのループ内にない。上記条件を満たすブロックB5(910)およびB6(912)と同様に、バックエッジの両端にあるブロックは、ループ内にあると定義されたブロックのセットに追加される。
ここで、全てのバックエッジが検出され、各ループを構成するブロックが構築されると、各ブロックのネスティングレベルは、各基本ブロックが現れるループセットの数を数えるだけで決定することができる。次に、分析部114は、ブロックを用いるために、定義基本ブロックからの最短経路に従い、ネスティングレベルが変化するたびに(つまり、本実施の形態において、ループの中や外に行くこと)、ステップカウンタをインクリメントする。最終値は、特定の定義使用ペアのスコアを示す。最後に、特定の基本ブロックにおける、各変数の定義使用ペアの複雑度に対するメトリクスを算出するために、まず、全ての定義使用ペア、および、その定義使用ペアの間にある全ての基本ブロックを列挙する。
表1は、上記図11に記載の変数aに対して算出された各定義使用ペアのステップ数を示す。
Figure 0005133973
なお、この例において、変数aの定義使用ウェブは、上記表1から得られる全ての定義および使用を統合したものである。
上記表1の複雑度測定方法の1つは、ある基本ブロックにおいて、所定の基本ブロックと交差する各定義使用ペアに対して(ステップ数+1)の数を全て加算し、加算結果(スコア)を表中の固有の定義の数と固有の使用の数との積で割る方法である。なお、「固有の定義の数」および「固有の使用の数」とは、表1における「定義」の欄と「使用」の欄のそれぞれにて重複なく現れる基本ブロックの数を意味する。この方法は、1つの変数の定義使用複雑度を示すメトリクスを算出する。B7(914)の所定の基本ブロックにおける表1の変数aに対して、第1、2、5、および6の定義使用ペアを除く全てのペアが当該ブロックを通過する。(ステップ数+1)の加算結果、つまりスコアは14(=(1+1)+(2+1)+(1+1)+(2+1)+(0+1)+(0+1)+(1+1))である。固有の定義は、ブロックB1,B2,B6で行われているため、その固有の定義の数は(3)である。また、固有の使用は、ブロックB3,B5,B6,B8で行われているため、その固有の使用の数は(4)である。したがって、固有の定義の数と固有の使用の数との積は、3×4=12であり、ブロックB7(914)における変数aの定義使用複雑度の最終値は、14/12=1.167となる。
最後に、所定の基本ブロックにおける各有効変数に対して、上記のようなステップ数のスコアを算出し、各変数のスコアを全て加算し、各変数に対する固有の定義の数と固有の使用の数との積を全て加算する。スコアが全て加算された数を、積が全て加算された数で割ることによって、その基本ブロックにおける定義使用複雑度が得られる。
つまり、分析部114は、上述のような方法により、所定の基本ブロックにおける1つの有効変数に対する定義使用複雑度や、その基本ブロックの定義使用複雑度をメトリクス808として算出する。
なお、本変形例では、ソースコード100および変換済コード104を解読することの難しさの程度および質を、有効変数、ワーキングセット、平均ライフタイム、および定義使用複雑度などのメトリクスで表したが、他のメトリクスで表してもよい。
当業者であれば、共に上記測定カテゴリおよび全く新しいカテゴリ内の改良である、ソースコードおよび対象コードに対応する変換済コードの複雑度、および対象コード自体を分析し評価する利用可能なメトリクスが他にもあることがわかるだろう。
また、ブラウザ119は、上述のような有効変数やワーキングセットなどの複数種のメトリクスのうち、ユーザにより指定された種類のメトリクスのみを同期メトリクス表示ディスプレイ600に表示させてもよい。
また、分析部114は、基本ブロックを実行するごとに、その基本ブロックに対して算出した複数種のメトリクスを記録することにより、各種メトリクスの履歴の作成および更新を行ってもよい。この場合、各種メトリクスの履歴が更新されるごとに、ブラウザ119は、その更新された各種メトリクスの履歴をそれぞれ形跡として表示させる。さらに、ユーザによって指定された種類のメトリクスの履歴が更新されるごとに、ブラウザ119は、上記形跡の代わりに、または上記形跡に加えて、その更新されたメトリクスの履歴を形跡として表示させてもよい。
さらに、分析部114は、実行可能コード112を実行しながら、上述のように作成および更新される各種メトリクスの履歴を監視してもよい。この場合、分析部114は、何れかの種類のメトリクスの示す値が、予め定められたしきい値よりも小さくまたは大きくなったときに、実行可能コード112(オブジェクトコード108)の実行を停止する。例えば、上述の定義使用複雑度が所定のしきい値よりも小さくなったときに、分析部114は実行可能コード112の実行を停止する。その結果、それまでに実行された最後の基本ブロック、つまり定義使用複雑度がしきい値よりも小さい基本ブロックに対する同期コード・データディスプレイ118、パラメータウィンドウ500、および同期メトリクス表示ディスプレイ600が表示される。これにより、ユーザは、定義使用複雑度の増加を図るべきブロックを容易に見つけることができ、そのブロックに対する変換パラメータを容易に変更することができる。
また、各種メトリクスの履歴は、実行可能コード112の実行の進行に合わせて記録しなくともよい。例えば、ユーザからの入力によってメトリクスを算出する基本ブロックが変化する場合には、ユーザの選択した基本ブロックが変わる毎にメトリクスを算出し、その履歴を記録するとしても良い。この場合、記録される履歴は、ユーザが選択した基本ブロック単独のメトリクスの履歴であってもよいし、ユーザが選択した基本ブロックまで実行可能コード112の実行を進行させた場合に得られるメトリクスの総計であってもよい。
本発明についての実施の形態および変形例の説明はここで終わるが、当業者であれば、本発明を多くの他の変形例へと展開することができる。以下にいくつかの他の変形例を示す。
例えば、同期コード・データディスプレイ118において、オブジェクトコード108の一部分、つまりオブジェクトコードウィンドウ204を表示しても表示しなくてもよい。例えば、ブラウザ119は、分析部114による難読化または最適化が十分であると判定された場合に、オブジェクトコードウィンドウ204を表示してもよい。上記判定は、メトリクスに基づいて判定される。もしくは、ブラウザ119は、ユーザからの入力に基づいてオブジェクトコードウィンドウ204を表示してもよい。
また、上記実施の形態および変形例の同期コード・データディスプレイ118では、3つの並列するウィンドウが表示されているが、ソースコード100に対して複数の変換が行われる場合は、4つ以上のウィンドウを表示してもよい。例えば、ソースコード100に難読化及び最適化の両方が行われる場合、4つのウィンドウを表示することができる。上記複数のウィンドウは、ソースコード100、最適化コード、難読化コード、およびオブジェクトコード108のそれぞれで対応している部分を表示することができる。この場合、ユーザは表示するウィンドウを選択することができる。一方、全てのウィンドウを表示する必要はない。1または複数のウィンドウの表示は、例えば、ユーザの入力に応じて、省略することができる。
また、上記実施の形態および変形例において、上記3つのウィンドウは、1つの画面上に並列する3つの欄として表示しているが、各ウィンドウは、それぞれ別個に、または異なる時間に表示してもよい。これらの実施例は、表示画面の解像度が3つのウィンドウを同時に示すのに十分でない場合に有用である。この実施において、ユーザは、自身の入力に用いるウィンドウを切り替えることができる。
また、上記実施の形態および変形例では、実行可能コード112の実行されているラインを条件とし、そのラインに対応する、ソースコード100の部分、変換済コード104の部分、オブジェクトコード108の部分、それらの部分に適用されている変換パラメータ、およびそれらの部分のメトリクスを関連付けて表示させた。しかし、実行可能コード112の実行される予定のラインを条件とし、そのラインに対応する、上記各コードの部分、それらの部分に適用されている変換パラメータ、およびそれらの部分のメトリクスを関連付けて表示させてもよい。また、ユーザにより指定されたラインを条件とし、そのラインに対応する、上記各コードの部分、それらの部分に適用されている変換パラメータ、およびそれらの部分のメトリクスを関連付けて表示させてもよい。また、上記各コードの部分は基本ブロックや囲い込み変換ブロック、コード全体など、どのような単位であってもよい。
また、上記実施の形態および変形例において、実行予定のオブジェクトコード108(または現在実行されているコード)に対する情報(例えば、メトリクスのセット)を示したが、ユーザは、自身が確認したい情報である、同期コード・データディスプレイ118に示されるコードを手動で指定してもよい。上記情報を生成する処理は、どのコード単位で情報が生成されるかという点を除いて、オブジェクトコード108の生成方法と同様であるため、その具体的な説明はここでは省略する。
また、上記実施の形態および変形例において、メトリクスのセットは、基本ブロック単位で算出されるが、当該基本ブロックの一部に対応するメトリクスのセットを算出してもよい。この場合、ユーザは、例えばマウスでドラッグして、メトリクスを算出する範囲を指定することができる。すると、上記メトリクスの算出処理は、選択範囲に対して行われる。この場合、ユーザは自身が注目するコードに対する変換の強度を柔軟に見直すことができる。
また、上記実施の形態および変形例において、コード単位は下線等を用いて強調表示されたが、本発明はその他の強調表示方法を用いてもよい。例えば、対応するコード間に線を引く、対応するコードに同一の色を塗る等の方法がある。
また、上記実施の形態および変形例では、実行対象とされているコードの一部分が検査対象(表示対象)であるが、ユーザは、いくつかの入力装置やブラウザ119を介してその対象とする部分を指示してもよい。この場合、ユーザはオブジェクトコード108において対象箇所を指示する必要も、ソースコード100または変換済コード104において対象部分を指示する必要もない。
また、上記実施の形態および変形例において、変換パラメータが変更された場合には、ソースコード100の囲い込み変換ブロックに記述されている変換パラメータを、その変更された変換パラメータに書き換えていたが、これに限られるものではない。例えば、ソースコード自体は書き換えないまま、新規の変換パラメータを使って再難読化するとしてもよい。これは、アプリケーションの再構築308の処理において、ソースコード内の変換パラメータを無視し、新規の変換パラメータを使って再構築を行うとすれば実現できる。この場合、元の変換パラメータを残しつつ、新しい変換パラメータでの変換結果を確認することが出来る。また、ユーザの指示により、ソースコード内の変換パラメータを新規の変換パラメータに書き換えるか否かを指定できるとしても良い。この場合、新しい変換結果がユーザの満足が得られるものであれば、ソースコード内の変換パラメータを正式に変更するなどの制御が可能となる。
(上記以外のその他の変形例)
なお、本発明は以下の場合も本発明に含まれる。
(1)上記各装置は、具体的に、マイクロプロセッサ、ROM(Read Only Memory)、RAM(Random Access Memory)、ハードディスク部、表示部、キーボード、およびマウス等を備えるコンピュータシステムであってもよい。コンピュータプログラムはRAMもしくはハードディスク部に格納される。各装置は、上記コンピュータプログラムに応じたマイクロプロセッサの動作を介して機能する。ここで、上記コンピュータプログラムは、コンピュータに対する命令を示す複数の命令コードの組み合わせによって構成されている。
(2)上記各装置を構成する構成要素の一部又は全ては、単一のシステムLSI(Large-Scale Integration)で構成されてもよい。上記システムLSIは、1つのチップに構成要素を集積することによって製造された超多機能LSIであって、具体的には、マイクロプロセッサ、ROM、およびRAM等を備えることによって構成されるコンピュータシステムである。コンピュータプログラムはRAMに格納される。上記システムLSIは、上記コンピュータプログラムに応じたマイクロプロセッサの動作を介して機能する。
さらに、上記各装置を構成する構成要素の各手段は、別個のチップであってもよいし、その1部または全てを備える1つのチップで構成されてもよい。さらに、ここではシステムLSIが言及されているが、これは例であって、集積度の違いによって、指定IC、LSI、スーパーLSI、およびウルトラLSIを用いてもよい。
さらに、回路の集積方法は、LSIに限定されておらず、専用回路または汎用プロセッサを用いて実現してもよい。また、LSIの製造後にプログラムミング可能なFPGA(Field Programmable Gate Array)や、LSIにおける回路セルの接続や設定が再構築可能な再構築可能プロセッサを用いてもよい。
さらに、半導体技術やその他技術の発展による集積回路技術がLSIに取って代わる場合、当該技術を構成要素の集積の実行に用いることができる。バイオ技術の適用が期待されている。
(3)各装置を構成する構成要素の一部または全ては、上記装置または独立型モジュールから取り付け可能なICカードとして構成されてもよい。上記ICカードやモジュールは、マイクロプロセッサ、ROM、およびRAM等から構成されるコンピュータシステムである。上記ICカードやモジュールは超多機能LSIに含まれてもよい。上記ICカードやモジュールは、コンピュータプログラムに応じた、マイクロプロセッサの動作を介して機能する。上記ICカードやモジュールは耐タンパ性を持っていてもよい。
(4)本発明は、コンピュータを用いた上記記載の方法を実現するためのコンピュータプログラムであってもよく、上記コンピュータプログラムを含むデジタル信号であってもよい。
さらに、本発明は、コンピュータプログラムまたはデジタル信号を、フレキシブルディスク、ハードディスク、CD−ROM(Compact Disk Read Only Memory)、MO(Magneto-Optical disk)、DVD(Digital Versatile Disk)、DVD−ROM、DVD−RAM、BD(Blu-ray Disc)、HD−DVD(High Definition DVD)、および半導体メモリ等のコンピュータで読み取り可能な記録媒体に格納することによって実現することができる。さらに、本発明は、これらの記録媒体に記録されたデジタル信号を含む。
また、本発明は、電話線、無線又は有線伝送路、インターネットに代表されるネットワーク、データ放送等を介した、上記コンピュータプログラムまたはデジタル信号の送信によって実現することができる。
本発明は、上記コンピュータプログラムに応じて作動するマイクロプロセッサ、および上記コンピュータプログラムを記録するメモリを備えるコンピュータシステムであってもよい。
さらに、上記記録媒体にプログラムまたはデジタル信号を記録して転送する、又は上記ネットワークなどを介して転送することによって、別の独立したコンピュータシステムを用いた実行が可能となる。
(5)当業者であれば、実質的な本発明の新規教示や効果範囲内での変更が可能であろう。したがって、上記変形例や実施例の任意の組み合わせは、本発明の範疇に含まれる。
本発明の難読化支援装置は、ソースコードの適切な難読化を容易に行えるように、その難読化を十分に支援することができるという効果を奏し、例えば、高級言語で記述されたコンピュータプログラムを変換してコンパイルするような装置などに適用することができる。
本願におけるこれらの目的および他の目的や、効果、特徴は、実施の形態を示す付属図面に関する以下の説明から明確になる。当該図面において、
図1は、本発明の実施の形態における難読化支援装置を備えた難読化装置の構成を示す図である。 図2は、同上の難読化装置の動作の一例を示す図である。 図3は、同上の同期コード・データディスプレイの一例を示す図である。 図4は、同上の変換パラメータの変更を可能にするブラウザ内の処理を説明するための図である。 図5は、同上のソースコードウィンドウの他の例を示す図である。 図6は、同上のグラフィックユーザインターフェースとして出力装置に表示されるパラメータウィンドウの一例を示す図である。 図7は、同上のパラメータウィンドウの表示方法の一例を示す図である。 図8は、同上の変形例に係る難読化装置の動作の一例を示す図である。 図9は、同上の変形例に係る分析部がメトリクスを算出する処理を説明するための図である。 図10は、同上の変形例に係る同期コード・データディスプレイおよび同期メトリクス表示ディスプレイの一例を示す図である。 図11は、同上の変形例に係るメトリクスを説明するための比較的単純なコードモジュールの概要構成を示す図である。

Claims (5)

  1. プログラムの難読化を支援する難読化支援装置であって、
    高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する分析手段と、
    前記ソースコードのうちの前記対象部分のみを難読化するために用いられた難読化パラメータを取得する取得手段と、
    前記分析手段により特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化パラメータとを関連付けて表示手段に表示させる表示制御手段と、
    ユーザによる操作を受け付ける入力手段と、
    前記入力手段により受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御手段と
    を備えることを特徴とする難読化支援装置。
  2. 前記取得手段は、さらに、前記変更された難読化パラメータを取得し、
    前記表示制御手段は、さらに、前記ソースコードの対象部分と、更新された前記難読化コードの対象部分と、前記変更された難読化パラメータとを関連付けて前記表示手段に表示させる
    ことを特徴とする請求項1記載の難読化支援装置。
  3. 難読化支援装置がプログラムの難読化を支援する難読化支援方法であって、
    前記難読化支援装置は、分析手段と、取得手段と、表示制御手段と、入力手段と、難読化制御手段とを備え、
    前記難読化支援方法は、
    前記分析手段が、高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する特定ステップと、
    前記取得手段が、前記ソースコードのうちの前記対象部分のみを難読化するために用いられた難読化パラメータを取得する取得ステップと、
    前記表示制御手段が、前記特定ステップで特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化パラメータとを関連付けて表示手段に表示させる表示制御ステップと、
    前記入力手段が、ユーザによる操作を受け付ける入力ステップと、
    前記難読化制御手段が、前記入力ステップにより受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御ステップと
    を含むことを特徴とする難読化支援方法。
  4. 処理対象プログラムの難読化を支援するためのプログラムであって、
    高級言語で記述された処理対象プログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する特定ステップと、
    前記ソースコードのうちの前記対象部分のみを難読化するために用いられた難読化パラメータを取得する取得ステップと、
    前記特定ステップで特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得ステップで取得された難読化パラメータとを関連付けて表示手段に表示させる表示制御ステップと、
    ユーザによる操作を受け付ける入力ステップと、
    前記入力ステップにより受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御ステップと
    をコンピュータに実行させることを特徴とするプログラム。
  5. プログラムの難読化を支援する集積回路であって、
    高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する分析手段と、
    前記ソースコードのうちの前記対象部分のみを難読化するために用いられた難読化パラメータを取得する取得手段と、
    前記分析手段により特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化パラメータとを関連付けて表示手段に表示させる表示制御手段と、
    ユーザによる操作を受け付ける入力手段と、
    前記入力手段により受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御手段と
    を備えることを特徴とする集積回路。
JP2009502371A 2007-01-18 2008-01-17 難読化支援装置、難読化支援方法、プログラムおよび集積回路 Active JP5133973B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009502371A JP5133973B2 (ja) 2007-01-18 2008-01-17 難読化支援装置、難読化支援方法、プログラムおよび集積回路

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2007009622 2007-01-18
JP2007009622 2007-01-18
PCT/JP2008/050922 WO2008088073A1 (en) 2007-01-18 2008-01-17 Obfuscation assisting apparatus
JP2009502371A JP5133973B2 (ja) 2007-01-18 2008-01-17 難読化支援装置、難読化支援方法、プログラムおよび集積回路

Publications (2)

Publication Number Publication Date
JP2010517119A JP2010517119A (ja) 2010-05-20
JP5133973B2 true JP5133973B2 (ja) 2013-01-30

Family

ID=39272160

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009502371A Active JP5133973B2 (ja) 2007-01-18 2008-01-17 難読化支援装置、難読化支援方法、プログラムおよび集積回路

Country Status (3)

Country Link
US (1) US9589115B2 (ja)
JP (1) JP5133973B2 (ja)
WO (1) WO2008088073A1 (ja)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5277825B2 (ja) * 2008-09-18 2013-08-28 富士ゼロックス株式会社 プログラム難読化装置及び難読化プログラム
WO2011116448A1 (en) * 2010-03-25 2011-09-29 Irdeto Canada Corporation System and method for dynamic, variably-timed operation paths as a resistance to side channel and repeated invocation attacks
EP2598987B1 (en) * 2010-07-29 2019-03-06 Irdeto B.V. System and method for efficiently deploying massively diverse program instances to resist differential attacks
US8683452B1 (en) * 2010-12-21 2014-03-25 Emc Corporation Dynamically obfuscated javascript
US9280377B2 (en) 2013-03-29 2016-03-08 Citrix Systems, Inc. Application with multiple operation modes
US9143530B2 (en) 2011-10-11 2015-09-22 Citrix Systems, Inc. Secure container for protecting enterprise data on a mobile device
US20140032733A1 (en) 2011-10-11 2014-01-30 Citrix Systems, Inc. Policy-Based Application Management
US9215225B2 (en) 2013-03-29 2015-12-15 Citrix Systems, Inc. Mobile device locking with context
US9774658B2 (en) 2012-10-12 2017-09-26 Citrix Systems, Inc. Orchestration framework for connected devices
US8613070B1 (en) 2012-10-12 2013-12-17 Citrix Systems, Inc. Single sign-on access in an orchestration framework for connected devices
US9516022B2 (en) 2012-10-14 2016-12-06 Getgo, Inc. Automated meeting room
US8910239B2 (en) 2012-10-15 2014-12-09 Citrix Systems, Inc. Providing virtualized private network tunnels
US20140109176A1 (en) 2012-10-15 2014-04-17 Citrix Systems, Inc. Configuring and providing profiles that manage execution of mobile applications
US9170800B2 (en) 2012-10-16 2015-10-27 Citrix Systems, Inc. Application wrapping for application management framework
US20140108793A1 (en) 2012-10-16 2014-04-17 Citrix Systems, Inc. Controlling mobile device access to secure data
US9971585B2 (en) 2012-10-16 2018-05-15 Citrix Systems, Inc. Wrapping unmanaged applications on a mobile device
US9606774B2 (en) 2012-10-16 2017-03-28 Citrix Systems, Inc. Wrapping an application with field-programmable business logic
US9021262B2 (en) * 2013-01-25 2015-04-28 Concurix Corporation Obfuscating trace data
US8954546B2 (en) 2013-01-25 2015-02-10 Concurix Corporation Tracing with a workload distributor
US9207969B2 (en) 2013-01-25 2015-12-08 Microsoft Technology Licensing, Llc Parallel tracing for performance and detail
US8997063B2 (en) 2013-02-12 2015-03-31 Concurix Corporation Periodicity optimization in an automated tracing system
US20130283281A1 (en) 2013-02-12 2013-10-24 Concurix Corporation Deploying Trace Objectives using Cost Analyses
US8924941B2 (en) 2013-02-12 2014-12-30 Concurix Corporation Optimization analysis using similar frequencies
US9116712B2 (en) * 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
US9225737B2 (en) 2013-03-15 2015-12-29 Shape Security, Inc. Detecting the introduction of alien content
US9665474B2 (en) 2013-03-15 2017-05-30 Microsoft Technology Licensing, Llc Relationships derived from trace data
US20140283038A1 (en) 2013-03-15 2014-09-18 Shape Security Inc. Safe Intelligent Content Modification
US9355223B2 (en) 2013-03-29 2016-05-31 Citrix Systems, Inc. Providing a managed browser
US9413736B2 (en) 2013-03-29 2016-08-09 Citrix Systems, Inc. Providing an enterprise application store
US9985850B2 (en) 2013-03-29 2018-05-29 Citrix Systems, Inc. Providing mobile device management functionalities
US9455886B2 (en) 2013-03-29 2016-09-27 Citrix Systems, Inc. Providing mobile device management functionalities
US10284627B2 (en) 2013-03-29 2019-05-07 Citrix Systems, Inc. Data management for an application with multiple operation modes
US9575874B2 (en) 2013-04-20 2017-02-21 Microsoft Technology Licensing, Llc Error list and bug report analysis for configuring an application tracer
US9292415B2 (en) 2013-09-04 2016-03-22 Microsoft Technology Licensing, Llc Module specific tracing in a shared module environment
US9772927B2 (en) 2013-11-13 2017-09-26 Microsoft Technology Licensing, Llc User interface for selecting tracing origins for aggregating classes of trace data
US9270647B2 (en) 2013-12-06 2016-02-23 Shape Security, Inc. Client/server security by an intermediary rendering modified in-memory objects
US8954583B1 (en) 2014-01-20 2015-02-10 Shape Security, Inc. Intercepting and supervising calls to transformed operations and objects
US9489526B1 (en) * 2014-01-21 2016-11-08 Shape Security, Inc. Pre-analyzing served content
US8893294B1 (en) 2014-01-21 2014-11-18 Shape Security, Inc. Flexible caching
US9477836B1 (en) 2014-04-23 2016-10-25 Shape Security, Inc. Content modification in served code
US9858440B1 (en) 2014-05-23 2018-01-02 Shape Security, Inc. Encoding of sensitive data
US10089216B2 (en) 2014-06-30 2018-10-02 Shape Security, Inc. Automatically determining whether a page of a web site is broken despite elements on the page that may change
US9075990B1 (en) 2014-07-01 2015-07-07 Shape Security, Inc. Reliable selection of security countermeasures
US9003511B1 (en) 2014-07-22 2015-04-07 Shape Security, Inc. Polymorphic security policy action
US9602543B2 (en) 2014-09-09 2017-03-21 Shape Security, Inc. Client/server polymorphism using polymorphic hooks
US9825995B1 (en) 2015-01-14 2017-11-21 Shape Security, Inc. Coordinated application of security policies
US9501301B2 (en) * 2015-02-26 2016-11-22 Nxp B.V. Flexible instruction sets for obfuscated virtual machines
EP3298533B1 (en) 2015-05-19 2020-01-29 Cryptomove, Inc. Security via data concealment
US10642786B2 (en) 2015-05-19 2020-05-05 Cryptomove, Inc. Security via data concealment using integrated circuits
US10664439B2 (en) 2015-05-19 2020-05-26 Cryptomove, Inc. Security via dynamic data movement in a cloud-based environment
US10230718B2 (en) 2015-07-07 2019-03-12 Shape Security, Inc. Split serving of computer code
US9807113B2 (en) 2015-08-31 2017-10-31 Shape Security, Inc. Polymorphic obfuscation of executable code
US10375026B2 (en) 2015-10-28 2019-08-06 Shape Security, Inc. Web transaction status tracking
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
JP6907847B2 (ja) * 2017-09-14 2021-07-21 日本電気株式会社 ソースプログラム保護システム及び方法
EP3467691B1 (en) * 2017-10-05 2020-08-26 Eshard Method of selecting software files
US20220179930A1 (en) * 2019-04-18 2022-06-09 RunSafe Security, Inc. Source modification engine
WO2020240246A1 (en) * 2019-05-29 2020-12-03 Commissariat A L 'energie Atomique Et Aux Energies Alternatives A computer-implemented method for obfuscating a program code
US11204985B2 (en) * 2020-03-31 2021-12-21 Irdeto Canada Corporation Systems, methods, and storage media for creating secured computer code having entangled transformations
WO2022140163A1 (en) * 2020-12-21 2022-06-30 Cryptography Research, Inc. Protection of neural networks by obfuscation of neural network operations and architecture
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
CN113761486B (zh) * 2021-09-10 2023-09-05 上海熙菱信息技术有限公司 一种基于语法糖解析的一键式代码混淆方法

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5410648A (en) * 1991-08-30 1995-04-25 International Business Machines Corporation Debugging system wherein multiple code views are simultaneously managed
US5371747A (en) 1992-06-05 1994-12-06 Convex Computer Corporation Debugger program which includes correlation of computer program source code with optimized object code
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
US5913052A (en) * 1997-01-24 1999-06-15 Lucent Technologies Inc. System and method for debugging digital signal processor software with an architectural view and general purpose computer employing the same
AU7957998A (en) * 1997-06-09 1999-01-25 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US6643775B1 (en) * 1997-12-05 2003-11-04 Jamama, Llc Use of code obfuscation to inhibit generation of non-use-restricted versions of copy protected software applications
US6480959B1 (en) * 1997-12-05 2002-11-12 Jamama, Llc Software system and associated methods for controlling the use of computer programs
US6334189B1 (en) * 1997-12-05 2001-12-25 Jamama, Llc Use of pseudocode to protect software from unauthorized use
JPH11194957A (ja) 1998-01-07 1999-07-21 Matsushita Electric Ind Co Ltd デバッグ支援装置、並列実行情報生成装置、及びこれらに適用されるプログラムを記録した記録媒体
US7809138B2 (en) * 1999-03-16 2010-10-05 Intertrust Technologies Corporation Methods and apparatus for persistent control and protection of content
US6249907B1 (en) * 1998-03-24 2001-06-19 International Business Machines Corporation Method system and article of manufacture for debugging a computer program by encoding user specified breakpoint types at multiple locations in the computer program
US6763370B1 (en) * 1998-11-16 2004-07-13 Softricity, Inc. Method and apparatus for content protection in a secure content delivery system
US7017188B1 (en) * 1998-11-16 2006-03-21 Softricity, Inc. Method and apparatus for secure content delivery over broadband access networks
US7421586B2 (en) * 1999-05-12 2008-09-02 Fraunhofer Gesselschaft Protecting mobile code against malicious hosts
US7263722B1 (en) * 1999-05-12 2007-08-28 Fraunhofer Crcg, Inc. Obfuscation of executable code
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US7287166B1 (en) * 1999-09-03 2007-10-23 Purdue Research Foundation Guards for application in software tamperproofing
US7080257B1 (en) * 2000-03-27 2006-07-18 Microsoft Corporation Protecting digital goods using oblivious checking
US7171693B2 (en) * 2000-05-12 2007-01-30 Xtreamlok Pty Ltd Information security method and system
CA2327911A1 (en) * 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
CA2348355A1 (en) * 2001-05-24 2002-11-24 Cloakware Corporation General scheme of using encodings in computations
US7007025B1 (en) * 2001-06-08 2006-02-28 Xsides Corporation Method and system for maintaining secure data input and output
WO2003003169A2 (en) * 2001-06-28 2003-01-09 Cloakware Corporation Secure method and system for biometric verification
US7502940B2 (en) * 2001-08-01 2009-03-10 Sas Validy Method to protect software against unwanted use with a “conditional branch” principle
US7343494B2 (en) * 2001-08-01 2008-03-11 Sas Validy Method to protect software against unwanted use with a “renaming” principle
US7269740B2 (en) * 2001-08-01 2007-09-11 Sas Validy Method to protect software against unwanted use with a “variable principle”
US7434064B2 (en) * 2001-08-01 2008-10-07 Sas Validy Method to protect software against unwanted use with a “elementary functions” principle
US7434068B2 (en) * 2001-10-19 2008-10-07 Intel Corporation Content protection in non-volatile storage devices
US7243340B2 (en) * 2001-11-15 2007-07-10 Pace Anti-Piracy Method and system for obfuscation of computer program execution flow to increase computer program security
CA2363795A1 (en) * 2001-11-26 2003-05-26 Cloakware Corporation Computer system protection by communication diversity
US7308576B2 (en) * 2001-12-31 2007-12-11 Intel Corporation Authenticated code module
US7509687B2 (en) * 2002-03-16 2009-03-24 Trustedflow Systems, Inc. Remotely authenticated operation method
JP2003316605A (ja) * 2002-04-26 2003-11-07 Fujitsu Ltd デバッガプログラム
JP2003337629A (ja) 2002-05-18 2003-11-28 Mitsuko Miyaji プログラム難読化方法及び装置
US7272725B2 (en) * 2002-06-25 2007-09-18 Sas Validy Method to protect software against unwanted use with a “temporal dissociation” principle
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
US7254586B2 (en) * 2002-06-28 2007-08-07 Microsoft Corporation Secure and opaque type library providing secure data protection of variables
JP2004272814A (ja) * 2003-03-11 2004-09-30 Matsushita Electric Ind Co Ltd プログラム解析コスト計測装置およびその方法
KR100568228B1 (ko) * 2003-05-20 2006-04-07 삼성전자주식회사 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치
US7454323B1 (en) * 2003-08-22 2008-11-18 Altera Corporation Method for creation of secure simulation models
US7591021B2 (en) * 2003-09-05 2009-09-15 Microsoft Corporation Object model document for obfuscating object model therein
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US7424620B2 (en) * 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US7363620B2 (en) * 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US7353499B2 (en) * 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
JP4514473B2 (ja) * 2004-02-23 2010-07-28 富士通株式会社 コンピュータシステム、中央装置及びプログラム実行方法
CN100585670C (zh) * 2004-03-31 2010-01-27 松下电器产业株式会社 一种将多个整数安全相加的计算机系统及方法
US7841009B1 (en) * 2004-07-09 2010-11-23 Angel Secure Networks System and method for defending against reverse engineering of software, firmware and hardware
US7689969B1 (en) * 2005-01-18 2010-03-30 The Mathworks, Inc. Obfuscation of automatically generated code
EP1850261A1 (en) * 2005-02-10 2007-10-31 Matsushita Electric Industrial Co., Ltd. Program conversion device and program execution device
JP4675642B2 (ja) * 2005-02-22 2011-04-27 Kddi株式会社 プログラム難読化装置およびその方法ならびにプログラム
JP4796050B2 (ja) * 2005-02-25 2011-10-19 パナソニック株式会社 セキュア処理装置、及びセキュア処理システム
US7587616B2 (en) * 2005-02-25 2009-09-08 Microsoft Corporation System and method of iterative code obfuscation
US20080168562A1 (en) 2005-02-25 2008-07-10 Tomoyuki Haga Secure Processing Device and Secure Processing System
JP4814319B2 (ja) * 2006-04-24 2011-11-16 パナソニック株式会社 データ処理装置、方法、プログラム、集積回路、プログラム生成装置
US8176473B2 (en) * 2007-05-14 2012-05-08 Microsoft Corporation Transformations for software obfuscation and individualization

Also Published As

Publication number Publication date
US20100180346A1 (en) 2010-07-15
JP2010517119A (ja) 2010-05-20
US9589115B2 (en) 2017-03-07
WO2008088073A1 (en) 2008-07-24

Similar Documents

Publication Publication Date Title
JP5133973B2 (ja) 難読化支援装置、難読化支援方法、プログラムおよび集積回路
Fard et al. Jsnose: Detecting javascript code smells
Marinescu et al. KATCH: High-coverage testing of software patches
US20110314337A1 (en) Method and Apparatus for Locating Input-Model Faults Using Dynamic Tainting
Zhang et al. Alchemist: A transparent dependence distance profiling infrastructure
US8370810B2 (en) Debugging device and debugging method
Meinicke et al. An overview on analysis tools for software product lines
Nadi et al. The Linux kernel: A case study of build system variability
Pereira et al. SPELLing out energy leaks: Aiding developers locate energy inefficient code
Angerer et al. Configuration-aware change impact analysis (t)
JP2003044275A (ja) 変更危険度測定システム、変更危険度測定方法及び変更危険度測定プログラム
Wedyan et al. A dataflow testing approach for aspect-oriented programs
Georgiou et al. Lost in translation: Exposing hidden compiler optimization opportunities
Yang et al. EdSynth: Synthesizing API sequences with conditionals and loops
Marcozzi et al. Taming coverage criteria heterogeneity with LTest
Horn The TTC 2013 flowgraphs case
US8756580B2 (en) Instance-based field affinity optimization
Molitorisz et al. Patty: A pattern-based parallelization tool for the multicore age
Cojocar et al. Jtr: A binary solution for switch-case recovery
Nobre et al. Nonio—modular automatic compiler phase selection and ordering specialization framework for modern compilers
JP5974444B2 (ja) 情報処理システム、情報処理方法、情報処理プログラム、記録媒体
Yang Measuring indirect coupling
Vysocky et al. Overview of application instrumentation for performance analysis and tuning
Fesefeldt et al. Automated Checking and Completion of Backward Confluence for Hyperedge Replacement Grammars
Tang et al. CLC: A cross-level program characterization method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101124

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120424

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120613

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120710

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120831

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121108

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151116

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5133973

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150