(57)【要約】【課題】ソースコードの解読が困難な難読化処理を可能にする情報処理装置、方法およびプログラムを提供すること。【解決手段】本発明の情報処理装置は、ソースコードを難読化する情報処理装置である。本発明の情報処理装置は、処理対象のソースコードを分解して変換対象のトークンを抽出する解析手段と、解析手段が抽出した変換対象のトークンを変換する変換手段とを備えおり、変換対象のトークンを自然言語に分類し、分類した自然言語を対応語に変換する。【選択図】図２
2014191526.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを難読化する情報処理装置であって、
処理対象のソースコードを分解して変換対象のトークンを抽出する解析手段と、
前記解析手段が抽出した変換対象のトークンを変換する変換手段と
を備え、
前記変換手段は、前記変換対象のトークンを自然言語に分類し、分類した自然言語を、前記分類した自然言語の対応語に変換することを特徴とする、情報処理装置。
【請求項２】
前記変換手段は、前記分類した自然言語のうち一部の自然言語を対応語に変換することを特徴とする、請求項１に記載の情報処理装置。
【請求項３】
前記自然言語の対応語は、前記自然言語の反義語若しくは類義語、または前記自然言語と綴りが類似する言語であることを特徴とする、請求項１または２に記載の情報処理装置。
【請求項４】
ソースコードを難読化する情報処理装置が実行する方法であって、前記方法は、前記情報処理装置が、
処理対象のソースコードを分解して変換対象のトークンを抽出するステップと、
前記変換対象のトークンを自然言語に分類するステップと、
前記分類した自然言語を、前記分類した自然言語の対応語に変換するステップと
を含む、方法。
【請求項５】
前記変換するステップは、前記分類した自然言語のうち一部の自然言語を対応語に変換するステップを含む、請求項４に記載の方法。
【請求項６】
前記自然言語の対応語は、前記自然言語の反義語若しくは類義語、または前記自然言語と綴りが類似する言語であることを特徴とする、請求項４または５に記載の方法。
【請求項７】
請求項４〜６のいずれか１項に記載の方法を情報処理装置に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードを変換する情報処理装置に関し、より詳細には、ソースコードを難読化する情報処理装置、方法およびプログラムに関する。
【背景技術】
【０００２】
従来、コンピュータプログラムを構成するソースコードについて、情報セキュリティや知的財産保護の観点から、ソースコードの解析を防止する必要性が存在する。特に、ＪＡＶＡ  ＳＣＲＩＰＴ（登録商標）等の汎用プログラミング言語で記述したＷｅｂブラウザ上で動作するソースコードは参照が容易であるため、解読を防止する必要性が高い。そのため、ソースコードを難読化する種々の技術が提案されている。
【０００３】
ソースコードの難読化技術の一例として、特許文献１が開示するプログラム難読化装置は、予め用意した難読化アルゴリズムに従ってソースコードの難読化処理を実行し、難読化処理の安全性を評価し、ユーザが要求する安全性条件を満たす迄、難読化処理を繰り返し実行する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１が開示するプログラム難読化装置が採用する難読化アルゴリズムでは、乱数に基づく任意のビットの変数名の宣言やダミーコード、逆演算処理をオリジナルのソースコードに追加するため、オリジナルのソースコードに記述されていた処理や変数名がそのままの形で残されてしまう。このため、当該難読化アルゴリズムでは、ソースコードの解読がされ易いという問題があった。
【０００５】
本発明は上述した課題を解決するものであり、ソースコードの解読が困難な難読化を可能にする情報処理装置、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の情報処理装置は、処理対象のソースコードを分解して変換対象のトークンを抽出し、変換対象のトークンを自然言語に分類して、当該自然言語の対応語に変換する。
【発明の効果】
【０００７】
本発明の情報処理装置は、上記手段を採用することにより、ソースコードの解読が困難な難読化を可能とする。
【図面の簡単な説明】
【０００８】
【図１】本発明の情報処理装置のハードウェア構成図の一実施形態を示す図。
【図２】本発明の情報処理装置に実装される難読化プログラムの機能構成の一実施形態を示す図。
【図３】本発明の難読化プログラムが実行する難読化処理を示す概念図。
【図４】本発明の難読化プログラムが実行する処理の一実施形態を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、本発明について実施形態をもって説明するが、本発明は後述する実施形態に限定されるものではない。図１は、本発明の情報処理装置のハードウェア構成図の一実施形態を示す図である。以下、図１を参照して、情報処理装置１００のハードウェア構成について説明する。
【００１０】
情報処理装置１００は、ソースコードを難読化する難読化プログラムが実装される装置であり、ＣＰＵ(Central Processing Unit)１０１と、ＲＯＭ(Read Only Memory)１０２と、ＲＡＭ(Random Access Memory)１０３と、ＨＤＤ（Hard Disc Drive）１０４と、ネットワークインタフェース（Ｉ／Ｆ）１０５と、外部装置Ｉ／Ｆ１０６とを含んで構成される。
【００１１】
ＣＰＵ１０１は、情報処理装置１００の動作を制御するプロセッサである。ＲＯＭ１０２は、種々のデータが記憶される不揮発性の記憶装置である。ＲＡＭ１０３は、情報処理装置１００が実行する種々のプログラムの実行空間を提供する揮発性の記憶装置である。ＨＤＤ１０４は、本発明の難読化プログラムなどの種々のデータを持続的に保存可能な記憶装置である。
【００１２】
情報処理装置１００は、ＷＩＮＤＯＷＳ（登録商標）シリーズ、Ｍａｃ（登録商標）ＯＳ（Operating System）、ＵＮＩＸ（登録商標）、ＬＩＮＵＸ（登録商標）などの種々のＯＳの管理下で、ＨＤＤ１０４から本発明の難読化プログラムを読み出し、ＲＡＭ１０３に展開して実行することにより、難読化プログラムが備える機能を情報処理装置１００上に実現する。本発明の難読化プログラムは、アセンブラ、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）、ＪＡＶＡ  ＳＣＲＩＰＴ（登録商標）、ＰＥＲＬ、ＲＵＢＹ、ＰＹＴＨＯＮ、ＰＨＰ、ＶＩＳＵＡＬ  ＢＡＳＩＣ（登録商標）、ＣＯＢＯＬ、ＰＬ/ＳＱＬなどの様々なプログラミング言語で記述することができる。
【００１３】
ネットワークＩ／Ｆ１０５は、インターネットやＬＡＮ等の種々のネットワークと情報処理装置１００との間の通信を可能にする物理インタフェースである。外部装置Ｉ／Ｆ１０６は、ＵＳＢメモリ等の可搬型の記憶装置などの外部装置を情報処理装置１００に接続可能な物理インタフェースである。本実施形態では、ネットワークＩ／Ｆ１０５および／または外部装置Ｉ／Ｆ１０６を介して、本発明の難読化プログラムの処理対象のソースコードを取得することができる。
【００１４】
図２は、本発明の情報処理装置に実装される難読化プログラムの機能構成の一実施形態を示す図である。以下、図２を参照して、難読化プログラム２００の機能構成について説明する。
【００１５】
難読化プログラム２００は、ソースコード２０１を処理して難読化するプログラムである。難読化プログラム２００の処理対象であるソースコード２０１は、アセンブラ、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）、ＪＡＶＡ  ＳＣＲＩＰＴ（登録商標）、ＰＥＲＬ、ＲＵＢＹ、ＰＹＴＨＯＮ、ＰＨＰ、ＶＩＳＵＡＬ  ＢＡＳＩＣ（登録商標）、ＣＯＢＯＬ、ＰＬ/ＳＱＬなどの様々なプログラミング言語で記述される。
【００１６】
難読化プログラム２００は、ソースコード解析部２０２と、ソースコード変換部２０６とを有する。ソースコード解析部２０２は、ソースコード２０１を分解して変換対象を抽出する手段であり、ソースコード分解部２０３と、変換対象抽出部２０４とを含んで構成される。
【００１７】
ソースコード分解部２０３は、処理対象であるソースコード２０１を分解する手段である。ソースコード分解部２０３は、一般的なコンパイラの字句解析と同様に、言語仕様情報２０５を参照して、ソースコード２０１を記述したプログラミング言語で使用されるトークンを判断し、ソースコード２０１に記述された文字列を、変数名や関数名等のトークンに分解する。
【００１８】
言語仕様情報２０５は、ソースコード２０１のコーディングで使用されるプログラミング言語毎に、当該プログラミング言語の仕様で規定されているトークンを記述した情報である。ソースコード分解部２０３は、言語仕様情報２０５を参照することにより、ソースコード２０１を記述したプログラミング言語で使用されるトークンを判断することができる。言語仕様情報２０５は、情報処理装置１００のＲＡＭ１０３やＨＤＤ１０４等の記憶装置に格納される。他の実施形態では、情報処理装置１００が参照可能な外部のサーバ装置に格納してもよい。
【００１９】
変換対象抽出部２０４は、変換対象とすべきトークンを抽出する手段である。変換対象抽出部２０４は、ソースコード分解部２０３が分解したトークンの中から、ソースコード変換部２０６による変換を適用してもソースコード２０１の動作に影響を及ぼさないトークンを抽出し、ソースコード変換部２０６に提供する。
【００２０】
具体的には、変換対象抽出部２０４は、ソースコード２０１を記述したプログラミング言語の文法仕様に基づき、ソースコード２０１で新たに定義された変数名や関数名を判断し、これらを変換対象のトークンとして抽出する。変換対象抽出部２０４が抽出するトークンは、１の単語または複数の単語で構成される変数名や関数名である。
【００２１】
ソースコード変換部２０６は、ソースコード解析部２０２が提供する変換対象のトークンを変換する手段であり、単語分類部２０７と、単語変換部２０８とを含んで構成される。
【００２２】
単語分類部２０７は、変換対象のトークンを自然言語に分類する手段である。具体的には、単語分類部２０７は、自然言語のリストである分類情報２０９を参照し、変換対象のトークンを形態素解析して自然言語に分類する。分類情報２０９は、情報処理装置１００のＲＡＭ１０３やＨＤＤ１０４等の記憶装置に格納される。他の実施形態では、情報処理装置１００が参照可能な外部のサーバ装置に格納してもよい。
【００２３】
単語分類部２０７は、変換対象のトークンが複数の単語で構成される場合、変換対象のトークンを単語毎に分割し、複数の自然言語に分類する。一方、変換対象のトークンが１の単語で構成される場合には、単語分類部２０７は、当該単語を１の自然言語として分類する。
【００２４】
単語変換部２０８は、単語分類部２０７が分類した単語を、当該単語に対応する単語（以下、「対応語」とする。）に変換する手段である。本実施形態では、単語変換部２０８は、単語のリストと当該単語の反義語とで構成される変換情報２１０を参照し、変換対象の単語を、当該単語の対応語である反義語に変換する。他の実施形態では、変換対象の単語と綴りが類似する単語や変換対象の単語の類義語を、対応語として使用してもよい。
【００２５】
本実施形態では、変換情報２１０は、情報処理装置１００のＲＡＭ１０３やＨＤＤ１０４等の記憶装置に格納されるが、他の実施形態では、情報処理装置１００が参照可能な外部のサーバ装置に格納してもよい。
【００２６】
図３は、本発明の難読化プログラムが実行する難読化処理を示す概念図である。以下、図３を参照して、難読化処理について概説する。
【００２７】
ソースコード３００は、難読化プログラム２００の処理対象のソースコードである。図３に示す実施形態では、ソースコード３００には、画像データのパターンマッチング行う関数（Pattern_matching）が記述されている。ソースコード３１０は、ソースコード３００を、難読化プログラム２００で変換した後のソースコードである。
【００２８】
難読化処理では、まず、難読化プログラム２００のソースコード解析部２０２が、言語仕様情報２０５を参照し、ソースコード３００に記述されている文字列をトークンに分解する。図３に示す実施形態では、ソースコード解析部２０２は、ソースコード３００に記述されている文字列が、関数名（Pattern_matching）、括弧（{）、型（dw）、コロン（：）、変数名（width）、変数（length）および括弧（}）に分解される。
【００２９】
次に、ソースコード解析部２０２の変換対象抽出部２０４が、これらのトークンから変換対象のトークンを抽出する。図３に示す実施形態では、変換対象抽出部２０４は、関数名（Pattern_matching）、変数名（width）および変数（length）を抽出する。
【００３０】
次いで、ソースコード変換部２０６の単語分類部２０７が、ソースコード解析部２０２が抽出したトークンを自然言語に分類する。図３に示す実施形態では、単語分類部２０７は、自然言語（Pattern）、（matching）、（width）および（length）に分類する。そして、単語変換部２０８が、これらの自然言語の一部を反義語に変換する。本実施形態では、ソースコード変換部２０６は、自然言語（Pattern）および（matching）を、反義語（Character）および（mismatching）に変換し、変換後のソースコード３１０が生成される。
【００３１】
図４は、本発明の難読化プログラムが実行する処理を示すフローチャートである。以下、図４を参照して、難読化プログラム２００のソースコード変換部２０６が実行する処理について説明する。なお、ソースコード変換部２０６は、ソースコード解析部２０２が抽出した変換対象のトークン毎に、図４に示す処理を実行する。
【００３２】
図４の処理は、ステップＳ４００から開始し、ステップＳ４０１では、ソースコード変換部２０６の単語分類部２０７が、変換対象のトークンを形態素解析して自然言語に分類する。ステップＳ４０２では、単語分類部２０７は、変換対象のトークンが自然言語として分類できたか否か判断する。自然言語として分類できなかった場合には（ｎｏ）、ステップＳ４０６で処理が終了する。一方、自然言語として分類できた場合には（ｙｅｓ）、ステップＳ４０３に処理が分岐する。
【００３３】
ステップＳ４０３では、単語変換部２０８が、変換情報２１０を参照し、単語分類部２０７が分類した自然言語の反義語が存在するか否か判断する。当該分類した自然言語の反義語が存在しない場合には（ｎｏ）、ステップＳ４０６で処理が終了する。一方、反義語が存在する場合には（ｙｅｓ）、ステップＳ４０４に処理が分岐する。
【００３４】
ステップＳ４０４では、単語変換部２０８が、ステップＳ４０３で反義語が存在すると判断した自然言語に対して変換を行うか否か判断する。本実施形態では、単語変換部２０８は、処理対象のソースコードに対する図４の処理の実行回数を計数し、当該実行回数が奇数または偶数の場合に、当該自然言語に対する変換を行うと判断する。他の実施形態では、単語変換部２０８が乱数列を生成し、図４の処理の実行回数が当該乱数列を構成する値と合致する場合に、当該自然言語に対する変換を行うと判断してもよい。
【００３５】
ステップＳ４０４で自然言語の変換を行わないと判断した場合には（ｎｏ）、ステップＳ４０６で処理が終了する。一方、ステップＳ４０４で自然言語の変換を行うと判断した場合には（ｙｅｓ）、ステップＳ４０５に処理が分岐する。ステップＳ４０５では、単語変換部２０８は、変換情報２１０を参照し、当該自然言語を反義語に変換し、ステップＳ４０６で処理が終了する。
【００３６】
本実施形態では、単語変換部２０８は、反義語が存在する自然言語の一部について変換を行うため、総ての自然言語を変換する実施形態と比較して、ソースコードの解読を困難にすることができる。他の実施形態では、反義語が存在する総ての自然言語を変換してもよい。
【００３７】
これまで本発明について説明してきたが、本発明は、上述した実施形態に限定されるものではなく、上述した実施形態の構成要素を変更若しくは削除し、または上述した実施形態の構成要素に他の構成要素を追加するなど、当業者が想到することができる範囲内で変更することができる。いずれの態様においても本発明の作用効果を奏する限り、本発明の範囲に含まれるものである。
【符号の説明】
【００３８】
２００…難読化プログラム、２０１…ソースコード、２０２…ソースコード解析部、２０３…ソースコード分解部、２０４…変換対象抽出部、２０５…言語仕様情報、２０６…ソースコード変換部、２０７…単語抽出部、２０８…単語変換部、２０９…分類情報、２１０…変換情報、２１１…変換後ソースコード
【先行技術文献】
【特許文献】
【００３９】
【特許文献１】特開２００６−２３５６８８
【図１】
2014191526.tif 000003
【図２】
2014191526.tif 000004
【図３】
2014191526.tif 000005
【図４】
2014191526.tif 000006