(57)【要約】  ソースコード（１００）の適切な難読化を容易に行えるように、その難読化を十分に支援することができる難読化支援装置（１１）を提供する。難読化支援装置（１１）は、ソースコード（１００）と、そのソースコード（１００）を難読化することにより生成される変換済コード（１０４）とのそれぞれで対応しているブロックを特定する分析部（１１４）と、ソースコード（１００）および変換済コード（１０４）のそれぞれのブロックにおける難読化に関する難読化情報を取得し、ソースコード（１００）および難読化コードのそれぞれのブロックと難読化情報とを関連付けて出力装置（１００２）に表示させるブラウザ（１１９）とを備える。
2010517119.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの難読化を支援する難読化支援装置であって、
高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する分析手段と、
前記ソースコードの対象部分を難読化するために用いられた難読化パラメータを取得する取得手段と、
前記分析手段により特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化パラメータとを関連付けて表示手段に表示させる表示制御手段と、
ユーザによる操作を受け付ける入力手段と、
前記入力手段により受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御手段と
を備えることを特徴とする難読化支援装置。
【請求項２】
前記取得手段は、さらに、前記変更された難読化パラメータを取得し、
前記表示制御手段は、さらに、前記ソースコードの対象部分と、更新された前記難読化コードの対象部分と、前記変更された難読化パラメータとを関連付けて前記表示手段に表示させる
ことを特徴とする請求項１記載の難読化支援装置。
【請求項３】
プログラムの難読化を支援する難読化支援装置であって、
高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する分析手段と、
前記ソースコードおよび難読化コードのそれぞれの前記対象部分における難読化に関する難読化情報を取得する取得手段と、
前記分析手段により特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化情報とを関連付けて表示手段に表示させる表示制御手段と、
前記難読化コードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出するメトリクス算出手段とを備え、
前記取得手段は、前記メトリクス算出手段により算出されたメトリクスを前記難読化情報として取得する
ことを特徴とする難読化支援装置。
【請求項４】
前記メトリクス算出手段は、
前記分析手段によって特定される前記難読化コードの対象部分が変更されるごとに、当該対象部分に対するメトリクスを算出して記録媒体に格納することにより、前記メトリクスの履歴を作成する
ことを特徴とする請求項３記載の難読化支援装置。
【請求項５】
前記表示制御手段は、さらに、
前記メトリクス算出手段により作成された前記履歴を前記表示手段に表示させる
ことを特徴とする請求項４記載の難読化支援装置。
【請求項６】
前記難読化支援装置は、さらに、
前記難読化コードをコンパイルすることにより生成されたオブジェクトコードを実行する実行手段を備え、
前記分析手段は、
前記オブジェクトコードのうち前記実行手段により実行されている部分に対応する、前記ソースコードおよび難読化コードのそれぞれの部分を、前記ソースコードおよび難読化コードのそれぞれの対象部分として特定することにより、前記実行手段による前記オブジェクトコードの実行の進行に伴って、特定する前記対象部分を変更する
ことを特徴とする請求項５記載の難読化支援装置。
【請求項７】
前記実行手段は、
前記履歴により示される、前記メトリクス算出手段により最後に算出されたメトリクスの値が、予め定められたしきい値よりも小さくなると、前記オブジェクトコードの実行を停止する、または、前記メトリクスの値が予め定められたしきい値よりも大きくなると、前記オブジェクトコードの実行を停止する
ことを特徴とする請求項６記載の難読化支援装置。
【請求項８】
前記メトリクス算出手段は、さらに、
前記ソースコードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出し、
前記表示制御手段は、さらに、
前記ソースコードのメトリクスを、前記ソースコードおよび難読化コードのそれぞれの対象部分に関連付けて表示させる
ことを特徴とする請求項４記載の難読化支援装置。
【請求項９】
前記メトリクス算出手段は、
前記難読化コードの対象部分にある変数のうち有効に使用されている変数の数を前記メトリクスとして算出する
ことを特徴とする請求項４記載の難読化支援装置。
【請求項１０】
前記メトリクス算出手段は、
前記難読化コードの対象部分にある変数のうち有効に使用されている変数の割合を前記メトリクスとして算出する
ことを特徴とする請求項４記載の難読化支援装置。
【請求項１１】
前記メトリクス算出手段は、
前記難読化コードの対象部分にある変数のうち有効に使用されている変数の平均ライフタイムを前記メトリクスとして算出する
ことを特徴とする請求項４記載の難読化支援装置。
【請求項１２】
プログラムの難読化を支援する難読化支援方法であって、
高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する特定ステップと、
前記ソースコードの対象部分を難読化するために用いられた難読化パラメータを取得する取得ステップと、
前記分析ステップで特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化パラメータとを関連付けて表示手段に表示させる表示制御ステップと、
ユーザによる操作を受け付ける入力ステップと、
前記入力ステップにより受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御ステップと
を含むことを特徴とする難読化支援方法。
【請求項１３】
処理対象プログラムの難読化を支援するためのプログラムであって、
高級言語で記述された処理対象プログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する特定ステップと、
前記ソースコードの対象部分を難読化するために用いられた難読化パラメータを取得する取得ステップと、
前記分析ステップで特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化パラメータとを関連付けて表示手段に表示させる表示制御ステップと、
ユーザによる操作を受け付ける入力ステップと、
前記入力ステップにより受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御ステップと
をコンピュータに実行させることを特徴とするプログラム。
【請求項１４】
プログラムの難読化を支援する集積回路であって、
高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する分析手段と、
前記ソースコードの対象部分を難読化するために用いられた難読化パラメータを取得する取得手段と、
前記分析手段により特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化パラメータとを関連付けて表示手段に表示させる表示制御手段と、
ユーザによる操作を受け付ける入力手段と、
前記入力手段により受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御手段と
を備えることを特徴とする集積回路。
【請求項１５】
プログラムの難読化を支援する難読化支援方法であって、
高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する特定ステップと、
前記ソースコードおよび難読化コードのそれぞれの前記対象部分における難読化に関する難読化情報を取得する取得ステップと、
前記分析ステップで特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化情報とを関連付けて表示手段に表示させる表示制御ステップと
前記難読化コードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出するメトリクス算出ステップとを含み、
前記取得ステップでは、前記メトリクス算出ステップにより算出されたメトリクスを前記難読化情報として取得する
ことを特徴とする難読化支援方法。
【請求項１６】
処理対象プログラムの難読化を支援するためのプログラムであって、
高級言語で記述された処理対象プログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する特定ステップと、
前記ソースコードおよび難読化コードのそれぞれの前記対象部分における難読化に関する難読化情報を取得する取得ステップと、
前記分析ステップで特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化情報とを関連付けて表示手段に表示させる表示制御ステップと
前記難読化コードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出するメトリクス算出ステップとをコンピュータに実行させ、
前記取得ステップでは、前記メトリクス算出ステップにより算出されたメトリクスを前記難読化情報として取得する
ことを特徴とするプログラム。
【請求項１７】
プログラムの難読化を支援する集積回路であって、
高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する分析手段と、
前記ソースコードおよび難読化コードのそれぞれの前記対象部分における難読化に関する難読化情報を取得する取得手段と、
前記分析手段により特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化情報とを関連付けて表示手段に表示させる表示制御手段と、
前記難読化コードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出するメトリクス算出手段とを備え、
前記取得手段は、前記メトリクス算出手段により算出されたメトリクスを前記難読化情報として取得する
ことを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラムが不正に解読されたり改竄されたりすることを防止するために実行されるそのコンピュータプログラムの難読化を支援する難読化支援装置に関する。
【背景技術】
【０００２】
ソフトウェアアプリケーションは、開発者のビジネスプランに沿ったアプリケーションの実施や使用を保証するために不可欠ないくつかの特徴を備えている。例えば、ドングルのような装置がソフトウェアのライセンシング方法を実施するために長年用いられてきたが、近年では、消費者が、確実にコンテンツライセンシング方法に従って音楽や映像、書面といったデジタルコンテンツを利用するような、ソフトウェアにおけるデジタル著作権管理（ＤＲＭ：digital rights management）方法が用いられている。これらの特徴を実現するアルゴリズムはハッカーによる攻撃に対してロバストである必要がある。そのため、プログラムに対する多数のコード難読化方法が提案され、その多くが商品化されている（例えば、非特許文献１：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）参照）。ここで、コード難読化方法とは、基本的には、オリジナルのプログラムコードを、理解および変更が困難なコードに書き換えるといった変換方法を意味する。
【０００３】
一回の試みで十分に難解なコードを生成することは難しい。そこで、十分に難解なコードを生成するために、難解化処理を制御するパラメータをチューニングする必要がある。しかしながら、このチューニングは非常に面倒な処理である。なぜなら、コードを実行してその実行結果を分析しない限りは、上記チューニングによって難読化が向上したかどうかをユーザが容易に認識することはできないからである。
【０００４】
つまり、従来の難読化支援装置は、ソースコードが難読化されてさらにコンパイルされたオブジェクトコードが実行された結果を解析し、その解析結果をユーザに提示する。そして、難読化支援装置は、ユーザからの操作に応じて、上述のパラメータをチューニングする。このようにパラメータのチューニングが実行されると、そのソースコードは再びそのチューニングされたパラメータに従って難読化される。
【０００５】
また、コンパイラやデバッガプログラムなどが提案されている（例えば、非特許文献２：Steven S. Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufmann Publishers, 1997.および３：A. V. Aho, R. Sethi and J. Ullman, Compilers, Principles, Techniques and Tools, Addison Wellsey, 1986.、並びに特許文献１：米国特許第５３７１７４７号明細書参照）。
【０００６】
上記特許文献１は、実行済みのコードのライン数に関する情報を表示することによって、最適化されたコードのデバッギングを補助する方法を開示している。この方法では、ソースコードおよび対応する機械言語コードが、それらの相関関係を示すように表示される。特許文献１は機械言語コードのデバッキングをとりまく、いくつかの問題について着目しているが、変更の質を十分に評価するためには、さらに幾つかの必要な要件がある。
【発明の開示】
【０００７】
しかしながら、上記従来の難読化支援装置では、ソースコードの難読化を十分に支援することができないという問題がある。つまり、上記特許文献１などの技術を難読化支援装置に適用しても、難読化されたコードと機械言語コードとが表示されるだけであって、ユーザはそれらのコード間の関係しか把握することができない。したがって、ユーザは、上述のように、機械言語コードをコンピュータに実行させ、難読化支援装置にその実行結果を解析させ、さらに、その解析結果に基づいて再びソースコードの難読化をコンピュータに実行させる。ユーザは、このような一連の処理を、難読化が適切なレベルに達するまで繰り返す必要がある。つまり、従来の難読化支援装置では、適切な難読化に手間がかかってしまう。
【０００８】
そこで、本発明は、かかる問題に鑑みてなされたものであって、ソースコードの適切な難読化を容易に行えるように、その難読化を十分に支援することができる難読化支援装置を提供することを目的とする。
【０００９】
上記目的を達成するために、本発明に係る難読化支援装置は、プログラムの難読化を支援する難読化支援装置であって、高級言語で記述されたプログラムであるソースコードと、前記ソースコードを難読化することにより生成される高級言語で記述された難読化コードとのそれぞれで対応している対象部分を特定する分析手段と、前記ソースコードおよび難読化コードのそれぞれの前記対象部分における難読化に関する難読化情報を取得する取得手段と、前記分析手段により特定された前記ソースコードおよび難読化コードのそれぞれの対象部分と、前記取得手段により取得された難読化情報とを関連付けて表示手段に表示させる表示制御手段とを備えることを特徴とする。例えば、前記取得手段は、前記ソースコードの対象部分を難読化するために用いられた難読化パラメータを前記難読化情報として取得する。
【００１０】
これにより、ソースコードおよび難読化コードのそれぞれの対象部分と、それらの対象部分についての難読化情報とが関連付けて表示されるため、ユーザは、一方のコードの一部分が他方のコードの何れの部分に該当するかを容易に把握することができるとともに、それらの部分を容易に対比することができる。さらに、ユーザは、それらの部分における難読化パラメータなどの難読化情報も容易に把握することができる。その結果、ユーザは、その把握した内容に基づいて、再度、コンピュータにソースコードを難読化させて、そのソースコードの適切な難読化を容易に実行させることができる。したがって、ソースコードの難読化を十分に支援することができる。
【００１１】
また、前記難読化支援装置は、さらに、ユーザによる操作を受け付ける入力手段と、前記入力手段により受け付けられた操作に応じて、前記表示手段に表示されている難読化パラメータを変更し、変更された難読化パラメータに従って前記ソースコードの対象部分をコンピュータに難読化させることにより、前記難読化コードの対象部分を更新させる難読化制御手段を備えることを特徴としてもよい。
【００１２】
これにより、ユーザによる操作に応じて、難読化パラメータが変更されるため、ユーザは、表示されている難読化パラメータと、その難読化パラメータが適用されたソースコードおよび難読化コードのそれぞれの対象部分とを確認して、その確認した内容に基づいてその難読化パラメータを容易に且つ適切に変更することができる。さらに、その変更された難読化パラメータに従ってソースコードの対象部分が再び難読化されるため、ユーザは、ソースコードの対象部分を簡単に且つ適切に難読化させることができる。つまり、ユーザは、難読化の機能を有するコンピュータをわざわざ操作して、変更された難読化パラメータが適用されるべき部分などをそのコンピュータに指定して再び難読化させるような手間を省くことができる。例えば、ユーザは、表示されているソースコードおよび難読化コードのそれぞれの対象部分を見て、十分な難読化が行われていないと判断すると、難読化のレベルを増加させるように難読化パラメータを容易に変更することができる。つまり、本発明では、難読化パラメータの適切で容易なチューニングおよび設定を実現することができる。
【００１３】
また、前記取得手段は、さらに、前記変更された難読化パラメータを取得し、前記表示制御手段は、さらに、前記ソースコードの対象部分と、更新された前記難読化コードの対象部分と、前記変更された難読化パラメータとを関連付けて前記表示手段に表示させることを特徴としてもよい。
【００１４】
これにより、ユーザは、表示されているソースコードの対象部分と、随時更新されて表示される難読化コードの対象部分とを確認しながら、カットアンドトライで難読化パラメータをチューニングすることができ、さらに適切な難読化パラメータを設定することができる。
【００１５】
また、前記分析手段は、さらに、前記難読化コードをコンパイルすることより生成されたオブジェクトコードのうち、前記ソースコードおよび難読化コードのそれぞれの前記対象部分に対応している部分を、前記オブジェクトコードの対象部分として特定し、前記表示制御手段は、さらに、前記オブジェクトコードの対象部分を、前記ソースコードおよび難読化コードのそれぞれの対象部分と関連付けて前記表示手段に表示させることを特徴としてもよい。
【００１６】
これにより、ソースコード、難読化コードおよびオブジェクトコードのそれぞれで対応している部分が対象部分として関連付けて表示されるため、ユーザは、何れかの１つのコードの一部分が他の２つのコードの何れの部分に該当するかを容易に把握することができ、それらの部分を容易に対比することができる。
【００１７】
また、前記難読化支援装置は、さらに、前記オブジェクトコードを実行する実行手段を備え、前記分析手段は、前記オブジェクトコードのうち前記実行手段により実行されている部分を前記対象部分として特定し、前記オブジェクトコードの対象部分に対応する、前記ソースコードおよび難読化コードのそれぞれの部分を、前記ソースコードおよび難読化コードのそれぞれの対象部分として特定することを特徴としてもよい。
【００１８】
これにより、現在実行されている、ソースコード、難読化コードおよびオブジェクトコードのそれぞれの対象部分と難読化情報とが表示され、オブジェクトコードの実行にしたがって、それらの対象部分および難読化情報の表示が更新される。したがって、ユーザは、実行順序に沿って、各コードの対象部分を対比することができるとともに、それらの対象部分の難読化情報を把握することができる。
【００１９】
また、前記分析手段は、さらに、前記ソースコード、難読化コードおよびオブジェクトコードのそれぞれの対象部分に記述されている、前記実行手段により実行されている命令に関連する記号を特定し、前記表示制御手段は、さらに、前記分析手段により特定された記号を示すインジケータを前記表示手段に表示させることを特徴としてもよい。
【００２０】
これにより、各コードの対象部分の中で互いに対応して実行されている部分が、インジケータによってより詳細に示されるため、ユーザはより詳細に各コードを対比することができる。例えば、複数の記号からなるラインや、複数の記号からなる命令、コードを構成する単位（コード単位）などがインジケータにより示される。このようなインジケータは、例えば記号に対する下線や、記号の表示色、記号のフォントである。
【００２１】
また、前記難読化支援装置は、さらに、前記難読化コードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出するメトリクス算出手段を備え、前記取得手段は、前記メトリクス算出手段により算出されたメトリクスを前記難読化情報として取得することを特徴としてもよい。
【００２２】
これにより、難読化コードの対象部分についてメトリクスが、ソースコードおよび難読化コードのそれぞれの対象部分に関連付けて表示されるため、ユーザは、その難読化コードの対象部分における難読化のレベルを容易に把握することができる。
【００２３】
また、前記メトリクス算出手段は、前記分析手段によって特定される前記難読化コードの対象部分が変更されるごとに、当該対象部分に対するメトリクスを算出して記録媒体に格納することにより、前記メトリクスの履歴を作成することを特徴としてもよい。例えば、前記表示制御手段は、さらに、前記メトリクス算出手段により作成された前記履歴を前記表示手段に表示させる。
【００２４】
これにより、ユーザは、対象部分が変わるごとに、メトリクスの変化を確認することができ、難読化のレベルが不適切な部分を容易に見つけ出すことができる。
【００２５】
また、前記難読化支援装置は、さらに、前記難読化コードをコンパイルすることにより生成されたオブジェクトコードを実行する実行手段を備え、前記分析手段は、前記オブジェクトコードのうち前記実行手段により実行されている部分に対応する、前記ソースコードおよび難読化コードのそれぞれの部分を、前記ソースコードおよび難読化コードのそれぞれの対象部分として特定することにより、前記実行手段による前記オブジェクトコードの実行の進行に伴って、特定する前記対象部分を変更することを特徴としてもよい。
【００２６】
これにより、現在実行されている、ソースコードおよび難読化コードのそれぞれの対象部分とメトリクスとが表示され、オブジェクトコードの実行にしたがって、それらの対象部分およびメトリクスの表示が更新される。したがって、ユーザは、実行順序に沿って、各コードの対象部分を対比することができるとともに、そのメトリクスを容易に把握することができる。
【００２７】
また、前記実行手段は、前記履歴により示される、前記メトリクス算出手段により最後に算出されたメトリクスの値が、予め定められたしきい値よりも小さくなると、前記オブジェクトコードの実行を停止する、または、前記メトリクスの値が予め定められたしきい値よりも大きくなると、前記オブジェクトコードの実行を停止することを特徴としてもよい。
【００２８】
これにより、メトリクスの値がしきい値よりも小さくまたは大きくなった時点で、そのメトリクスに対応する、ソースコードおよび難読化コードのそれぞれの対象部分が表示された状態で停止するため、難読化のレベルが不適切な部分をユーザに対して提示することができ、ユーザに対する使い勝手をさらに向上することができる。
【００２９】
また、前記メトリクス算出手段は、さらに、前記ソースコードの対象部分を解読することの難しさの程度または質を示すメトリクスを算出し、前記表示制御手段は、さらに、前記ソースコードのメトリクスを、前記ソースコードおよび難読化コードのそれぞれの対象部分に関連付けて表示させることを特徴としてもよい。
【００３０】
これにより、ソースコードのメトリクスと、難読化コードのメトリクスとが表示されるため、ユーザはそれらのメトリクスを対比して、難読化コードの対象部分がソースコードの対象部分からどれだけ難読化されたかを容易に把握することができる。
【００３１】
例えば、前記メトリクス算出手段は、前記難読化コードの対象部分にある変数のうち有効に使用されている変数の数を前記メトリクスとして算出する。または、前記メトリクス算出手段は、前記難読化コードの対象部分にある変数のうち有効に使用されている変数の割合を前記メトリクスとして算出する。または、前記メトリクス算出手段は、前記難読化コードの対象部分にある変数のうち有効に使用されている変数の平均ライフタイムを前記メトリクスとして算出する。
【００３２】
これにより、難読化コードの対象部分について、特定の観点から見た難読化のレベルが表示されるため、ユーザはその観点における難読化のレベルを容易に把握することができる。
【００３３】
また、前記難読化支援装置は、さらに、ユーザによる操作を受け付ける入力手段を備え、前記分析手段は、前記入力手段により受け付けられた操作に応じて、前記ソースコードおよび難読化コードのそれぞれの対象部分を特定することを特徴としてもよい。
【００３４】
これにより、ユーザは、例えば、ソースコードおよび難読化コードの何れか一方における所望の部分を対象部分として指定し、その指定された部分に対応する他方のコードの対象部分を表示させることができ、ユーザの使い勝手を向上することができる。
【００３５】
なお、背景技術において、変換済コード（難読化コード）からデバッグ情報をユーザに提示する方法、および変換済コードの質を算出する方法が示されているが、これら２つの要素をどのように組み合わせることができるかについては示唆されていない。さらに、変換（難読化）前と後のコードを監視することで、変換（難読化）処理を制御するという考えは、背景技術には開示されていない。
【００３６】
特定の変換の質は、メトリクスによって測定され、変換済コードにおける特定のラインに対して、メトリクスのセットは、実行処理中のある時点におけるコードの質を示すために評価することが可能である。
【００３７】
変換処理の質が、プログラムの現実行時点に対応する、オブジェクトコード、（オブジェクトコードと異なる場合は）変換済コード、およびソースコード、さらに上記メトリクスによって示されれば、ユーザは変換処理の質に関して判定を行うことができるので、上記処理のパラメータを調整することができる。
【００３８】
したがって、変換結果の確認中に変換の質をユーザが定量化できるように、オブジェクトコード、変換済コード、およびソースコード（オリジナルコード）との間の関係、例えば、オリジナルコード中のオペレータとオペランドの状態、特にオペレータとオペランドが既に計算済みであるかが視覚化されて、ユーザに示されるようなシステムまたは方法は非常に有用であり、その需要は高い。
【００３９】
また、ユーザが難読化の質を調整することができるように、現検査時点においてコードの変換パラメータ（難読化パラメータ）を必要に応じて変更することができるシステムおよび方法は非常に有用であり、その需要は高い。
【００４０】
さらに、現在検査対象となっているコードのある時点に対して、実行処理中の当該時点における１又は複数のオブジェクトコード、変換済コード、およびソースコードの複雑度または質を示すメトリクスを表示するシステムおよび方法は非常に有用であり、その需要は高い。
【００４１】
また、変換（難読化）およびコード生成処理（コンパイル）において、使用されたコード文および変数の観点から入力データから出力データへのマッピングに関する追加情報（コード・変数動き情報）の生成を保証することで、オブジェクトコード、変換済コード、およびソースコード間の関係が表示される。この追加情報は、分析方法によって処理される。実行コード内のあるロケーションに注目した場合、上記分析方法は、変換済コードおよびソースコードにおいて対応するロケーションを検出し、オブジェクトコードレジスタとメモリの使用状況から、変換済の変数および数式へのマッピングを検出し、その変数および数式から、オリジナルの変数および数式へのマッピングを検出するので、オリジナル変数の算出状態および数式を表示することができる。
【００４２】
また、オブジェクトコードからソースコードへのマッピングが一度行われると、現在検査の対象となっているコードに対する変換パラメータの有効なセットを決定し、新規変換パラメータを設定するために操作可能なインターフェースをユーザに表示することによって、変換パラメータの調整が行われる。
【００４３】
また、オブジェクトコードからソースコードへのマッピングが一度行われると、オブジェクトコード、変換済コード、およびソースコードの１つ以上について、実行フローにおける特定の箇所の複雑度または質を示すメトリクスのセット、コードの現在有効なライン、または、変換処理において１対１関係がない場合にはコードのブロック、および、モジュール全体と関連して上記コードのラインまたはブロックを特徴付けるメトリクスのセットが算出されて表示される。
【００４４】
なお、本発明は、このような難読化支援装置として実現することができるだけでなく、その難読化支援装置がソースコードを難読化する方法や、その難読化をコンピュータに実行させるためのプログラム、そのプログラムを格納する記憶媒体、難読化支援装置としての機能を実現する集積回路としても実現することができる。
【００４５】
本発明の難読化支援装置は、ソースコードの適切な難読化を容易に行えるように、その難読化を十分に支援することができるという作用効果を奏する。その結果、難読化の質を向上することができる。
【００４６】
（本願の背景技術に関する詳細情報）
２００７年１月１８日に出願された、明細書と図面と請求項とを含む日本国特許出願番号２００７‐００９６２２を本願に引用して援用する。
【発明を実施するための最良の形態】
【００４７】
以下、本発明の実施の形態における難読化支援装置について図面を参照しながら説明する。
【００４８】
なお、本実施の形態では、難読化の評価および適用に人的要因を付加するシステムについて説明するが、本発明は、難読化に限らず、最適化およびその他のコード変換技術などにも適用することができる。本発明では、変換（難読化）前と後のプログラムコードおよびデータを比較し、ランニングコードを特徴付けるメトリクスを表示することによって、ユーザは、判定および算出後の性能に基づいて、変換パラメータを調整することができる。これによって、変換の質を向上することができる。
【００４９】
１．用語
以降使用される用語は、以下の意味を有する。それ以外を意味する場合は、具体的に説明される。
【００５０】
「メトリクス」とは、検査されたコードがいくつかの評価基準を満たす割合を示す値である。例えば、ソースコードを測定する一般的なメトリクスの１つに、関数ごとのライン数がある。上記数値は単独ではあまり意味をなさないが、２つの関数を比較することで、比較結果から、コードが最適化されたかを認識することができる（例えば、上記の場合、メトリクスが低ければ、最適化の評価基準は良くなる）。本発明で用いられるその他のメトリクスについては後に述べる。
【００５１】
「基本ブロック」とは、オリジナルモジュール内のコードのラインに対応する１または複数の実行可能な文である。本実施の形態において、各基本ブロックは、１つのベーシックブロックを示し、ベーシックブロックは、１つのエントリーポイント（つまり、当該ベーシックブロック内のコードは飛び越し命令の目的地であるコードではない）、および１つのエグジットポイントを有し、飛び越し命令を含まないコードである。その他、本実施の形態においては、必要に応じて粗いブロックまたは細かいブロックを用いてもよく、複数のコードラインから成るそれぞれ別個のグループであってもよい。
【００５２】
「コード単位」とは、プログラムコードの解析木の完全な分岐である。解析木とは、方式的文法に従ったソースコードの構文構造を示す木であり、この木の完全な分岐とは、解析木において選択されたノードおよびそのノード以下の全てのノードである。各モジュールは、１または複数のコード単位を有しており、解析木における特定の１つのノードは、１または複数のコード単位内であってもよい。例えば、「ａ＝（ｂ＊ｃ）＋１；」である場合、多数のコード単位が存在する。各オペランドや、「ｂ＊ｃ」および「（ｂ＊ｃ）＋１」がコード単位であってもよく、１文であってもよい。上記のように、コード単位は基本ブロックとの重複が認められるが、本発明において、２つの概念は異なる用途を有しており、区別される。
【００５３】
「難読化（obfuscation）」、「難読化変換」、もしくは「難読化する（obfuscating）」とは、コード本来の意味を隠すために、意味を変えずに、例えばより複雑化することで、プログラムコードの変換を行うことである。変換済コードの複雑度等を理解するために、難読化コードのメトリクス、またはオリジナルと難読化プログラムを同時に分析することによって、難読化の測定が可能である。
【００５４】
「最適化」、「最適化変換」、または「最適化する」とは、プログラムコードの性能を高めるために、例えば定数演算をループの内から外へ移動することによって、当該プログラムコードを変換することである。
【００５５】
「変換」とは、本実施の形態においては、最適化変換もしくは難読化変換のことである。本実施の形態に記載の方法は、どちらの変換にも適用可能である。しかしながら、変換は、これら２つに限定されない。その他のコード交換も、その質がメトリクスを用いて評価できるのであれば、適用可能である。ソースコードから他のソースコードへの変換、ソースコードから中間表現への変換、またはソースコードからオブジェクトコードへの変換であってもよい。
【００５６】
「オリジナルコード」、「ソースコード」、関連する「オリジナルコードモジュール」、および「オリジナルモジュール」とは、変換が適用されていない命令のセットを含むファイルである。本実施の形態において、各ファイルのプログラミング言語は、Ｃ、Ｃ＋＋、またはＪａｖａ（登録商標）のいずれかであるが、その他の言語を用いてもよく、高レベル言語の代わりにアセンブリ言語などの低レベル言語を用いてもよい。同様に、「変換済コード」、「難読化コード」および「変換済モジュール」は命令のセットを含むファイルであるが、これは、１または複数回の難読化もしくは最適化変換処理が行われた結果である。本実施の形態において、同一のコンピュータプログラミング言語または符号化がオリジナルおよび難読化モジュールに用いられるが、オリジナルモジュールの言語から難読化モジュールの言語へのマッピングがある限りは、変換のための入力言語が出力言語と異なってもよい。
【００５７】
「定義使用ウェブ（definition-use web）」は、非特許文献２に記載されている。定義使用ウェブは、１または複数の交わる「定義使用網（definition-use chain）」から構成されており、定義使用網とは、変数に値を割り当ててから、割り当てられた値が用いられる命令を含む全てのブロックまでの経路上にある基本ブロックのセットである。これらの定義使用網は、各変数定義を接続先である全ての使用に繋げるために、与えられたブロックについてデータフロー解析を行うことで構築するとしてもよい。定義使用ウェブおよび定義使用網の詳細については、上記文献に記載されている。
【００５８】
その他の用語は、以下の詳細な説明において定義されている。
【００５９】
２．詳細な説明
質を高めるために、コード変換処理を評価しチューニングする新しい方法について説明する。
【００６０】
上記方法には、主に３つの重要な面がある。第１に、変換は変数およびコードの動きがユーザに表示されるように行われる。第２に、実行コードを確認する際に、変換処理の容易な調整方法があるように行われる。第３に、ユーザによる変換の質の評価、および変換処理をどのように調整するかに関する決定を補助するために、現在実行の対象となっているコードに関するメトリクスがユーザに示される。
【００６１】
図１は、本実施の形態における難読化支援装置を備えた難読化装置の構成を示す図である。
【００６２】
難読化装置１０は、例えばＣ言語などの高級言語で記述されたソースコード１００を、容易且つ適切に難読化してコンパイルする装置であって、コード変換部１０２と、オブジェクトコード生成部１０６と、リンカー１１０と、難読化支援装置１１とを備えている。
【００６３】
なお、本実施の形態では、ソースコード１００を難読化することを例に挙げて説明するが、この難読化は変換の一例であって、ソースコード１００に対して最適化などの他の変換を行ってもよい。
【００６４】
コード変換部１０２は、難読化支援装置１１からソースコード１００を読み込む。そして、コード変換部１０２は、そのソースコード１００に記述されている、難読化に関する難読化情報である変換パラメータ（難読化パラメータ）に従って、そのソースコード１００を難読化し、その難読化されたソースコード１００を変換済コード（難読化コード）として出力する。なお、変換済コードは、例えばソースコード１００と同一の高級言語で記述されている。
【００６５】
オブジェクトコード生成部１０６は、変換済コードをコンパイルすることにより、機械言語で記述されたオブジェクトコードを生成する。
【００６６】
リンカー１１０は、必要とされるライブラリなどをオブジェクトコードに付け加えることにより、実行可能コードを生成する。
【００６７】
難読化支援装置１１は、適切な変換パラメータを容易に設定することができるようにコード変換部１０２による難読化を支援する装置であって、入力部１０１と、分析部１１４と、ブラウザ１１９とを備えている。
【００６８】
入力部１０１は、例えばキーボードやマウス、他の装置と接続するためのコネクタなどを備える。この入力部１０１は、他の装置などからソースコード１００を取得するとともに、ユーザによる操作などに応じて、難読化に必要とされる変換パラメータ（難読化パラメータ）を受け付ける。そして、入力部１０１は、受け付けた変換パラメータをブラウザ１１９に出力する。さらに、入力部１０１は、受け付けた変換パラメータをソースコード１００に記述し、変換パラメータが記述されたソースコード１００をコード変換部１０２に出力する。
【００６９】
また、入力部１０１は、変換パラメータをソースコード１００に記述するときには、その変換パラメータが適用されるソースコード１００の部分（囲い込み変換ブロック）を特定するための印をそのソースコード１００に付加する。つまり、入力部１０１は、ユーザによる操作に応じて、ソースコード１００の中から囲い込み変換ブロックを特定し、その囲い込み変換ブロックごとに、その囲い込み変換ブロックに適用される変換パラメータと、その囲い込み変換ブロックを特定するための印とを、コード変換部１０２に対するメッセージとしてソースコード１００に記述する。なお、本実施の形態では、この入力部１０１が難読化制御手段として構成されている。
【００７０】
分析部１１４は、リンカー１１０により生成された実行可能コードを実行し、その実行可能コードの中の実行されている部分が、変換済コードやソースコード１００などの各コードのどの部分に該当するかを分析する。つまり、本実施の形態では、分析部１１４は、オブジェクトコード（実行可能コード）を実行する実行手段として構成されているとともに、ソースコード１００、変換済コードおよびオブジェクトコードのそれぞれで対応している対象部分を特定する。
【００７１】
ブラウザ１１９は、分析部１１４の分析結果に基づいて、ソースコード１００、変換済コード、およびオブジェクトコードのそれぞれで対応している部分や、その部分に適用されている変換パラメータなどを関連付けて出力装置１００２に表示させる。なお、本実施の形態では、このブラウザ１１９が変換パラメータを取得する取得手段として構成されているとともに、ソースコード１００、変換済コードおよびオブジェクトコードのそれぞれの対象部分と変換パラメータとを関連付けて表示させる表示制御手段として構成されている。
【００７２】
出力装置１００２は、例えば液晶ディスプレイなどにより構成され、ブラウザ１１９から出力された内容を表示する。
【００７３】
なお、難読化装置１０および難読化支援装置１１の各構成要素は、一般的に、ＣＰＵ（Central Processing Unit）によって実行可能なソフトウェアの一部として実現されるが、その一部または全ては、ハードウェアで実現されてもよい。
【００７４】
図２は、本実施の形態における難読化支援装置１１を含む難読化装置１０の動作の一例を示す図である。
【００７５】
ソースコード１００は、コード変換部１０２によって（１または複数回の難読化もしくは最適化技術によって）処理され、その結果、上述の変換済コード１０４が生成される。また、この処理は、数式、コードのライン数、基本ブロック、変数等がどのように動き、コピー、削除、結合されたかを示すデータであるコード・変数動き情報１１６を生成する。
【００７６】
次に、オブジェクトコード生成部１０６は、変換済コード１０４から上述のオブジェクトコード１０８を生成し、リンカー１１０は、分析部１１４によって実行される実行可能コード１１２を生成する。上記分析部１１４は、コード・変数動き情報１１６を処理することで、後述する同期コード・データディスプレイ１１８のレンダリングを可能とする。このレンダリング方法は、現在実行対象となっているコードの状態を正確に表示するために、上記ソースコード１００および変換済コード１０４を必要とする。レンダリングされたディスプレイは、出力装置１００２の表示機能および以下に示す機能を有するブラウザ１１９を用いて示される。
【００７７】
つまり、コード変換部１０２は、入力部１０１に受け付けられた各変換パラメータおよび各囲い込み変換ブロックに従って、ソースコード１００の各囲い込み変換ブロックを難読化することにより変換済コード１０４を生成する。さらに、コード変換部１０２は、ソースコード１００から変換済コード１０４への変換の内容、つまり上述のような変数の動きなどを示す情報を生成する。
【００７８】
オブジェクトコード生成部１０６は、変換済コード１０４をオブジェクトコード１０８に変換し、変換済コード１０４からオブジェクトコード１０８への変換の内容、つまり上述のような変数の動きなどを示す情報を生成する。このように、コード変換部１０２およびオブジェクトコード生成部１０６により生成される、変換の内容を示す情報がコード・変数動き情報１１６として分析部１１４に出力される。
【００７９】
分析部１１４は、実行可能コード１１２を実行し、例えば、実行可能コード１１２のうち実行されている部分（ラインやブロックなど）に対応するオブジェクトコード１０８の部分を特定する。さらに、分析部１１４は、そのオブジェクトコード１０８の部分に対する変換済コード１０４およびソースコード１００の部分を、コード・変数動き情報１１６に基づいて特定する。また、分析部１１４は、例えば、ソースコード１００のうちの一部分が入力部１０１により指定されている場合には、その指定されている部分に対応する変換済コード１０４およびオブジェクトコード１０８の部分を特定する。
【００８０】
ブラウザ１１９は、分析部１１４による特定結果を用いて、ソースコード１００、変換済コード１０４、およびオブジェクトコード１０８のそれぞれで互いに対応している部分を同期して示す同期コード・データディスプレイ１１８を出力装置１００２に表示させる。また、ブラウザ１１９は、その部分に適用されている変換パラメータを取得して、その同期コード・データディスプレイ１１８に関連付けて出力装置１００２に表示させる。
【００８１】
ユーザは、このような出力装置１００２に表示される同期コード・データディスプレイ１１８および変換パラメータを確認し、ソースコード１００の難読化などの変換が不適切と判断すると、入力部１０１を操作することにより、変換パラメータを変更する。
【００８２】
その結果、コード変換部１０２は、変更された変換パラメータに従ってソースコード１００の難読化を繰り返し実行する。
【００８３】
図３は、同期コード・データディスプレイ１１８の一例を示す図である。
【００８４】
同期コード・データディスプレイ１１８は、３つの並列するウィンドウから構成され、ソースコードウィンドウ２００、変換済コードウィンドウ２０２、およびオブジェクトコードウィンドウ２０４を含む。ソースコードウィンドウ２００は、ソースコード１００の一部分（囲い込み変換ブロック）を示し、変換済コードウィンドウ２０２は、変換済コード１０４の一部分を示し、およびオブジェクトコードウィンドウ２０４はオブジェクトコード１０８の一部分を示す。そして、これらのウィンドウにより示される各コードの部分はそれぞれ互いに対応し、同期して表示される。
【００８５】
さらに、コード単位２１０等の算出済みのコード単位はインジケータなどにより強調表示されており、実行予定オブジェクトコード単位２１４（次の実行対象となるコード）によって影響をうけるコード単位２０８は、上とは別の形式（太字イタリック体）で強調表示されている。また、実行予定オブジェクトコード単位２１４に対応する変換済コード１０４のラインは同様に強調表示（下線）されている。ここで、特に進歩的な表示項目は、部分的に算出されたコード単位２０６である。本図において、定数４は、位置［ｔｍｐ１］２１６に値５を格納し、位置［ｔｍｐ１］を読み込んでレジスタ２１８をデクリメントすることに置き換えられる。ここで、第１ステップ２１６は終了したが第２ステップ２１８は終了していないので、ソースコードウィンドウ２００では、ソースコード１００中の定数４は、例えば他のコード単位と異なる色などで表示されるように、部分的に算出されたと示される。
【００８６】
これらのウィンドウは、いずれもユーザが望むように消したり、または全画面表示してもよく、算出済、部分的算出済、及び算出予定のコード単位の強調表示についても同様に制御してもよい。
【００８７】
特許文献１は、（本発明の変換済コードに対応する）ソースコード、および（本発明のオブジェクトコードに対応する）機械コードのみを同期的に記載している。しかしながら、これは、オブジェクトコードを生成する前に他の変換をおこなうシステムには十分でない。上記のように、本発明では、同期コード・データディスプレイ１１８は、同期するソースコード１００、変換済コード１０４、およびオブジェクトコード１０８を含む。よって、ユーザは変換済コード１０４の状態およびそれらの関係を認識することができる。これは、オブジェクトコード１０８を生成する前に他の変換（例えば、難読化または最適化）をおこなうシステムにとって非常に有用である。
【００８８】
また、本実施の形態において、図３に示されるディスプレイでは、ユーザは変換処理の質を監視してもよく、現在実行の対象となっているコードの変換パラメータを変更してもよい。
【００８９】
図４は、変換パラメータの変更を可能にするブラウザ１１９内の処理を説明するための図である。
【００９０】
変換パラメータの変更を実行する方法が呼び出されると、最初に囲い込み変換ブロックの検出３００が行われる。この囲い込み変換ブロックは、実行対象ラインが含まれるコード内のブロックであり、例えば図５に示されるように、開始および終了の印４０２および４１２で区切られている。このような検出３００は、コード・変数動き情報１１６、ソースコード１００、および変換済コード１０４に基づいて行われる。同様の方法で同期コード・データディスプレイ１１８のレンダリングを行うことで、ソースコード１００における現在の位置が分かり、変換パラメータを検出することができる。
【００９１】
つまり、ブラウザ１１９は、分析部１１４を介して取得されたコード・変数動き情報１１６および変換済コード１０４に基づいて、オブジェクトコード１０８の中の実行部分に対応するソースコード１００の部分を見つけ出し、その部分を含む囲い込み変換ブロックを検出する。そして、ブラウザ１１９は、ソースコード１００のその囲い込み変換ブロックに対して記述されている変換パラメータを取得し、その変換パラメータを出力装置１００２に表示させる（変換パラメータの表示３０２）。
【００９２】
また、ユーザ入力の受け付け３０４によって、ユーザは変換パラメータとの連動が可能になる。本実施の形態では、この連動は操作システムの標準グラフィックユーザインターフェースを介して行われる。次に、ユーザ入力は、ソースコード１００における変換パラメータの更新３０６に用いることができる。
【００９３】
つまり、ユーザは、出力装置１００２に表示されている変換パラメータを確認することができ、入力部１０１を操作することにより、その表示されている変換パラメータを変更することができる。すなわち、ブラウザ１１９は、ユーザによる入力部１０１の操作に応じて、表示されている変換パラメータを変更する。そして、入力部１０１が、変更された変換パラメータの決定を受け付けると、その変更された変換パラメータをコード変換部１０２に出力する。コード変換部１０２は、その変更された変換パラメータを取得すると、ソースコード１００の囲い込み変換ブロックに記述されている変換パラメータを、その変更された変換パラメータに書き換える。
【００９４】
最後に、ブラウザ１１９は、アプリケーションの再構築３０８の処理により、コード変換部１０２、オブジェクトコード生成部１０６、リンカー１１０、および分析部１１４に、図２に示されたような、新規の変換パラメータに基づくソースコード１００の再変換（再難読化）および再構築を要求する。本実施の形態において、アプリケーションの再構築３０８は、他の構成要素に再変換および再構築を要求するが、別の実施の形態では、例えば、再変換および再構築の全てまたは一部をアプリケーションの再構築３０８で行ってもよい。
【００９５】
図５は、ソースコードウィンドウ２００の他の例を示す図である。
【００９６】
ブラウザ１１９は、図５に示すように、ソースコード１００にプラグマ（コンパイラへの指示文）として記述されている、囲い込み変換ブロックを示す印や変換パラメータをソースコードウィンドウ２００に表示させてもよい。
【００９７】
すなわち、囲い込み変換ブロックの検出３００を行うために、本実施の形態におけるＣまたはＣ＋＋プログラミング言語を用いたソースコード１００は、図５に示すような、使用する変換パラメータを特定する＃pragma transform()ライン４０２を備える。実行されている囲い込み変換ブロックは、コード・変数動き情報１１６を用いることで簡単に見つけることができる。ここで、図５では、説明を容易にするために、ソースコードウィンドウ２００のみを表示する。その他のウィンドウは、ライン４０２が必要でないために表示されていないが、ソースコードウィンドウ２００と一緒に表示が可能であることは言うまでもない。
【００９８】
ライン４０２および４１２は、コード変換部１０２に対する制御メッセージである。ライン４０２は、要素４０４、４０６、４０８、および４１０で特定される変換方法（変換パラメータ）が、変換処理の終わりを示すライン４１２までの範囲に適用されることを示す。変換制御関数（上記各要素）において、適用される変換名が、括弧内に記載された各変換の引数と共に列挙される。
【００９９】
本実施の形態において、変換方法は、非特許文献１から引用したものである。最初に、要素４０４であるｒｅｄｕｎｄａｎｔ(ｏｆｆ)は、非特許文献１に記載の変換技術6.2.6 Add Redundant Operands を参照しており、演算結果に影響を与えない冗長な数式をコードに追加すべきか否かを示す。引数である「ｏｆｆ」は、変換（冗長な数式の追加）がコード変換部１０２によって行われないことを示す。要素４０６であるＯｕｔｌｉｎｅ（１５）は、非特許文献１の6.3.1 Inline and Outline Methodsに記載の変換技術であり、関数をインライン展開したり、１つの関数を複数の関数に分割することを示す。ここでパラメータ「１５」は、１つの関数を１５行で構成される関数として分割することを示す。要素４０８であるｅｎｃｏｄｉｎｇ（５，ｈｉｇｈ）は、非特許文献１の7.1.1 Change Encodingに記載の変換技術であり、例えばループカウンタに代数変換をさせる。パラメータ「５」は符号化を変更する変数の割合を示し、引数である「ｈｉｇｈ」は、高強度な符号化を低強度（ただし高速）な符号化よりも多く用いるべきことを示す。要素４１０であるｃｌｏｎｅ(ｏｎ)は、非特許文献１の6.3.3 Clone Methodsに記載の変換技術であり、ソースコードの一部を選択して複製すべきことを示す。それぞれのインスタンスについては異なる変換が適用され、起動時ごとに、異なるバージョンが選択される。引数である「ｏｎ」は、変換係数は有効であるが、その他の引数をもっていないことを示す。当業者にとって、その他の難読化または最適化変換がリストに追加されてもよく、同様に各変換に利用可能なパラメータを修正してもよい。
【０１００】
変換パラメータの表示３０２とユーザ入力の受け付け３０４は、グラフィックユーザインターフェースを介して行われることが好ましい。本実施の形態において、グラフィックユーザインターフェースは、ブラウザ１１９の機能として実施される。
【０１０１】
図６は、上記グラフィックユーザインターフェースとして出力装置１００２に表示されるパラメータウィンドウの一例を示す図である。
【０１０２】
ブラウザ１１９は、図６に示すようなパラメータウィンドウ５００を出力装置１００２に表示させる。このパラメータウィンドウ５００は、図５に示す要素４０４，４０６，４０８，４１０の変換パラメータを表示するとともに、ユーザによる入力部１０１の操作に応じて、その変換パラメータの内容を変更して表示する。また、このようなパラメータウィンドウ５００は、図３に示す同期コード・データディスプレイ１１８や図５に示すソースコードウィンドウ２００に関連付けて表示されてもよく、その同期コード・データディスプレイ１１８の一部に関連付けて表示されてもよい。
【０１０３】
図７は、パラメータウィンドウ５００の表示方法の一例を示す図である。
【０１０４】
ブラウザ１１９は、例えば図７に示すように、ソースコードウィンドウ２００と変換済コードウィンドウ２０２とパラメータウィンドウ５００とを並べて出力装置１００２に表示させる。
【０１０５】
なお、本実施の形態では、実行対象ラインが含まれる囲い込み変換ブロックごとに、ソースコード１００のその囲い込み変換ブロックと、その囲い込み変換ブロックに対応する変換済コード１０４の一部分と、その囲い込み変換ブロックに対応するオブジェクトコード１０８の一部分と、その囲い込み変換ブロックに適用された変換パラメータとをそれぞれ関連付けて出力装置１００２に表示させた。しかし、囲い込み変換ブロックごとにではなく、他の単位、例えば基本ブロックごとに、それぞれのコードで対応する部分や変換パラメータを関連付けて出力装置１００２に表示させてもよい。
【０１０６】
また、実行対象ラインとは関係なく、ユーザから指定された囲い込み変換ブロックごとに、ソースコード１００のその囲い込み変換ブロックと、その囲い込み変換ブロックに対応する変換済コード１０４の一部分と、その囲い込み変換ブロックに対応するオブジェクトコード１０８の一部分と、その囲い込み変換ブロックに適用された変換パラメータとをそれぞれ関連付けて出力装置１００２に表示させてもよい。
【０１０７】
この場合、例えば、入力部１０１がホットキー（ショートカットキー）などを備えていたり、ブラウザ１１９がツールバーボタンなどを出力装置１００２に表示させる。そして、ユーザがそのホットキーを操作したり、入力部１０１を操作してそのツールバーボタンを選択するごとに、ソースコード１００に記述された複数の囲い込み変換ブロックの順番に従って、新たな囲い込み変換ブロックが指定される。これにより、ユーザは所望の囲い込み変換ブロックに対する変換パラメータを容易に表示させて、その変換パラメータを変更することができる。
【０１０８】
このように本実施の形態では、ソースコード１００および変換済コード１０４のそれぞれの対象部分と、それらの対象部分についての変換パラメータとが関連付けて表示されるため、ユーザは、一方のコードの一部分が他方のコードの何れの部分に該当するかを容易に把握することができるとともに、それらの部分を容易に対比することができる。さらに、ユーザは、それらの部分における変換パラメータも容易に把握することができる。その結果、ユーザは、その把握した内容に基づいて、再度、難読化装置１０にソースコード１００を難読化させて、そのソースコード１００の適切な難読化を容易に実行させることができる。したがって、ソースコードの難読化を十分に支援することができる。
【０１０９】
また、ユーザによる操作に応じて、変換パラメータが変更されるため、ユーザは、表示されている変換パラメータと、その変換パラメータが適用されたソースコード１００および変換済コード１０４のそれぞれの対象部分とを確認して、その確認した内容に基づいてその変換パラメータを容易に且つ適切に変更することができる。さらに、その変更された変換パラメータに従ってソースコード１００の対象部分（囲い込み変換ブロック）が再び難読化されるため、ユーザは、ソースコード１００の対象部分を簡単に且つ適切に難読化させることができる。つまり、本発明では、変換パラメータの適切で容易なチューニングおよび設定を実現することができる。また、ユーザは、表示されているソースコード１００の対象部分と、随時更新されて表示される変換済コード１０４の対象部分とを確認しながら、カットアンドトライで変換パラメータをチューニングすることができ、さらに適切な変換パラメータを設定することができる。
【０１１０】
（変形例）
上記実施の形態では難読化支援装置１１は、同期コード・データディスプレイ１１８およびパラメータウィンドウ５００を出力装置１００２に表示させたが、さらに、変換済コード１０４の難読化の程度または質を示す同期メトリクス表示ディスプレイを表示させてもよい。
【０１１１】
図８は、本変形例に係る難読化装置１０の動作の一例を示す図である。
【０１１２】
分析部１１４は、ソースコード１００、変換済コード１０４およびオブジェクトコード１０８などに基づいて、ソースコード１００および変換済コード１０４を解読することの難しさの程度または質を示すメトリクスを算出する。つまり、本変形例では、この分析部１１４がメトリクス算出手段の機能を備えている。ブラウザ１１９は、その算出されたメトリクスを示す同期メトリクス表示ディスプレイ６００を出力装置１００２に表示させる。
【０１１３】
このように同期メトリクス表示ディスプレイ６００が表示されることにより、ユーザによる検査対象コード（変換済コード１０４）の質に関する判断を補助することができる。
【０１１４】
図９は、分析部１１４がメトリクスを算出する処理を説明するための図である。
【０１１５】
第１に、分析部１１４は、対象基本ブロックの検出７００を実行する。対象基本ブロックとは、現在実行されている基本ブロックであって、この検出は、上述の囲い込み変換ブロックの検出３００と僅かに異なる。対象基本ブロックの検出７００は、ソースコード１００および変換済コード１０４に対し、検索をガイドするためにコード・変数動き情報１１６およびオブジェクトコード１０８を用いて、制御フロー図において現在実行対象となるコードが位置するブロックを検出するために、より狭い範囲に焦点を当てる。現在実行対象となるコードの位置が分かると、分析部１１４は、ソースコード１００、変換済コード１０４、およびオブジェクトコード１０８全てのメトリクスを評価するために、メトリクスの算出７０２を実行する。
【０１１６】
なお、大部分または全ての変換（難読化）が、オブジェクトコード生成部１０６の実行前に行われる場合、変換済コード１０４およびオブジェクトコード１０８のメトリクスは非常に似通っている。したがって、本変形例では、オブジェクトコード１０８のメトリクスについての説明を省略し、ソースコード１００および変換済コード１０４のメトリクスを説明する。しかしながら、当業者であれば、必要に応じてオブジェクトコード１０８のメトリクスを示すように、本発明を変更してもよい。さらに、本発明は、１または任意の組み合わせである、ソースコード１００のメトリクス、変換済コードのメトリクス、およびオブジェクトコードのメトリクスを示すように変更してもよい。この場合、ユーザは表示するメトリクスを変更してもよい。
【０１１７】
このように、本変形例に係る分析部１１４は、ソースコード１００および変換済コード１０４のそれぞれで対応し、現在実行されている基本ブロックごとに、それらの基本ブロックのメトリクスを順次算出する。
【０１１８】
図１０は、同期コード・データディスプレイ１１８および同期メトリクス表示ディスプレイ６００の一例を示す図である。
【０１１９】
分析部１１４は、実行オブジェクトコード１０８の有効ライン２１４に対して、ソースコード１００および変換済コード１０４の複雑度または質を示すメトリクスのセットを算出する。その結果、ブラウザ１１９は、その算出されたメトリクスのセットを示す同期メトリクス表示ディスプレイ６００を、同期コード・データディスプレイ１１８の上記有効ライン２１４に対応付けて出力装置１００２に表示させる。例えば、同期メトリクス表示ディスプレイ６００には、メトリクス８０２、８０４、８０６、および８０８などが示される。以下、それぞれのメトリクスが示す内容、およびコードを説明するために用いることが可能なその他のメトリクスについて説明する。
【０１２０】
（変換強度の測定に用いられるメトリクス）
上記のように、図１０は、特に難読化変換の質の評価における補助を対象とする、多数のメトリクスを示す。
【０１２１】
最初に、メトリクス８０２は有効変数を示す。表示されている２つの数字は、１つ目が対象基本ブロックにおいて有効な変数の数であり、これはブロック内に設定される、ブロック内で参照される、もしくは対象基本ブロック内にアドレスのある、変数、ローカルパラメータ、グローバルパラメータ、関数パラメータの数である。２つ目の数字は、対象基本ブロック内で有効に用いられる、変数、ローカルグローバル、または関数パラメータの総数を示す。例えば、図１０に示すメトリクス（有効変数）８０２では、１つ目の数字が「５」であり、２つ目の数字が「１６」である。なお、図１０では、ソースコード１００と変換済コード１０４のそれぞれに対してメトリクスが表示されている。
【０１２２】
次に、メトリクス８０４はワーキングセットを示す。ワーキングセットは、メトリクス（有効変数）８０２の別表現であって、メトリクス８０２で示すような単なる２つの数ではなく、むしろ変数の総数に対する有効変数の割合を示す。図１０に示すメトリクス（ワーキングセット）８０４において、その割合は３１.２％である。
【０１２３】
メトリクス８０６は平均ライフタイムを示す。この平均ライフタイムは、現在の実行時点において有効な、上記定義使用網および定義使用ウェブに対する基本ビルディングブロックを、各定義使用ペアに対して測るものである。本実施の形態では、平均ライフタイムは、ソースコードのデータフロー解析結果から得られる、定義位置と使用位置との間の基本ブロックの平均数である。分析部１１４は各定義使用ペア間の可能な全ての経路の長さに対するスコアを割り当て、各ペア間の全ての経路にある基本ブロックの数を数える。分析部１１４は、これらのスコアを全て加算し、その加算結果を網の総数で割ることによって、最終平均ライフタイムを算出する。例えば、ライフタイムは、変数に値が割り当てられる、つまり変数が定義されてから、その変数が使用されるまでの経路上にある全ての基本ブロックの数であって、平均ライフタイムは、変数ごとのライフタイムを全て加算し、変数の総数で除算した結果を示す。
【０１２４】
メトリクス８０８は定義使用複雑度を示し、変数定義および変数使用の複雑度のより詳細な測定基準である。
【０１２５】
以下、定義使用複雑度について具体的なコードモジュールを用いて説明する。
【０１２６】
図１１は、比較的単純なコードモジュールの概要構成を示す図である。なお、図１１中の四角はそれぞれ、コードモジュールを構成する基本ブロック９００〜９１８を示す。例えば、このコードモジュールが変換済コード１０４に相当する。ここで、各定義使用ペアの複雑度を定義するために、メトリクス（平均ライフタイム）８０６で示される経路間の長さ以外の要素が用いられる。平均ライフタイム８０６は、定義基本ブロックと使用基本ブロック間のループ内におけるネスティングのレベルを示す。ここで、定義基本ブロックは、値が代入される変数をもつブロックであり、使用基本ブロックは、上記値が代入された変数が用いられるブロックである。これを数値化するためには、定義からの経路がループの内または外のステップを用いる回数を示すステップ数を評価してもよい。
【０１２７】
最初に、分析部１１４は、非特許文献３のChapter10.4に記載の技術によって示唆されているような方法を用いて、各基本ブロックのネスティングレベルを算出する。この計算は、制御フローループが戻る２つの隣接ブロック間の経路である、モジュールの制御フロー図におけるバックエッジを特定することから始まる。図１１の単純なコードモジュールにおいて、ブロックＢ７（９１４）からブロックＢ４（９０８）への１つのバックエッジは視覚的に特定が可能である。しかし、これらのバックエッジは、プログラムの観点から、スタートブロック９００からエッジソース（この例ではブロックＢ７（９１４））への全ての経路が、エッジの行き先（この例ではブロックＢ４（９０８））を通過するか否かをテストすることによって検出することができる。通過する場合、対象エッジはバックエッジである。
【０１２８】
全てのバックエッジが検出されると、バックエッジの行き先のブロック（例えばブロックＢ４（９０８））から、そのバックエッジの開始ブロック（例えばブロックＢ７（９１４））までの経路にあり、かつ、そのバックエッジの行き先を通過しない全てのブロックを検出することによって、各ループを決定することができる。したがって、ブロックＢ５（９１０）およびブロックＢ６（９１２）はブロックＢ７（９１４）に直接接続してループ内にあるが、ブロックＢ３（９０６）は、ブロックＢ８（９１６）と同様、ブロックＢ４（９０８）からブロックＢ７（９１４）に至るまでの全ての経路にないため、そのループ内にない。上記条件を満たすブロックＢ５（９１０）およびＢ６（９１２）と同様に、バックエッジの両端にあるブロックは、ループ内にあると定義されたブロックのセットに追加される。
【０１２９】
ここで、全てのバックエッジが検出され、各ループを構成するブロックが構築されると、各ブロックのネスティングレベルは、各基本ブロックが現れるループセットの数を数えるだけで決定することができる。次に、分析部１１４は、ブロックを用いるために、定義基本ブロックからの最短経路に従い、ネスティングレベルが変化するたびに（つまり、本実施の形態において、ループの中や外に行くこと）、ステップカウンタをインクリメントする。最終値は、特定の定義使用ペアのスコアを示す。最後に、特定の基本ブロックにおける、各変数の定義使用ペアの複雑度に対するメトリクスを算出するために、まず、全ての定義使用ペア、および、その定義使用ペアの間にある全ての基本ブロックを列挙する。
【０１３０】
表１は、上記図１１に記載の変数ａに対して算出された各定義使用ペアのステップ数を示す。
【０１３１】
【表１】
2010517119.tif 000003
【０１３２】
なお、この例において、変数ａの定義使用ウェブは、上記表１から得られる全ての定義および使用を統合したものである。
【０１３３】
上記表１の複雑度測定方法の１つは、ある基本ブロックにおいて、所定の基本ブロックと交差する各定義使用ペアに対して（ステップ数＋１）の数を全て加算し、加算結果（スコア）を表中の固有の定義の数と固有の使用の数との積で割る方法である。なお、「固有の定義の数」および「固有の使用の数」とは、表１における「定義」の欄と「使用」の欄のそれぞれにて重複なく現れる基本ブロックの数を意味する。この方法は、１つの変数の定義使用複雑度を示すメトリクスを算出する。Ｂ７（９１４）の所定の基本ブロックにおける表１の変数ａに対して、第１、２、５、および６の定義使用ペアを除く全てのペアが当該ブロックを通過する。（ステップ数＋１）の加算結果、つまりスコアは１４（＝（１＋１）＋（２＋１）＋（１＋１）＋（２＋１）＋（０＋１）＋（０＋１）＋（１＋１））である。固有の定義は、ブロックＢ１，Ｂ２，Ｂ６で行われているため、その固有の定義の数は（３）である。また、固有の使用は、ブロックＢ３，Ｂ５，Ｂ６，Ｂ８で行われているため、その固有の使用の数は（４）である。したがって、固有の定義の数と固有の使用の数との積は、３×４=１２であり、ブロックＢ７（９１４）における変数ａの定義使用複雑度の最終値は、１４／１２=１．１６７となる。
【０１３４】
最後に、所定の基本ブロックにおける各有効変数に対して、上記のようなステップ数のスコアを算出し、各変数のスコアを全て加算し、各変数に対する固有の定義の数と固有の使用の数との積を全て加算する。スコアが全て加算された数を、積が全て加算された数で割ることによって、その基本ブロックにおける定義使用複雑度が得られる。
【０１３５】
つまり、分析部１１４は、上述のような方法により、所定の基本ブロックにおける１つの有効変数に対する定義使用複雑度や、その基本ブロックの定義使用複雑度をメトリクス８０８として算出する。
【０１３６】
なお、本変形例では、ソースコード１００および変換済コード１０４を解読することの難しさの程度および質を、有効変数、ワーキングセット、平均ライフタイム、および定義使用複雑度などのメトリクスで表したが、他のメトリクスで表してもよい。
【０１３７】
当業者であれば、共に上記測定カテゴリおよび全く新しいカテゴリ内の改良である、ソースコードおよび対象コードに対応する変換済コードの複雑度、および対象コード自体を分析し評価する利用可能なメトリクスが他にもあることがわかるだろう。
【０１３８】
また、ブラウザ１１９は、上述のような有効変数やワーキングセットなどの複数種のメトリクスのうち、ユーザにより指定された種類のメトリクスのみを同期メトリクス表示ディスプレイ６００に表示させてもよい。
【０１３９】
また、分析部１１４は、基本ブロックを実行するごとに、その基本ブロックに対して算出した複数種のメトリクスを記録することにより、各種メトリクスの履歴の作成および更新を行ってもよい。この場合、各種メトリクスの履歴が更新されるごとに、ブラウザ１１９は、その更新された各種メトリクスの履歴をそれぞれ形跡として表示させる。さらに、ユーザによって指定された種類のメトリクスの履歴が更新されるごとに、ブラウザ１１９は、上記形跡の代わりに、または上記形跡に加えて、その更新されたメトリクスの履歴を形跡として表示させてもよい。
【０１４０】
さらに、分析部１１４は、実行可能コード１１２を実行しながら、上述のように作成および更新される各種メトリクスの履歴を監視してもよい。この場合、分析部１１４は、何れかの種類のメトリクスの示す値が、予め定められたしきい値よりも小さくまたは大きくなったときに、実行可能コード１１２（オブジェクトコード１０８）の実行を停止する。例えば、上述の定義使用複雑度が所定のしきい値よりも小さくなったときに、分析部１１４は実行可能コード１１２の実行を停止する。その結果、それまでに実行された最後の基本ブロック、つまり定義使用複雑度がしきい値よりも小さい基本ブロックに対する同期コード・データディスプレイ１１８、パラメータウィンドウ５００、および同期メトリクス表示ディスプレイ６００が表示される。これにより、ユーザは、定義使用複雑度の増加を図るべきブロックを容易に見つけることができ、そのブロックに対する変換パラメータを容易に変更することができる。
【０１４１】
また、各種メトリクスの履歴は、実行可能コード１１２の実行の進行に合わせて記録しなくともよい。例えば、ユーザからの入力によってメトリクスを算出する基本ブロックが変化する場合には、ユーザの選択した基本ブロックが変わる毎にメトリクスを算出し、その履歴を記録するとしても良い。この場合、記録される履歴は、ユーザが選択した基本ブロック単独のメトリクスの履歴であってもよいし、ユーザが選択した基本ブロックまで実行可能コード１１２の実行を進行させた場合に得られるメトリクスの総計であってもよい。
【０１４２】
本発明についての実施の形態および変形例の説明はここで終わるが、当業者であれば、本発明を多くの他の変形例へと展開することができる。以下にいくつかの他の変形例を示す。
【０１４３】
例えば、同期コード・データディスプレイ１１８において、オブジェクトコード１０８の一部分、つまりオブジェクトコードウィンドウ２０４を表示しても表示しなくてもよい。例えば、ブラウザ１１９は、分析部１１４による難読化または最適化が十分であると判定された場合に、オブジェクトコードウィンドウ２０４を表示してもよい。上記判定は、メトリクスに基づいて判定される。もしくは、ブラウザ１１９は、ユーザからの入力に基づいてオブジェクトコードウィンドウ２０４を表示してもよい。
【０１４４】
また、上記実施の形態および変形例の同期コード・データディスプレイ１１８では、３つの並列するウィンドウが表示されているが、ソースコード１００に対して複数の変換が行われる場合は、４つ以上のウィンドウを表示してもよい。例えば、ソースコード１００に難読化及び最適化の両方が行われる場合、４つのウィンドウを表示することができる。上記複数のウィンドウは、ソースコード１００、最適化コード、難読化コード、およびオブジェクトコード１０８のそれぞれで対応している部分を表示することができる。この場合、ユーザは表示するウィンドウを選択することができる。一方、全てのウィンドウを表示する必要はない。１または複数のウィンドウの表示は、例えば、ユーザの入力に応じて、省略することができる。
【０１４５】
また、上記実施の形態および変形例において、上記３つのウィンドウは、１つの画面上に並列する３つの欄として表示しているが、各ウィンドウは、それぞれ別個に、または異なる時間に表示してもよい。これらの実施例は、表示画面の解像度が３つのウィンドウを同時に示すのに十分でない場合に有用である。この実施において、ユーザは、自身の入力に用いるウィンドウを切り替えることができる。
【０１４６】
また、上記実施の形態および変形例では、実行可能コード１１２の実行されているラインを条件とし、そのラインに対応する、ソースコード１００の部分、変換済コード１０４の部分、オブジェクトコード１０８の部分、それらの部分に適用されている変換パラメータ、およびそれらの部分のメトリクスを関連付けて表示させた。しかし、実行可能コード１１２の実行される予定のラインを条件とし、そのラインに対応する、上記各コードの部分、それらの部分に適用されている変換パラメータ、およびそれらの部分のメトリクスを関連付けて表示させてもよい。また、ユーザにより指定されたラインを条件とし、そのラインに対応する、上記各コードの部分、それらの部分に適用されている変換パラメータ、およびそれらの部分のメトリクスを関連付けて表示させてもよい。また、上記各コードの部分は基本ブロックや囲い込み変換ブロック、コード全体など、どのような単位であってもよい。
【０１４７】
また、上記実施の形態および変形例において、実行予定のオブジェクトコード１０８（または現在実行されているコード）に対する情報（例えば、メトリクスのセット）を示したが、ユーザは、自身が確認したい情報である、同期コード・データディスプレイ１１８に示されるコードを手動で指定してもよい。上記情報を生成する処理は、どのコード単位で情報が生成されるかという点を除いて、オブジェクトコード１０８の生成方法と同様であるため、その具体的な説明はここでは省略する。
【０１４８】
また、上記実施の形態および変形例において、メトリクスのセットは、基本ブロック単位で算出されるが、当該基本ブロックの一部に対応するメトリクスのセットを算出してもよい。この場合、ユーザは、例えばマウスでドラッグして、メトリクスを算出する範囲を指定することができる。すると、上記メトリクスの算出処理は、選択範囲に対して行われる。この場合、ユーザは自身が注目するコードに対する変換の強度を柔軟に見直すことができる。
【０１４９】
また、上記実施の形態および変形例において、コード単位は下線等を用いて強調表示されたが、本発明はその他の強調表示方法を用いてもよい。例えば、対応するコード間に線を引く、対応するコードに同一の色を塗る等の方法がある。
【０１５０】
また、上記実施の形態および変形例では、実行対象とされているコードの一部分が検査対象（表示対象）であるが、ユーザは、いくつかの入力装置やブラウザ１１９を介してその対象とする部分を指示してもよい。この場合、ユーザはオブジェクトコード１０８において対象箇所を指示する必要も、ソースコード１００または変換済コード１０４において対象部分を指示する必要もない。
【０１５１】
また、上記実施の形態および変形例において、変換パラメータが変更された場合には、ソースコード１００の囲い込み変換ブロックに記述されている変換パラメータを、その変更された変換パラメータに書き換えていたが、これに限られるものではない。例えば、ソースコード自体は書き換えないまま、新規の変換パラメータを使って再難読化するとしてもよい。これは、アプリケーションの再構築３０８の処理において、ソースコード内の変換パラメータを無視し、新規の変換パラメータを使って再構築を行うとすれば実現できる。この場合、元の変換パラメータを残しつつ、新しい変換パラメータでの変換結果を確認することが出来る。また、ユーザの指示により、ソースコード内の変換パラメータを新規の変換パラメータに書き換えるか否かを指定できるとしても良い。この場合、新しい変換結果がユーザの満足が得られるものであれば、ソースコード内の変換パラメータを正式に変更するなどの制御が可能となる。
【０１５２】
（上記以外のその他の変形例）
なお、本発明は以下の場合も本発明に含まれる。
【０１５３】
（１）上記各装置は、具体的に、マイクロプロセッサ、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、ハードディスク部、表示部、キーボード、およびマウス等を備えるコンピュータシステムであってもよい。コンピュータプログラムはＲＡＭもしくはハードディスク部に格納される。各装置は、上記コンピュータプログラムに応じたマイクロプロセッサの動作を介して機能する。ここで、上記コンピュータプログラムは、コンピュータに対する命令を示す複数の命令コードの組み合わせによって構成されている。
【０１５４】
（２）上記各装置を構成する構成要素の一部又は全ては、単一のシステムＬＳＩ（Large-Scale Integration）で構成されてもよい。上記システムＬＳＩは、１つのチップに構成要素を集積することによって製造された超多機能ＬＳＩであって、具体的には、マイクロプロセッサ、ＲＯＭ、およびＲＡＭ等を備えることによって構成されるコンピュータシステムである。コンピュータプログラムはＲＡＭに格納される。上記システムＬＳＩは、上記コンピュータプログラムに応じたマイクロプロセッサの動作を介して機能する。
【０１５５】
さらに、上記各装置を構成する構成要素の各手段は、別個のチップであってもよいし、その１部または全てを備える１つのチップで構成されてもよい。さらに、ここではシステムＬＳＩが言及されているが、これは例であって、集積度の違いによって、指定ＩＣ、ＬＳＩ、スーパーＬＳＩ、およびウルトラＬＳＩを用いてもよい。
【０１５６】
さらに、回路の集積方法は、ＬＳＩに限定されておらず、専用回路または汎用プロセッサを用いて実現してもよい。また、ＬＳＩの製造後にプログラムミング可能なＦＰＧＡ（Field Programmable Gate Array）や、ＬＳＩにおける回路セルの接続や設定が再構築可能な再構築可能プロセッサを用いてもよい。
【０１５７】
さらに、半導体技術やその他技術の発展による集積回路技術がＬＳＩに取って代わる場合、当該技術を構成要素の集積の実行に用いることができる。バイオ技術の適用が期待されている。
【０１５８】
（３）各装置を構成する構成要素の一部または全ては、上記装置または独立型モジュールから取り付け可能なＩＣカードとして構成されてもよい。上記ＩＣカードやモジュールは、マイクロプロセッサ、ＲＯＭ、およびＲＡＭ等から構成されるコンピュータシステムである。上記ＩＣカードやモジュールは超多機能ＬＳＩに含まれてもよい。上記ＩＣカードやモジュールは、コンピュータプログラムに応じた、マイクロプロセッサの動作を介して機能する。上記ＩＣカードやモジュールは耐タンパ性を持っていてもよい。
【０１５９】
（４）本発明は、コンピュータを用いた上記記載の方法を実現するためのコンピュータプログラムであってもよく、上記コンピュータプログラムを含むデジタル信号であってもよい。
【０１６０】
さらに、本発明は、コンピュータプログラムまたはデジタル信号を、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）、ＭＯ（Magneto-Optical disk）、ＤＶＤ（Digital Versatile Disk）、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Blu-ray Disc）、ＨＤ−ＤＶＤ（High Definition DVD）、および半導体メモリ等のコンピュータで読み取り可能な記録媒体に格納することによって実現することができる。さらに、本発明は、これらの記録媒体に記録されたデジタル信号を含む。
【０１６１】
また、本発明は、電話線、無線又は有線伝送路、インターネットに代表されるネットワーク、データ放送等を介した、上記コンピュータプログラムまたはデジタル信号の送信によって実現することができる。
【０１６２】
本発明は、上記コンピュータプログラムに応じて作動するマイクロプロセッサ、および上記コンピュータプログラムを記録するメモリを備えるコンピュータシステムであってもよい。
【０１６３】
さらに、上記記録媒体にプログラムまたはデジタル信号を記録して転送する、又は上記ネットワークなどを介して転送することによって、別の独立したコンピュータシステムを用いた実行が可能となる。
【０１６４】
（５）当業者であれば、実質的な本発明の新規教示や効果範囲内での変更が可能であろう。したがって、上記変形例や実施例の任意の組み合わせは、本発明の範疇に含まれる。
【産業上の利用可能性】
【０１６５】
本発明の難読化支援装置は、ソースコードの適切な難読化を容易に行えるように、その難読化を十分に支援することができるという効果を奏し、例えば、高級言語で記述されたコンピュータプログラムを変換してコンパイルするような装置などに適用することができる。
【図面の簡単な説明】
【０１６６】
本願におけるこれらの目的および他の目的や、効果、特徴は、実施の形態を示す付属図面に関する以下の説明から明確になる。当該図面において、
【図１】図１は、本発明の実施の形態における難読化支援装置を備えた難読化装置の構成を示す図である。
【図２】図２は、同上の難読化装置の動作の一例を示す図である。
【図３】図３は、同上の同期コード・データディスプレイの一例を示す図である。
【図４】図４は、同上の変換パラメータの変更を可能にするブラウザ内の処理を説明するための図である。
【図５】図５は、同上のソースコードウィンドウの他の例を示す図である。
【図６】図６は、同上のグラフィックユーザインターフェースとして出力装置に表示されるパラメータウィンドウの一例を示す図である。
【図７】図７は、同上のパラメータウィンドウの表示方法の一例を示す図である。
【図８】図８は、同上の変形例に係る難読化装置の動作の一例を示す図である。
【図９】図９は、同上の変形例に係る分析部がメトリクスを算出する処理を説明するための図である。
【図１０】図１０は、同上の変形例に係る同期コード・データディスプレイおよび同期メトリクス表示ディスプレイの一例を示す図である。
【図１１】図１１は、同上の変形例に係るメトリクスを説明するための比較的単純なコードモジュールの概要構成を示す図である。
【図１】
2010517119.tif 000004
【図２】
2010517119.tif 000005
【図３】
2010517119.tif 000006
【図４】
2010517119.tif 000007
【図５】
2010517119.tif 000008
【図６】
2010517119.tif 000009
【図７】
2010517119.tif 000010
【図８】
2010517119.tif 000011
【図９】
2010517119.tif 000012
【図１０】
2010517119.tif 000013
【図１１】
2010517119.tif 000014
【国際調査報告】
2010517119.tif 000015
2010517119.tif 000016
2010517119.tif 000017