以下、本発明の実施の形態を説明する。図1は本実施の形態の情報処理装置100の構成の第1例を示すブロック図である。情報処理装置100は、装置全体を制御する制御部101、取得部102、シンボル情報抽出部103、偽シンボル情報生成部104、出力部105、記憶部106、復元用モジュール生成部107を備える。情報処理装置100は、例えば、サーバ等で構成することができ、通信ネットワークを介して、ユーザ端末10との間で情報の授受を行うことができる。情報処理装置100は、ユーザ端末10から、ユーザのアプリケーション(プログラム)の実行可能ファイル(バイナリファイル)を取得すると、所定の処理を行うことによって、ユーザ端末10に対して、偽シンボル情報を含む実行可能ファイルを出力することができる。以下、情報処理装置100の詳細について説明する。
制御部101は、CPU、ROM、RAMなどで構成することができる。記憶部106は、ROM、フラッシュメモリ、HDDなどの磁気記憶装置などで構成することができ、所要の情報を記憶することができる。
取得部102は、ユーザ端末10から、ユーザのアプリケーションの実行可能ファイルを取得することができる。なお、実行可能ファイルの取得先は、ユーザ端末10に限定されない。
シンボル情報抽出部103は、抽出部としての機能を有し、取得部102で取得した実行可能ファイルからシンボル情報を抽出する。
図2はシンボル情報の一例を示す模式図である。シンボル情報は、シンボルテーブルとも称する。シンボル情報は、コンピュータプログラムで使われるデータ構造であり、コンピュータプログラムのソースコード内の各識別子(名前)と、それぞれの内容(データ型、メモリ上の配置位置などの情報を含む)とのリンク関係を定めるテーブルのようなものである。すなわち、シンボル情報は、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と当該識別子の内容とを所定の仕様により関連付ける情報である。識別子は、シンボルとも称し、例えば、変数名や関数名などの名前である。実行可能ファイルに変換する際の入力情報とするソースファイルは、ユーザがソースファイルを作成する際に命名した識別子が変更されることなく記載されているソースファイルだけでなく、ユーザが命名した識別子を変更できるツール(例えば、Obfascatorなど)によって、変更された識別子が記載されているソースファイルも含む意味である。識別子の内容は、変数や関数のメモリアドレス(メモリ上の位置)、データ型などを含む。所定の仕様とは、アプリケーション(プログラム)用のOS(オペレーティングシステム)や開発エンジン(例えば、Unity(登録商標)など)で定められているシンボル情報のフォーマットや約束事を意味する。図2に示すように、シンボルの名前「T_BIT」は、データ型が「a」であり、メモリアドレスが「00000020」であるというリンク関係が定められている。他のシンボルについても同様である。なお、図2に示すシンボル情報は、一例であって、シンボル情報は、図2の例に限定されない。例えば、リリースバージョンのプログラムに比べて、デバッグバージョンのシンボル情報の方が情報量は多い。これは、デバッグ情報を含むからである。
偽シンボル情報は、シンボル情報の所定の仕様に従いつつシンボル情報を攪乱したものとすることができる。ここで、攪乱は、改変とも称し、暗号化や難読化(所定の仕様を充足しない処理)とは異なる処理であることを意味する。すなわち偽シンボル情報は、所定の仕様(OSや開発エンジン(例えば、Unityなど)が定める約束事)に従っている事を特徴としている。なお、本明細書では、シンボル情報を、「元のシンボル情報」とも称し、偽シンボル情報と区別する。偽シンボル情報は、シンボル情報を改変したものである。
偽シンボル情報生成部104は、生成部としての機能を有し、所定の仕様により関連付けられた偽シンボル情報をソースファイルの実行可能ファイル用に生成する。所定の仕様は、元のシンボル情報の所定の仕様と同じ仕様に従っているという意味である。より具体的には、偽シンボル情報生成部104は、シンボル情報抽出部103で抽出したシンボル情報から、識別子と識別子の内容とが、抽出したシンボル情報の仕様と同じ仕様により関連付けられた偽シンボル情報を生成することができる。
偽シンボル情報がシンボル情報と同じ所定の仕様に従って生成されているので、攻撃者から見ると、実行可能ファイル用に生成された偽シンボル情報は、本来のシンボル情報と認識するしか術がない。なぜならシンボル情報を攻撃者から守るために暗号化や難読化したものではない。すなわち、攻撃者が使用する各種ツール(例えば、IL2CppDumperなど)の使用において、何ら問題を発生させないので、攻撃者に対して、偽シンボル情報を正しいシンボル情報であると誤認識させることができる。これにより、攻撃者は各種ツールを駆使して多大な労力やコストをかけても、偽シンボル情報は、元のシンボル情報が攪乱されているので、アプリケーションの解析・分析を困難にすることができる。
また、ユーザ端末10から実行可能ファイルを取得するだけで(ユーザ端末10から見ると、実行可能ファイルを情報処理装置100にアップロードするだけで)、実行可能ファイル用の偽シンボル情報を生成することができ、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。すなわち、ユーザの実行可能ファイル(実行コード)に対して偽シンボル情報を生成するので、ユーザの実行コードに含まれるシンボル情報を攪乱することができ、シンボル情報に対して、攻撃者の解析・分析の契機を与えることなく、アプリケーションの解析・分析を困難にすることができる。
次に、偽シンボル情報の生成方法について説明する。
図3は偽シンボル情報の生成方法の第1例を示す模式図である。図3に示すように、元のシンボル情報においては、アドレス:00000020とシンボルの名前「T_BIT」とが関連付けられ(リンク関係にあり)、アドレス:00000080とシンボルの名前「I_BIT」とが関係付けられているのに対して、偽シンボル情報においては、アドレス:00000020とシンボルの名前「I_BIT」とが関連付けられ、アドレス:00000080とシンボルの名前「T_BIT」とが関係付けられている。
このように、偽シンボル情報生成部104は、識別子と当該識別子のメモリアドレスとのリンク関係を改変して偽シンボル情報を生成することができる。
偽シンボル情報は、元のシンボル情報と同じ所定の仕様に従っており、攻撃者が偽シンボル情報を解析・分析すると、シンボル「I_BIT」の中身はアドレス:00000020にあり、シンボル「T_BIT」の中身はアドレス:00000080にあると認識する。しかし、元のシンボル情報に基けば、シンボル「T_BIT」の中身はアドレス:00000020にあり、シンボル「I_BIT」の中身はアドレス:00000080にあるので、偽シンボル情報によってリンク関係が攪乱されており、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。
また、図3に示すように、元のシンボル情報においては、アドレス:20000004とシンボルのデータ型「t」とが関連付けられ、アドレス:20000030とシンボルのデータ型「T」とが関係付けられているのに対して、偽シンボル情報においては、アドレス:20000004とシンボルのデータ型「T」とが関連付けられ、アドレス:20000030とシンボルのデータ型「t」とが関係付けられている。
このように、偽シンボル情報生成部104は、識別子と当該識別子のデータ型とのリンク関係を改変して偽シンボル情報を生成することができる。
偽シンボル情報は、元のシンボル情報と同じ所定の仕様に従っており、攻撃者が偽シンボル情報を解析・分析すると、シンボル「irqvec」のデータ型は「T」であり、シンボル「AT91F_US3_CfgPIO_useB」のデータ型は「t」であると認識する。しかし、元のシンボル情報に基けば、シンボル「irqvec」のデータ型は「t」であり、シンボル「AT91F_US3_CfgPIO_useB」のデータ型は「T」であるので、偽シンボル情報によってリンク関係が攪乱されており、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。なお、シンボル名の桁数(サイズ)が同じシンボルだけに対して並び替えることもできる。同じサイズであれば、メモリ上の位置を変えても先頭のアドレスは変わらないので、他の情報を移動させることなく、入れ替えが可能となる。
図4は偽シンボル情報の生成方法の第2例を示す模式図である。図4に示すように、元のシンボル情報においては、シンボル「I_BIT」とアドレス:00000080及びデータ型「a」とが関連付けられているのに対し、偽シンボル情報においては、シンボル「I_BIT」のエントリーが除去されている。また、元のシンボル情報においては、シンボル「InitReset」とアドレス:2000000c及びデータ型「t」とが関連付けられているのに対し、偽シンボル情報においては、シンボル「InitReset」のエントリーが削除されている。削除されたエントリーは、例えば、堅牢化(実行コードの暗号化や難読化、デバッガのアタッチ阻止、定数データの暗号化や隠蔽などの手法を用いて、クラッカーから実行アプリケーションの解析を防御・困難にする仕組みの一つ)して、堅牢化前のアプリケーションと比較して、拡張した実行コード領域や拡張した定数領域などに保存することができ、復元する際に利用できる。
このように、偽シンボル情報生成部104は、識別子と当該識別子のメモリアドレス(又は、データ型)とのリンク関係の一部を削除して偽シンボル情報を生成することができる。
偽シンボル情報は、元のシンボル情報と同じ所定の仕様に従っており、攻撃者が偽シンボル情報を解析・分析すると、シンボルとアドレス(又はデータ型)とのリンク関係が削除されているので、攻撃者は、削除されたシンボルとアドレス(又はデータ型)とのリンク関係が存在することに気づかない。すなわち、偽シンボル情報によってリンク関係が攪乱されており、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。
復元用モジュール生成部107は、偽シンボル情報生成部104が元のシンボル情報を改変して偽シンボル情報を生成するアルゴリズムを反映した復元用のアルゴリズムを有する復元用モジュールを生成することができる。
出力部105は、偽シンボル情報生成部104で生成した偽シンボル情報を含む実行可能ファイル及び偽シンボル情報を復元する復元用モジュールを、例えば、ユーザ端末10に対して出力することができる。これにより、ユーザ側では、アプリケーションを実行するための端末装置において、アプリケーションを実行する際に(例えば、アプリケーションを実行する前に、あるいは実行中であって所要のシンボル情報を参照する前に)、復元用モジュールによって偽シンボル情報を元のシンボル情報に復元できるので、アプリケーションの耐タンパ性を高めつつ、アプリケーションを実行することができる。なお、情報処理装置100がユーザ端末10であってもよい。すなわち、ユーザ端末10に情報処理装置100の各機能を組み込むようにしてもよい。
図5は本実施の形態の情報処理装置120の構成の第2例を示すブロック図である。情報処理装置120は、装置全体を制御する制御部101、取得部122、変換部123、偽シンボル情報生成部124、出力部105、記憶部106、復元用モジュール生成部107を備える。図1に示す情報処理装置100と同様の箇所は同一符号を付して説明を省略する。情報処理装置120は、例えば、コンパイラやリンカを有し、ユーザのソースファイルを実行可能ファイルに変換する変換ツールとすることができる。なお、情報処理装置120がユーザ端末10であってもよい。すなわち、ユーザ端末10に情報処理装置120の各機能を組み込むようにしてもよい。
取得部122は、ソースファイルを取得する。
変換部123は、取得部122で取得したソースファイルを実行可能ファイルに変換する。変換部123は、例えば、コンパイラ及びリンカで構成することができる。コンパイラによりソースファイルをオブジェクトファイルに変換し、リンカにより他のオブジェクトファイルやライブラリとリンクさせることにより、実行可能ファイル(バイナリファイル)に変換することができる。
偽シンボル情報生成部124は、ソースファイル内の識別子と当該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、当該所定の仕様により関連付けられた偽シンボル情報を変換部123が変換した実行可能ファイル用に生成することができる。
図6はシンボル情報を改変しない場合のソースファイルから実行可能ファイルへの変換の様子の一例を示す模式図である。図6に示すように、ソースファイルは、code1.cppとcode2.cppの2つあるとし、ソースファイルcode1.cppでは、関数AddFunc(足し算の関数)が定義され、ソースファイルcode2.cppでは、関数SubFunc(引き算の関数)が定義されている。コンパイラによってソースファイルcode1.cppはオブジェクトファイルcode1.objに変換される。オブジェクトファイルcode1.objには、シンボル「AddFunc」とアドレス:0x0034とが関連付けられている。同様に、コンパイラによってソースファイルcode2.cppはオブジェクトファイルcode2.objに変換される。オブジェクトファイルcode2.objには、シンボル「SubFunc」とアドレス:0x0034とが関連付けられている。
次に、リンカによって、2つのオブジェクトファイルcode1.obj、code2.objがリンクされて実行可能ファイル(バイナリファイル)に変換される。このときに、シンボル「AddFunc」とアドレス:0x0100とが関連付けられ、シンボル「SubFunc」とアドレス:0x0104とが関連付けられたシンボル情報が生成される。
図7はシンボル情報を改変する場合のソースファイルから実行可能ファイルへの変換の様子の一例を示す模式図である。コンパイラによる処理は、図6の場合と同様であるので説明は省略する。
図7に示すように、リンカによって、2つのオブジェクトファイルcode1.obj、code2.objがリンクされて実行可能ファイル(バイナリファイル)に変換される。このときに、偽シンボル情報生成部124は、例えば、シンボル「AddFunc」とアドレス:0x0104とを関連付け、シンボル「SubFunc」とアドレス:0x0100とを関連付けることにより、元のシンボル情報を改変して偽シンボル情報を生成する。
これにより、コンパイラやリンカを用いてソースファイルから実行可能ファイルに変換する際に、偽シンボル情報を生成することができ、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。
図8は本実施の形態の情報処理装置140の構成の第3例を示すブロック図である。情報処理装置140は、CPU、ROM及びRAMなどを含むハードウェア部141、OS(オペレーティングシステム)や開発エンジン(例えば、Unityなど)などで構成される実行部142を備える。実行部142による実行環境では、ユーザプログラム143(アプリケーション)、復元用モジュール144、チェッカモジュール(判定モジュール)145、ユーザインタフェース機能を実行するインタフェースプログラム146などを実行できる。
実行部142は、ソースファイル内の識別子と当該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、当該所定の仕様により関連付けられた偽シンボル情報を含む実行可能ファイルを実行させることができる。
復元用モジュール144は、偽シンボル情報をシンボル情報へ復元することができる。これにより、ユーザプログラム143を実行することができる。なお、図8では、復元用モジュール144とチェッカモジュール145とは、別個のモジュールのように図示しているが、これに限定されるものではなく、チェッカモジュール145が復元用モジュール144に内包されている(組み込まれている)構成であってもよい。
次に、偽シンボル情報の復元について説明する。
図9は偽シンボル情報の復元処理の第1例を示す模式図である。図9はユーザのアプリケーションの実行の流れを模式的に図示している。モジュール1、2、3は、実行部142内のモジュールであり、例えば、モジュール1、2は、ユーザのソースコード(具体的には実行可能ファイル)が実行される前の処理(例えば、ユーザの実行コードを実行させる前のOS、開発エンジン、プログラム言語などの処理系の各種初期化処理など)を行うプログラムである。モジュール3は、ユーザのソースコードから生成されたユーザの実行コードが終了した後の種々の終了処理を行うプログラムである。図9に示すように、モジュール2の実行途中で復元用モジュール144を呼び出すことにより、ユーザの実行可能ファイル用の偽シンボル情報を元のシンボル情報に復元することができる。
すなわち、復元用モジュール144は、実行可能ファイル(具体的には、ユーザの実行コード)が実行される前に偽シンボル情報を復元することができる。上述のように、アプリケーションを起動すると、アプリケーションの実行可能ファイルが実行される前に、OSや開発エンジンが種々の初期化処理を行う。このような初期化処理の途中で復元用モジュールを読み出して、偽シンボル情報を元のシンボル情報に復元することにより、実行可能ファイルは、正しいシンボル情報を参照することができる。
図10は偽シンボル情報の復元処理の第2例を示す模式図である。図10では、便宜上、ユーザのソースコードの部分だけを図示している。ユーザのソースコードは、例えば、サブコードA、チェッカモジュール145の呼び出し、サブコードB、チェッカモジュール145の呼び出しの順番で実行されるとする。なお、サブコードAとチェッカモジュール145の呼び出し、あるいは、サブコードBとチェッカモジュール145の呼び出しを、ループ状に繰り返し実行するようにしてもよい。
図10に示すように、サブコードAにおいて、シンボル情報Aを参照する前に、復元用モジュールを呼び出して偽シンボル情報Aから元のシンボル情報Aを復元することができる。また、サブコードAにおいて、シンボル情報Aを参照する必要がなくなった場合、元のシンボル情報Aを改変して偽シンボル情報を生成することができる。サブコードAの実行が終了した後に、チェッカモジュールを呼び出し、元のシンボル情報Aが復元されているか否かを判定することができる。ここで、元のシンボル情報Aが復元されていない場合には、攻撃者による攻撃はないと判定できる。一方、元のシンボル情報Aが復元されている場合には、攻撃者によって不正に復元されたものであるとして、ユーザのアプリケーションを停止させることができる。サブコードBについても同様である。
すなわち、復元用モジュール144は、実行可能ファイルが一部実行された後に偽シンボル情報を復元することができる。実行可能ファイルが一部実行され、実行可能ファイル内のコードがシンボル情報を参照する際に、参照前に偽シンボル情報を復元することより、実行可能ファイル内の処理を続けることができる。より具体的には、復元用モジュール144は、実行可能ファイルが実行中であって、実行可能ファイル内のコードが所要のシンボル情報を参照する前に、偽シンボル情報の全部又は一部をシンボル情報へ復元することができる。例えば、コードAがシンボル情報Aを参照するとし、コードAの後に実行されるコードBがシンボル情報Bを参照するとする。この場合、コードAがシンボル情報Aを参照する前に復元用モジュールを読み出して、偽シンボル情報から元のシンボル情報Aに復元する。なお、この場合、シンボル情報Bは改変されたままとすることができる。次に、コードBがシンボル情報Bを参照する前に復元用モジュールを読み出して、偽シンボル情報から元のシンボル情報Bに復元する。
このように、元のシンボル情報への復元を一度に実施しないことにより、偽シンボル情報のうち、必要最小限の情報だけを復元するので、アプリケーションに対する解析・分析を一層困難にすることができる。
また、復元用モジュール144は、偽シンボル情報をシンボル情報へ復元した後に、実行可能ファイル内のコードが当該シンボル情報を参照しない場合、当該シンボル情報から偽シンボル情報を生成することができる。コードが、復元された元のシンボル情報を参照した後、当該コードが当該元のシンボル情報を使用しない場合には、当該元のシンボル情報を改変して偽シンボル情報に戻す。これにより、復元された元のシンボル情報は、再度偽シンボル情報に改変されるので、アプリケーションに対する解析・分析を一層困難にすることができる。
また、チェッカモジュール145は、復元用モジュール144が偽シンボル情報を生成した後で当該偽シンボル情報が復元されているか否かを判定する。実行部142は、当該偽シンボル情報が復元されている場合、実行可能ファイルの実行を停止することができる。アプリケーションが停止するので、攻撃者は、アプリケーション停止の原因を探索しなければならず、例えば、チェッカモジュール145の処理の発見や除去が必要となり、攻撃者の、アプリケーションに対する解析・分析を一層困難にすることができる。なお、「実行部142が実行可能ファイルの実行を停止する」とは、文字通り、実行部142が実行可能ファイルの実行を停止する場合の他、チェッカモジュール145に書かれているコード、又は復元用モジュール144に書かれているコードが実行部142の支援を受けながら実行可能ファイルの実行を停止する場合、あるいは、チェッカモジュール145に書かれているコード、又は復元用モジュール144に書かれているコードを実行部142が解釈して実行可能ファイルの実行を停止する場合も含まれる。
図11は情報処理装置100による処理手順の一例を示すフローチャートである。以下では、便宜上、処理の主体を制御部101として説明する。制御部101は、実行可能ファイルを取得し(S11)、取得した実行可能ファイルからシンボル情報を抽出する(S12)。制御部101は、シンボル情報を改変して偽シンボル情報を生成するとともに復元用モジュールを生成する(S13)。
制御部101は、偽シンボル情報及び復元用モジュールを生成後、実行可能ファイルを生成し(S14)、処理を終了する。
図12は情報処理装置120による処理手順の一例を示すフローチャートである。制御部101は、ソースファイルを取得し(S21)、コンパイラによってオブジェクトファイルを生成する(S22)。
制御部101は、シンボル情報を改変して偽シンボル情報を生成するとともに復元用モジュールを生成する(S23)。この場合、制御部101は、オブジェクファイル内のシンボル情報のリンク関係に基づいて当該リンク関係を改変して偽シンボル情報を生成することができる。
制御部101は、偽シンボル情報及び復元用モジュールを生成後、リンカによって実行可能ファイルを生成し(S24)、処理を終了する。
図13は情報処理装置140による処理手順の一例を示すフローチャートである。以下では、便宜上、処理の主体を実行部142として説明する。実行部142は、ユーザアプリを起動し(S31)、偽シンボル情報の全部又は一部を復元する(S32)。なお、偽シンボル情報の全部を復元する場合、後述のステップS34からS35の処理は実施する必要はない。
実行部142は、ユーザのサブコードを実行し(S33)、復元用モジュールの呼び出しの有無を判定する(S34)。復元用モジュールの呼び出しがない場合(S34でNO)、実行部142は、後述のステップS36の処理を行う。
復元用モジュールの呼び出しがある場合(S34でYES)、実行部142は、偽シンボル情報を復元し(S35)、サブコードを終了するか否かを判定する(S36)。サブコードを終了しない場合(S36でNO)、実行部142は、ステップS36の処理を続け、サブコードを終了する場合(S36でYES)、復元したシンボル情報を偽シンボル情報に改変する(S37)。
実行部142は、チェッカモジュールの呼び出しの有無を判定し(S38)、チェッカモジュールの呼び出しがあった場合(S38でYES)、偽シンボル情報が復元されているか否かを判定する(S39)。偽シンボル情報が復元されている場合(S39でYES)、実行部142は、ユーザアプリを停止し(S40)、処理を終了する。
チェッカモジュールの呼び出しがない場合(S38でNO)、あるいは、偽シンボル情報が復元されていない場合(S39でNO)、実行部142は、ユーザアプリを終了するか否かを判定し(S41)、ユーザアプリを終了しない場合(S41でNO)、ステップS33以降の処理を続ける。ユーザアプリを終了する場合(S41でYES)、実行部142は、処理を終了する。
図14は本実施の形態の情報処理装置160の構成の他の例を示すブロック図である。情報処理装置100、120、140は、情報処理装置160のように構成することもできる。図14において、符号160は、コンピュータである。コンピュータ160は、制御部161、入力部166、出力部167、外部I/F(インタフェース)部168などを備える。制御部161は、CPU162、ROM163、RAM164、I/F(インタフェース)165などを備える。
入力部166は、実行可能ファイルやソースファイルを取得することができる。出力部167は、偽シンボル情報が生成された実行可能ファイル、復元用モジュールを出力することができる。I/F165は、制御部161と、入力部166、出力部167及び外部I/F部168それぞれとの間のインタフェース機能を有する。
外部I/F部168は、DVD読取装置などの記録媒体読取装置であり、コンピュータプログラムを記録した記録媒体M(例えば、DVDなどのメディア)からコンピュータプログラム(例えば、図11、図12、図13に示す処理手順など)を読み取ることが可能である。
なお、図示していないが、記録媒体Mに記録されたコンピュータプログラムは、持ち運びが自由なメディアに記録されたものに限定されるものではなく、インターネット又は他の通信回線を通じて伝送されるコンピュータプログラムも含めることができる。
本実施の形態によれば、高機能デバッガなどのツールを使用した動的解析(プログラムの実行時にメモリ上で情報を解析する手法)に必要となるシンボル情報を正しい情報であるとツールに誤認識させることができるため、攻撃者は間違った(改変された)シンボル情報をもとに、解析・分析を進めることになる。このため、攻撃者の目的を達成することを難しくすることができる。攻撃者が改変されたシンボル情報(偽シンボル情報)を正しいシンボル情報として認識するのは、偽シンボル情報が、シンボル情報のフォーマットや約束事などの所定の仕様に基づく情報であるからである。偽シンボル情報に基づく、メモリ位置に正しい情報が存在しないので、攻撃者の目的を達成することを難しくすることができる。また、攻撃者が多大な労力やコストをかけても元のシンボル情報を復元できない限りは、アプリケーションの効果的な解析・分析ができない。
本実施の形態の情報処理装置は、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を前記実行可能ファイル用に生成する生成部を備える。
本実施の形態の情報処理装置は、プロセッサを備え、前記プロセッサは、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を前記実行可能ファイル用に生成する。
本実施の形態のコンピュータプログラムは、コンピュータに、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を前記実行可能ファイル用に生成する処理を実行させる。
本実施の形態の情報処理方法は、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を前記実行可能ファイル用に生成する。
生成部は、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と当該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、当該所定の仕様により関連付けられた偽シンボル情報を実行可能ファイル用に生成する。シンボル情報は、シンボルテーブルとも称する。識別子は、シンボルとも称し、例えば、変数名や関数名などの名前である。実行可能ファイルに変換する際の入力情報とするソースファイルは、ユーザがソースファイルを作成する際に命名した識別子が変更されることなく記載されているソースファイルだけでなく、ユーザが命名した識別子を変更できるツール(例えば、Obfascatorなど)によって、変更された識別子が記載されているソースファイルも含む意味である。識別子の内容は、変数や関数のメモリアドレス(メモリ上の位置)、型などを含む。所定の仕様とは、アプリケーション(プログラム)用のOS(オペレーティングシステム)や開発エンジン(例えば、Unityなど)で定められているシンボル情報のフォーマットや約束事を意味する。偽シンボル情報は、シンボル情報の所定の仕様に従いつつシンボル情報を攪乱したものとすることができる。ここで、攪乱は、改変とも称し、暗号化や難読化(所定の仕様を充足しない処理)とは異なる処理であることを意味する。実行可能ファイルは、例えば、ユーザのアプリケーションの実行可能ファイルとすることができる。
偽シンボル情報がシンボル情報と同じ所定の仕様に従って生成されているので、攻撃者から見ると、実行可能ファイル用に生成された偽シンボル情報は、本来のシンボル情報と認識するしか術がない。なぜならシンボル情報を攻撃者から守るために暗号化や難読化したものではない。すなわち、攻撃者が使用する各種ツール(例えば、IL2CppDumperなど)の使用において、何ら問題を発生させないので、攻撃者に対して、偽シンボル情報を正しいシンボル情報であると誤認識させることができる。これにより、攻撃者は各種ツールを駆使して多大な労力やコストをかけても、偽シンボル情報は、元のシンボル情報が攪乱されているので、アプリケーションの解析・分析を困難にすることができる。
本実施の形態の情報処理装置は、実行可能ファイルを取得する取得部と、前記取得部で取得した実行可能ファイルからシンボル情報を抽出する抽出部とを備え、前記生成部は、前記抽出部で抽出したシンボル情報から前記所定の仕様により関連付けられた偽シンボル情報を生成する。
取得部は、実行可能ファイルを取得し、抽出部は、取得した実行可能ファイルからシンボル情報を抽出する。生成部は、抽出したシンボル情報から、識別子と識別子の内容とが所定の仕様により関連付けられた偽シンボル情報を生成する。
これにより、実行可能ファイルを取得するだけで、取得した実行可能ファイル用の偽シンボル情報を生成することができ、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。
本実施の形態の情報処理装置は、前記ソースファイルを取得する取得部と、前記取得部で取得したソースファイルを実行可能ファイルに変換する変換部とを備え、前記生成部は、前記取得部で取得したソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を前記変換部が変換した実行可能ファイル用に生成する。
取得部は、実行可能ファイルに変換する際の入力情報とするソースファイルを取得する。変換部は、取得したソースファイルを実行可能ファイルに変換する。変換部は、例えば、コンパイラ及びリンカで構成することができる。コンパイラによりソースファイルをオブジェクトファイルに変換し、リンカにより他のオブジェクトファイルやライブラリとリンクさせることにより、実行可能ファイル(バイナリファイル)に変換することができる。
生成部は、ソースファイル内の識別子と当該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、当該所定の仕様により関連付けられた偽シンボル情報を変換部が変換した実行可能ファイル用に生成する。
これにより、コンパイラやリンカを用いてソースファイルから実行可能ファイルに変換する際に、偽シンボル情報を生成することができ、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。
本実施の形態の情報処理装置において、前記生成部は、前記識別子と該識別子のメモリアドレスとのリンク関係を改変して偽シンボル情報を生成する。
生成部は、識別子と当該識別子のメモリアドレスとのリンク関係を改変して偽シンボル情報を生成する。例えば、元のシンボル情報のメモリアドレスとシンボルとのリンク関係を、アドレス:00000020−シンボル:A、…、アドレス:00000080−シンボル:B、…とすると、偽シンボル情報として、例えば、アドレス:00000020−シンボル:B、…、アドレス:00000080−シンボル:A、…のように改変することができる。
偽シンボル情報は、元のシンボル情報と同じ所定の仕様に従っており、攻撃者が偽シンボル情報を解析・分析すると、シンボルAの中身はアドレス:00000080にあり、シンボルBの中身はアドレス:00000020にあると認識する。しかし、元のシンボル情報に基けば、シンボルAの中身はアドレス:00000020にあり、シンボルBの中身はアドレス:00000080にあるので、偽シンボル情報によってリンク関係が攪乱されており、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。
本実施の形態の情報処理装置において、前記生成部は、前記識別子と該識別子のメモリアドレスとのリンク関係の一部を削除して偽シンボル情報を生成する。
生成部は、識別子と当該識別子のメモリアドレスとのリンク関係の一部を削除して偽シンボル情報を生成する。例えば、例えば、元のシンボル情報のメモリアドレスとシンボルとのリンク関係を、アドレス:00000020−シンボル:A、…、アドレス:00000080−シンボル:B、…とすると、例えば、アドレス:00000020−シンボル:Aのリンク関係をシンボル情報から削除して偽シンボル情報を生成する。
偽シンボル情報は、元のシンボル情報と同じ所定の仕様に従っており、攻撃者が偽シンボル情報を解析・分析すると、シンボルAとアドレスとのリンク関係が削除されているので、攻撃者は、シンボルAとアドレスとのリンク関係が存在することに気づかない。すなわち、偽シンボル情報によってリンク関係が攪乱されており、攻撃者の、アプリケーションに対する解析・分析を困難にすることができる。
本実施の形態の情報処理装置は、前記生成部で生成した偽シンボル情報を含む実行可能ファイル及び前記偽シンボル情報を復元する復元用モジュールを出力する出力部を備える。
出力部は、生成部で生成した偽シンボル情報を含む実行可能ファイル及び偽シンボル情報を復元する復元用モジュールを出力する。これにより、アプリケーションを実行する際に(例えば、アプリケーションを実行する前に、あるいは実行中であって所要のシンボル情報を参照する前に)、復元用モジュールによって偽シンボル情報を元のシンボル情報に復元できるので、アプリケーションを実行することができる。
本実施の形態の情報処理装置は、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を含む実行可能ファイルを実行させる実行部と、偽シンボル情報をシンボル情報へ復元する復元用モジュールとを備える。
本実施の形態の情報処理装置は、プロセッサを備え、前記プロセッサは、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を含む実行可能ファイルを実行させ、偽シンボル情報をシンボル情報へ復元する。
本実施の形態のコンピュータプログラムは、コンピュータに、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を含む実行可能ファイルを実行する処理と、偽シンボル情報をシンボル情報へ復元する処理とを実行させる。
本実施の形態の情報処理方法は、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、前記所定の仕様により関連付けられた偽シンボル情報を含む実行可能ファイルを実行させ、偽シンボル情報をシンボル情報へ復元する。
実行部は、実行可能ファイルに変換する際の入力情報とするソースファイル内の識別子と当該識別子の内容とを所定の仕様により関連付けるシンボル情報への復元が可能であって、当該所定の仕様により関連付けられた偽シンボル情報を含む実行可能ファイルを実行させる。実行部は、アプリケーションを実行させるためのOS(オペレーティングシステム)や開発エンジン(例えば、Unityなど)とすることができる。
復元用モジュールは、偽シンボル情報をシンボル情報へ復元することができる。これにより、アプリケーションを実行することができる。
本実施の形態の情報処理装置において、前記復元用モジュールは、前記実行可能ファイルが一部実行された後に偽シンボル情報を復元する。
復元用モジュールは、実行可能ファイルが一部実行された後に偽シンボル情報を復元する。実行可能ファイルが一部実行され、実行可能ファイル内のコードがシンボル情報を参照する際に、参照前に偽シンボル情報を復元することより、実行可能ファイル内の処理を続けることができる。また、アプリケーションを起動すると、アプリケーションの実行可能ファイルが実行される前に、OSや開発エンジンが種々の初期化処理を行う。このような初期化処理の途中で復元用モジュールを読み出して、偽シンボル情報を元のシンボル情報に復元してもよい。これにより、実行可能ファイルは、シンボル情報を参照することができる。
本実施の形態の情報処理装置において、前記復元用モジュールは、前記実行可能ファイルが実行中であって、前記実行可能ファイル内のコードが所要のシンボル情報を参照する前に、偽シンボル情報の全部又は一部を前記シンボル情報へ復元する。
復元用モジュールは、実行可能ファイルが実行中であって、実行可能ファイル内のコードが所要のシンボル情報を参照する前に、偽シンボル情報の全部又は一部をシンボル情報へ復元する。例えば、コードAがシンボル情報Aを参照するとし、コードAの後に実行されるコードBがシンボル情報Bを参照するとする。この場合、コードAがシンボル情報Aを参照する前に復元用モジュールを読み出して、偽シンボル情報から元のシンボル情報Aに復元する。なお、この場合、シンボル情報Bは改変されたままとすることができる。次に、コードBがシンボル情報Bを参照する前に復元用モジュールを読み出して、偽シンボル情報から元のシンボル情報Bに復元する。
このように、元のシンボル情報への復元を一度に実施しないことにより、偽シンボル情報のうち、必要最小限の情報だけを復元するので、アプリケーションに対する解析・分析を一層困難にすることができる。
本実施の形態の情報処理装置において、前記復元用モジュールは、偽シンボル情報をシンボル情報へ復元した後に、前記実行可能ファイル内のコードが前記シンボル情報を参照しない場合、前記シンボル情報から偽シンボル情報を生成する。
復元用モジュールは、偽シンボル情報をシンボル情報へ復元した後に、実行可能ファイル内のコードが当該シンボル情報を参照しない場合、当該シンボル情報から偽シンボル情報を生成する。コードが、復元された元のシンボル情報を参照した後、当該コードが当該元のシンボル情報を使用しない場合には、当該元のシンボル情報を改変して偽シンボル情報に戻す。これにより、復元された元のシンボル情報は、再度偽シンボル情報に改変されるので、アプリケーションに対する解析・分析を一層困難にすることができる。
本実施の形態の情報処理装置は、前記復元用モジュールが偽シンボル情報を生成した後で前記偽シンボル情報が復元されているか否かを判定する判定モジュールを備え、前記実行部は、前記偽シンボル情報が復元されている場合、前記実行可能ファイルの実行を停止する。
判定モジュールは、復元用モジュールが偽シンボル情報を生成した後で当該偽シンボル情報が復元されているか否かを判定する。実行部は、当該偽シンボル情報が復元されている場合、実行可能ファイルの実行を停止する。アプリケーションが停止するので、攻撃者は、アプリケーション停止の原因を探索しなければならず、例えば、判定モジュールの処理の発見や除去が必要となり、攻撃者の、アプリケーションに対する解析・分析を一層困難にすることができる。