(57)【要約】      （修正有）【課題】難読化技術の一つである、プログラム中の変数を演算装置によって線形変換して符号化を施す符号化方法において、ソフトウェアに含まれるバイト長の異なる複数の変数を同時に符号化できるようにする。【解決手段】ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割し、分割された変数を含むソフトウェアを変換する。これにより、バイト長が長い変数を複数の変数に分割できるため、任意のデータ長の変数、すなわち、すべての型の変数を符号化することが可能となる。【選択図】図６
2011209801.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置であって、
前記ソフトウェアに含まれる変数のうちバイト長が異なる複数の変数を同時に符号化することを特徴とするソフトウェアの難読化装置。
【請求項２】
ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置であって、
前記ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する分割手段と、
該分割された変数を含むソフトウェアを変換する変換手段と、
を備えたことを特徴とするソフトウェアの難読化装置。
【請求項３】
前記変換手段が、
符号化の対象となる変数を選択する選択手段と、
該選択した符号化変数からｍ個の符号化変数を決定する符号化変数決定手段と、
符号化ルールおよび復号化ルールを決定するルール決定手段と、
ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換え手段と、
変換したソフトウェアを正しく実行できるように修正する修正手段と、
を備えたことを特徴とする請求項３に記載のソフトウェアの難読化装置。
【請求項４】
前記置き換え手段が、
代入が行われている対象変数を置換する第１の置換手段と、
参照が行われている対象変数を置換する第２の置換手段と、
を備えたことを特徴とする請求項４に記載のソフトウェアの難読化装置。
【請求項５】
前記修正手段が、
符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加する追加手段と、
前記第１の置換手段で置換した代入命令を実行できる命令列に変換する変換手段と、
を備えたことを特徴とする請求項４に記載のソフトウェアの難読化装置。
【請求項６】
ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置におけるソフトウェアの難読化方法であって、
前記ソフトウェアに含まれる変数のうちバイト長が異なる複数の変数を同時に符号化することを特徴とするソフトウェアの難読化方法。
【請求項７】
ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置におけるソフトウェアの難読化方法であって、
前記ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する第１のステップと、
該分割された変数を含むソフトウェアを変換する第２のステップと、
を備えたことを特徴とするソフトウェアの難読化方法。
【請求項８】
前記第２のステップが、
符号化の対象となる変数を選択する変数選択ステップと、
該選択した符号化変数からｍ個の符号化変数を決定する符号化変数決定ステップと、
符号化ルールおよび復号化ルールを決定するルール決定ステップと、
ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換えステップと、
変換したソフトウェアを正しく実行できるように修正する修正ステップと、
を備えたことを特徴とする請求項７に記載のソフトウェアの難読化方法。
【請求項９】
前記置き換えステップが、
代入が行われている対象変数を置換するステップと、
参照が行われている対象変数を置換するステップと、
を備えたことを特徴とする請求項８に記載のソフトウェアの難読化方法。
【請求項１０】
前記修正ステップが、
符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加するステップと、
前記置換した代入命令を実行できる命令列に変換するステップと、
を備えたことを特徴とする請求項８に記載のソフトウェアの難読化方法。
【請求項１１】
ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置におけるソフトウェアの難読化方法をコンピュータに実行させるためのプログラムであって、
前記ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する第１のステップと、
該分割された変数を含むソフトウェアを変換する第２のステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアに含まれる任意変数の符号化を行うソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラムに関する。
【背景技術】
【０００２】
ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方では、ソフトウェアを解析するための技術（ＲＥ：Ｒｅｖｅｒｓｅ Ｅｎｇｉｎｅｅｒｉｎｇ）が数多く開発されている。このため、これらの技術によりソフトウェアが解析されると、不正者が秘密情報を入手するという脅威が考えられる。この脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。
【０００３】
この一例として、プログラム中の変数を演算装置によって線形変換して符号化を施す符号化方法であって、符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択し、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成する。そして、生成した行列およびベクトルを変換鍵として前記ｎ個の変数を線形変換して同時にｍ個の整数に符号化する。これにより、元のプログラムで用いられている変数の個数、ならびに当該変数間の参照・代入関係を秘匿し、かつ、秘密鍵の候補数を多くして耐性の高いプログラムの難読化を行う技術が開示されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−０７９３４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の方式では、符号化の対象が同じバイト長の変数のみに限られるという制約がある。このため、例えば整数型（ｉｎｔ型）変数と倍精度浮動小数型（ｄｏｕｌｅ型）変数を同時に符号化することは不可能であるといった問題があった。（ここで、ｄｏｕｂｌｅ型変数は８バイト、ｉｎｔ型は４バイトであるものとする。また、処理系のエンディアンは、リトルエンディアンとする。）
【０００６】
そこで、本発明は、上述の課題に鑑みてなされたものであり、ソフトウェアに含まれるバイト長の異なる複数の変数を同時に符号化するソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
【０００８】
（１）本発明は、ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置であって、前記ソフトウェアに含まれる変数のうちバイト長が異なる複数の変数を同時に符号化することを特徴とするソフトウェアの難読化装置を提案している。
【０００９】
この発明によれば、ソフトウェアに含まれる変数のうちバイト長が異なる複数の変数を同時に符号化する。任意のデータ長の変数、すなわち、すべての型の変数を符号化することが可能となる。このことにより、セマンティクスが異なる複数のデータまとめて変換できるようになり、従来の技術よりも安全性が向上する。
【００１０】
（２）本発明は、ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置であって、前記ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する分割手段（例えば、図１の分割部１００に相当）と、該分割された変数を含むソフトウェアを変換する変換手段（例えば、図１の変換部２００に相当）と、を備えたことを特徴とするソフトウェアの難読化装置を提案している。
【００１１】
この発明によれば、分割手段は、ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する。変換手段は、分割された変数を含むソフトウェアを変換する。したがって、分割手段により、バイト長が長い変数を複数の変数に分割できるため、任意のデータ長の変数、すなわち、すべての型の変数を符号化することが可能となる。なお、ここで、共用体とは、複数の変数が同一のメモリ領域を共有する構造を指し、共用体を用いることで、バイト長が大きな変数を複数の変数に分割して、既存方式で符号化できる．例えば、倍精度浮動小数点型変数（ｄｏｕｂｌｅ）型変数は、２つの整数（ｉｎｔ）型変数に分割できる。
【００１２】
（３）本発明は、（２）のソフトウェアの難読化装置について、前記変換手段が、符号化の対象となる変数を選択する選択手段（例えば、図３の選択部２１０に相当）と、該選択した符号化変数からｍ個の符号化変数を決定する符号化変数決定手段（例えば、図３の符号化変数決定部２２０に相当）と、符号化ルールおよび復号化ルールを決定するルール決定手段（例えば、図３のルール決定部２３０に相当）と、ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換え手段（例えば、図３の置き換え部２４０に相当）と、変換したソフトウェアを正しく実行できるように修正する修正手段（例えば、図３の修正部２５０に相当）と、を備えたことを特徴とするソフトウェアの難読化装置を提案している。
【００１３】
この発明によれば、選択手段は、符号化の対象となる変数を選択し、符号化変数決定手段は、選択した符号化変数からｍ個の符号化変数を決定する。そして、ルール決定手段が、符号化ルールおよび復号化ルールを決定し、置き換え手段が、ソフトウェア内の符号化変数を他の符号化変数に置き換え、修正手段が変換したソフトウェアを正しく実行できるように修正する。したがって、ソフトウェアを変換することによって、ソフトウェアの難読化を実現することができる。
【００１４】
（４）本発明は、（３）のソフトウェアの難読化装置について、前記置き換え手段が、代入が行われている対象変数を置換する第１の置換手段（例えば、図４の第１の置換部２４１に相当）と、参照が行われている対象変数を置換する第２の置換手段（例えば、図４の第２の置換部２４２に相当）と、を備えたことを特徴とするソフトウェアの難読化装置を提案している。
【００１５】
この発明によれば、第１の置換手段は、代入が行われている対象変数を置換し、第２の置換手段は、参照が行われている対象変数を置換する。これにより、効果的に難読化を実行することができる。
【００１６】
（５）本発明は、（４）のソフトウェアの難読化装置について、前記修正手段が、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加する追加手段（例えば、図５の追加部２５１に相当）と、前記第１の置換手段で置換した代入命令を実行できる命令列に変換する変換手段（例えば、図５の変換部２５２に相当）と、を備えたことを特徴とするソフトウェアの難読化装置を提案している。
【００１７】
この発明によれば、追加手段は、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加し、変換手段は、第１の置換手段で置換した代入命令を実行できる命令列に変換する。したがって、この処理により、難読化を図りつつ、実行可能なソフトウェアとすることができる。
【００１８】
（６）本発明は、ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置におけるソフトウェアの難読化方法であって、前記ソフトウェアに含まれる変数のうちバイト長が異なる複数の変数を同時に符号化することを特徴とするソフトウェアの難読化方法を提案している。
【００１９】
この発明によれば、ソフトウェアに含まれる変数のうちバイト長が異なる複数の変数を同時に符号化する。任意のデータ長の変数、すなわち、すべての型の変数を符号化することが可能となる。このことにより、セマンティクスが異なる複数のデータまとめて変換できるようになり、従来の技術よりも安全性が向上する。
【００２０】
（７）本発明は、ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置におけるソフトウェアの難読化方法であって、前記ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する第１のステップ（例えば、図６のステップＳ１０１に相当）と、該分割された変数を含むソフトウェアを変換する第２のステップ（例えば、図６のステップＳ１０２に相当）と、を備えたことを特徴とするソフトウェアの難読化方法を提案している。
【００２１】
この発明によれば、ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割し、分割された変数を含むソフトウェアを変換する。したがって、バイト長が長い変数を複数の変数に分割できるため、任意のデータ長の変数、すなわち、すべての型の変数を符号化することが可能となる。なお、ここで、共用体とは、複数の変数が同一のメモリ領域を共有する構造を指し、共用体を用いることで、バイト長が大きな変数を複数の変数に分割して、既存方式で符号化できる．例えば、倍精度浮動小数点型変数（ｄｏｕｂｌｅ）型変数は、２つの整数（ｉｎｔ）型変数に分割できる。
【００２２】
（８）本発明は、（７）のソフトウェアの難読化方法について、前記第２のステップが、符号化の対象となる変数を選択する変数選択ステップと、該選択した符号化変数からｍ個の符号化変数を決定する符号化変数決定ステップと、符号化ルールおよび復号化ルールを決定するルール決定ステップと、ソフトウェア内の符号化変数を他の符号化変数に置き換える置き換えステップと、変換したソフトウェアを正しく実行できるように修正する修正ステップと、を備えたことを特徴とするソフトウェアの難読化方法を提案している。
【００２３】
この発明によれば、符号化の対象となる変数を選択し、選択した符号化変数からｍ個の符号化変数を決定して、符号化ルールおよび復号化ルールを決定する。そして、ソフトウェア内の符号化変数を他の符号化変数に置き換え、変換したソフトウェアを正しく実行できるように修正する。したがって、ソフトウェアを変換することによって、ソフトウェアの難読化を実現することができる。
【００２４】
（９）本発明は、（８）のソフトウェアの難読化方法について、前記置き換えステップが、代入が行われている対象変数を置換するステップと、参照が行われている対象変数を置換するステップと、を備えたことを特徴とするソフトウェアの難読化方法を提案している。
【００２５】
この発明によれば、代入が行われている対象変数を置換し、参照が行われている対象変数を置換する。これにより、効果的に難読化を実行することができる。
【００２６】
（１０）本発明は、（８）のソフトウェアの難読化方法について、前記修正ステップが、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加するステップと、前記置換した代入命令を実行できる命令列に変換するステップと、を備えたことを特徴とするソフトウェアの難読化方法を提案している。
【００２７】
この発明によれば、符号化変数およびこれらの変数の値を退避するための一次変数の定義を追加し、置換した代入命令を実行できる命令列に変換する。したがって、この処理により、難読化を図りつつ、実行可能なソフトウェアとすることができる。
【００２８】
（１１）本発明は、ソフトウェアに含まれるデータを符号化し、ソフトウェアの解析を困難にするソフトウェアの難読化装置におけるソフトウェアの難読化方法をコンピュータに実行させるためのプログラムであって、前記ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する第１のステップ（例えば、図６のステップＳ１０１に相当）と、該分割された変数を含むソフトウェアを変換する第２のステップ（例えば、図６のステップＳ１０２に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００２９】
この発明によれば、ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割し、分割された変数を含むソフトウェアを変換する。したがって、バイト長が長い変数を複数の変数に分割できるため、任意のデータ長の変数、すなわち、すべての型の変数を符号化することが可能となる。なお、ここで、共用体とは、複数の変数が同一のメモリ領域を共有する構造を指し、共用体を用いることで、バイト長が大きな変数を複数の変数に分割して、既存方式で符号化できる．例えば、倍精度浮動小数点型変数（ｄｏｕｂｌｅ）型変数は、２つの整数（ｉｎｔ）型変数に分割できる。
【発明の効果】
【００３０】
本発明によれば、任意のデータ長の変数、すなわち、すべての型の変数を符号化することが可能となる。このことにより、セマンティクスが異なる複数のデータまとめて変換できるようになり、従来の技術よりも安全性が向上するという効果がある。
【図面の簡単な説明】
【００３１】
【図１】本発明のソフトウェアの難読化装置の構成を示す図である。
【図２】共用体を説明するための図である。
【図３】本発明の変換部の詳細な構成を示す図である。
【図４】本発明の置き換え部の詳細な構成を示す図である。
【図５】本発明の修正部の詳細な構成を示す図である。
【図６】本発明のソフトウェアの難読化装置の処理フローである。
【図７】実施例に係る元のソフトウェアのソースコードを例示した図である。
【図８】実施例に係る変数変換されたソフトウェアのソースコードを例示した図である。
【図９】実施例に係る難読化後のソフトウェアのソースコードを例示した図である。
【発明を実施するための形態】
【００３２】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００３３】
＜ソフトウェアの難読化装置の構成＞
本実施形態に係るソフトウェアの難読化装置は、図１に示すように、分割部１００と、変換部２００とから構成されている。
【００３４】
分割部１００は、ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する。変換部２００は、分割された変数を含むソフトウェアを変換する。
【００３５】
＜共用体について＞
分割部１００で用いられる共用体について説明する。
共用体とは、複数の変数が同一のメモリ領域を共有する構造を指す。共用体を用いることで、バイト長が大きな変数を複数の変数に分割して、既存方式で符号化できる。例えば、倍精度浮動小数点型変数（ｄｏｕｂｌｅ）型変数は、２つの整数（ｉｎｔ）型変数に分割できる。図２に、共用体の例を示す。定義されたＤＡＴＡ型変数ｄａｔは、そのメンバ変数ｄａｔ．ｄをｄｏｕｂｌｅ型変数として利用できる。一方で、メンバ変数ｄａｔ．ｉ［０］をこのｄｏｕｂｌｅ型変数の下位４バイトを操作するためのｉｎｔ型変数として利用できる。また、ｄａｔ．ｉ［１］も同様に、上位４バイトを操作するためのｉｎｔ型変数として利用できる。
【００３６】
＜変換部の内部構成＞
図３に示すように、変換部２００は、さらに、選択部２１０と、符号化変数決定部２２０と、ルール決定部２３０と、置き換え部２４０と、修正部２５０とから構成されている。
【００３７】
なお、以下では、対象ソフトウェアには、Ｎ個の変数、ｘ１、ｘ２、・・・、ｘｎが含まれているものとし、変数ｘ１に格納される値が実行結果として出力されているものと仮定して、一般性を失わないものとする。また、実行結果を格納する変数が複数存在する場合も、１つの変数に実行結果を格納するソフトウェアが複数存在するものとみなすことで、個々のソフトウェアについて同様に扱うことができる。
【００３８】
選択部２１０は、符号化の対象とするｎ個の変数ｘ１、ｘ２、・・・、ｘｎを選択する。ここで、実行結果が格納される変数ｘ１は、符号化対象として選択する必要がある。また、個数ｎは、任意であり、安全性を高くする場合には、より大きな値を選択し、実行効率を高くする場合には、より小さな値を選択する。但し、以下の変数は、符号化対象から除外するものとする。１）利用者の入力が直接書き込まれる変数。２）アドレス演算子により当該変数のアドレスが取得されている変数。
【００３９】
符号化変数決定部２２０は、ｍ個の符号化変数ｙ１、ｙ２、・・・、ｙｍを決定する。ここで、個数ｍは、符号化対象変数の個数ｎよりも大きく設定する。なお、安全性を高くする場合には、より大きな値を選択し、実行効率を高くする場合には、より小さな値を選択する。
【００４０】
ルール決定部２３０は、ｍ行ｎ列のプール行列Ａとｍ次元の整数型ベクトルｂを任意に決定する。但し、行列Ａは、ランクがｎとなるように選択する。行列Ａと整数型ベクトルｂとにより、以下の関係式数１を構成する。
【００４１】
【数１】
2011209801.tif 000003
【００４２】
上式の各行を符号化ルールとすると、数２のようになる。
【００４３】
【数２】
2011209801.tif 000004
【００４４】
次に、符号化ルールを未知変数ｘ１、ｘ２、・・・、ｘｎに対する連立方程式とみなし、解くことにより、数３を得る。
【００４５】
【数３】
2011209801.tif 000005
【００４６】
この各式を復号ルールとする。なお、上記の連立方程式を解く過程では、ｎ個の符号化ルールが使われる。使われなかった符号化ルールに含まれる変数ｘ１、ｘ２、・・・、ｘｎを復号ルールを用いて符号化変数に置き換えることで、ｍ−ｎ個の非自明な関係式が得られる。ここで、符号化変数ｙ１、ｙ２、・・・、ｙｍは、常にこれらの関係式をみたす。
【００４７】
置き換え部２４０は、プログラム内の符号化対象変数ｘ１、ｘ２、・・・、ｘｎを、符号化変数ｙ１、ｙ２、・・・、ｙｍで置き換える、まず、代入が行われている変数を符号化変数に置き換え、次に、参照が行われている変数を符号化変数に置き換える。
【００４８】
具体的には、図４に示す第１の置換部２４１が代入命令ｘｉ←ｆを以下、数４に示す命令に置き換える。
【００４９】
【数４】
2011209801.tif 000006
【００５０】
これにより、右辺の関数ｅ１、ｅ２、・・・、ｅｍにおいては、代入が行われる対象変数ｘｉが、式ｆに置換されている。
【００５１】
また、図４に示す第２の置換部２４２は、上記の処理で得られた命令列において、参照されている対象変数ｘ１、ｘ２、・・・、ｘｎを、それぞれ、復号ルールｄ１、ｄ２、・・・、ｄｎで置き換え、式を整理する。
【００５２】
修正部２５０は、変換したソフトウェアを正しく実行できるようにするため、修正する。具体的には、図５に示す追加部２５１が符号化変数ｙ１、ｙ２、・・・、ｙｍおよびこれらの変数の値を退避するための一時変数ｔ１、ｔ２、・・・、ｔｍの定義を追加する。
【００５３】
また、図５に示す変換部２５２は、第１の置換部２４１で変換した命令を逐次実行できる命令列に変換する。つまり、数５に示す命令列を数６に示す命令列に変更する。このように、更新前の符号化変数の値を一時変数に退避しておくことで、更新後の符号化変数の値を順次計算できる。ここで、関数ｅ１´、ｅ２´、・・・、ｅｍ´は、それぞれ、関数ｅ１、ｅ２、・・・、ｅｍにおいて、符号化変数ｙ１、ｙ２、・・・、ｙｍを一時変数ｔ１、ｔ２、・・・、ｔｍで置き換えたものである。
【００５４】
【数５】
2011209801.tif 000007
【００５５】
【数６】
2011209801.tif 000008
【００５６】
＜ソフトウェアの難読化装置の処理＞
図６を用いて、本実施形態に係るソフトウェアの難読化装置の処理について説明する。
【００５７】
まず、分割部１００が、ソフトウェアに含まれる変数のうちバイト長が長い変数を共用体を用いて複数の変数に分割する（ステップＳ１０１）。そして、変換部２００が分割された変数を含むソフトウェアを変換する（ステップＳ１０２）。
【００５８】
なお、変換部２００においては、上述のように、選択処理、符号化変数決定処理、ルール決定処理、置き換え処理、修正処理が行われる。
【００５９】
したがって、本実施形態によれば、任意のデータ長の変数、すなわち、すべての型の変数を符号化することが可能となる。このことにより、セマンティクスが異なる複数のデータまとめて変換できるようになり、従来の技術よりも安全性が向上する。
【００６０】
＜実施例＞
図７は、難読化前のソースコードであり、本実施例では、区分求積により、関数ｆの区間［ａ；ｂ］における定積分を求める関数の変換例を示す。
【００６１】
ここで、変数の符号化に用いたルールは、数７に示すとおりである。但し、ｓｕｍＨは、ｓｕｍの上位４バイトを、ｓｕｍＬは下位４バイトを意味する。図８に変数変換を導入したソースコードを、図９に難読化後のソースコードを示す。
【００６２】
【数７】
2011209801.tif 000009
【００６３】
なお、ソフトウェアの難読化装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをソフトウェアの難読化装置に読み込ませ、実行することによって本発明のソフトウェアの難読化装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００６４】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００６５】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００６６】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００６７】
１００；分割部
２００；変換部
２１０；選択部
２２０；符号化変数決定部
２３０；ルール決定部
２４０；置き換え部
２４１；第１の置換部
２４２；第２の置換部
２５０；修正部
２５１；追加部
２５２；変換部
【図１】
2011209801.tif 000010
【図２】
2011209801.tif 000011
【図３】
2011209801.tif 000012
【図４】
2011209801.tif 000013
【図５】
2011209801.tif 000014
【図６】
2011209801.tif 000015
【図７】
2011209801.tif 000016
【図８】
2011209801.tif 000017
【図９】
2011209801.tif 000018