JP6674048B2 - 判定装置、判定方法及び判定プログラム - Google Patents

判定装置、判定方法及び判定プログラム Download PDF

Info

Publication number
JP6674048B2
JP6674048B2 JP2018557527A JP2018557527A JP6674048B2 JP 6674048 B2 JP6674048 B2 JP 6674048B2 JP 2018557527 A JP2018557527 A JP 2018557527A JP 2018557527 A JP2018557527 A JP 2018557527A JP 6674048 B2 JP6674048 B2 JP 6674048B2
Authority
JP
Japan
Prior art keywords
function
feature information
source code
information
similarity
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
JP2018557527A
Other languages
English (en)
Other versions
JPWO2018116522A1 (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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Publication of JPWO2018116522A1 publication Critical patent/JPWO2018116522A1/ja
Application granted granted Critical
Publication of JP6674048B2 publication Critical patent/JP6674048B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

本発明は、判定装置、判定方法及び判定プログラムに関する。
実行ファイル(以下、プログラムと呼ぶ。)のバイナリ表現(以下、バイトコードと呼ぶ。)は、特定のプログラミング言語で記述されたソースコードから、コンパイラにより生成されたデータであり、特定の環境下で実行できるようソフトウェアで処理される。
このプログラムの作成を効率化させるための手段の一つとして、インターネット上で共有されているソースコード(断片的なソースコードであるコードスニペットも含む。)の活用がある。
例えば、GitHub(例えば、非特許文献1参照)は、プログラマにより作成されたプログラムのソースコードを維持、管理するサービスを提供しており、多数のソースコードを公開している。その他にも、stackoverflow(例えば、非特許文献2参照)やQiita(例えば、非特許文献3参照)は、インターネット上で、プログラマ向けに情報を共有するサービスを提供しており、これらのサービスでは、不特定多数のユーザにより記載されたソースコードが共有されている。
ただし、これらのサービスに掲載されているソースコードの中には、動作の評価はされているものの、セキュリティの観点からは評価されていないものも含まれており、セキュリティ上問題のあるソースコードが存在している。したがって、他者が作成したソースコードをそのまま流用してプログラムを作成することは推奨されておらず、プログラムが特定のソースコードを使用して作成されていることを判定することは重要である。
ここで、異なる二つのプログラムや異なる二つのソースコードを入力とし、その類似度を算出する方法は、以前から知られている。例えば、類似度を算出する方法として、プログラムからその特徴量を表すデータを作成し、このデータにファジーハッシングを適用した結果を入力とし、比較する方法(例えば、非特許文献4参照)がある。また、プログラムからプログラム依存グラフを構築し、このプログラム依存グラフを比較する方法(例えば、非特許文献5参照)等がある。
GitHub、[online]、[平成28年12月9日検索]、インターネット<URL:https://github.com> StackOverflow、[online]、[平成28年12月9日検索]、インターネット<URL:http://stackoverflow.com/company/about> Qiita、[online]、[平成28年12月9日検索]、インターネット<URL:https://qiita.com/about> W. Zhou, Y. Zhou, X. Jiang, and P. Ning, "Detecting Repackaged Smartphone Applications in Third-Party Android Marketplaces", in Proceedings of the ACM Conference Data Application Security Privacy (CODASPY), pp. 317−326, 2012. J. Crussell, C. Gibler, and H. Chen, "Attack of the Clones: Detecting Cloned Applications on Android Markets", in Proceedings of the European Symposium on Research in Computer Security (ESORICS), pp. 37−54, 2012.
しかしながら、前述したプログラムの類似度を算出する方法は、いずれも入力する二つの情報が同じ形式のデータである必要がある。前述したプログラムの類似度を算出する方法では、プログラムのバイトコードとソースコードとを比較する際、ソースコードをバイトコードへとコンパイルした後に、類似度を算出する必要があるためである。
一方、インターネット上で公開されているソースコードは、コードスニペットのような断片的なコードである場合が多く、この場合には、ソースコードをバイトコードへコンパイルすることが難しい。ソースコードが断片的なコードである場合には、少なくともコンパイルに必要な情報を補完するのに、人手での多大な労力を要するためである。したがって、前述したプログラムの類似度を算出する方法では、ソースコードをバイトコードへとコンパイルすることが難しく、プログラムのバイトコードとソースコードとの類似度を計算することが難しいという問題がある。
このように、従来の手法では、プログラムのバイトコードとソースコードとのデータ形式が異なる場合、プログラムのバイトコードとソースコードとの類似度を計算することが難しいため、プログラムが、特定のソースコードを使用して生成されているか否かを判定することが困難であった。
本発明は、上記に鑑みてなされたものであって、プログラムのバイトコードとソースコードとが異なるデータ形式であっても、プログラムのバイトコードとソースコードとの類似度を適切に計算することができる判定装置、判定方法及び判定プログラムを提供することを目的とする。
本発明の判定装置は、入力されたソースコードとプログラムのバイトコードとのそれぞれから、関数を定義する情報である関数定義情報、及び、関数内で実行される関数名が実行される順序で記載された関数呼出順序情報を特徴情報として抽出する特徴情報抽出部と、特徴情報抽出部によって抽出された特徴情報を用いて、ソースコード内の関数とバイトコード内の関数との類似度を算出する類似度算出部と、を有することを特徴とする。
本発明によれば、比較対象とするバイトコードとソースコードとのデータ形式が異なる場合であっても、プログラムが、特定のソースコードを使用して生成されているか否かを判定することができる。
図1は、本実施の形態に係る判定装置の構成を示すブロック図である。 図2は、プログラミング言語Java(登録商標)で実装されたソースコードと該ソースコードから抽出された特徴情報との一例を示す図である。 図3は、プログラミング言語Javaで実装されたバイトコードと該バイトコードから抽出された特徴情報との一例を示す図である。 図4は、図1に示す判定装置による判定処理の処理手順を示すフローチャートである。 図5は、図4に示すソースコード特徴情報抽出処理の処理手順を示すフローチャートである。 図6は、図4に示すバイトコード特徴情報抽出処理の処理手順を示すフローチャートである。 図7は、図4に示す類似度算出処理の処理手順を示すフローチャートである。 図8は、プログラムが実行されることにより判定装置が実現されるコンピュータの一例を示す図である。
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
[実施の形態]
本発明の実施の形態について説明する。本発明の実施の形態では、プログラムが、特定のソースコードを使用して生成されているか否かを判定する判定装置、判定方法及び判定プログラムについて説明する。まず、実施の形態における判定装置の概略について説明する。
[判定装置の構成]
図1は、本実施の形態に係る判定装置の構成を示すブロック図である。図1に示すように、判定装置10は、入力部11、出力部12、通信部13、記憶部14及び制御部15を有する。
入力部11は、判定装置10の操作者からの各種操作を受け付ける入力インタフェースである。例えば、入力部11は、タッチパネル、音声入力デバイス、キーボードやマウス等の入力デバイスによって構成される。
出力部12は、例えば、液晶ディスプレイなどの表示装置、プリンター等の印刷装置、情報通信装置等によって実現される。出力部12は、後述する判定処理の結果を操作者に対して出力する。
通信部13は、ネットワーク等を介して接続された他の装置との間で、各種情報を送受信する通信インタフェースである。通信部13は、NIC(Network Interface Card)等で実現され、LAN(Local Area Network)やインターネットなどの電気通信回線を介した他の装置と制御部15との間の通信を行う。
記憶部14は、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置によって実現され、判定装置10を動作させる処理プログラムや、処理プログラムの実行中に使用されるデータなどが記憶される。
制御部15は、各種の処理手順などを規定したプログラム及び所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。例えば、制御部15は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。制御部15は、特徴情報抽出部151、類似度算出部154及び判定部155を有する。
特徴情報抽出部151は、入力されたソースコードとプログラムのバイトコードとのそれぞれから、関数を定義する情報である関数定義情報、及び、関数内で実行される関数名が実行される順序で記載された関数呼出順序情報を特徴情報として抽出する。特徴情報抽出部151は、関数定義情報として、例えば、修飾子、識別子、引数及び戻り値の型を抽出する。この関数定義情報及び関数呼出順序情報は、ソースコード及びバイトコードのデータ形式に限らず抽出可能である。特徴情報抽出部151は、入力されたソースコードとプログラムのバイトコードとのそれぞれから抽出した各特徴情報を、類似度算出部154に出力する。特徴情報抽出部151は、ソースコード特徴情報抽出部152及びバイトコード特徴情報抽出部153を有する。
ソースコード特徴情報抽出部152は、ソースコードまたはその一部であるコードスニペットを入力とし、ソースコードに含まれる関数定義及び関数呼出順序の情報を特徴データとして抽出する。このとき、ソースコード特徴情報抽出部152は、ソースコードにおける変数の型情報或いはパッケージ構造の情報が欠落している場合には、欠落している部分を任意の型或いは任意のパッケージ構造の情報とみなして情報を補う。続いて、ソースコード特徴情報抽出部152は、特徴情報の抽出を行う。
バイトコード特徴情報抽出部153は、プログラムのバイトコードを入力とし、バイトコードを解析することによって特徴情報を抽出する。このとき、バイトコード特徴情報抽出部153は、バイトコード中の関数の識別子が難読化されており、かつ、関数の定義及び関数の呼び出しを関連付けることができる場合には、関数の識別子を任意の文字列とみなし、情報を補う。続いて、バイトコード特徴情報抽出部153は、特徴情報の抽出を行う。
類似度算出部154は、特徴情報抽出部151によって抽出された特徴情報を用いて、ソースコード内の関数とバイトコード内の関数との類似度を算出する。類似度算出部154は、関数定義情報、関数呼出順序情報のそれぞれに応じた類似度を算出する。
具体的には、類似度算出部154は、特徴情報抽出部151に関数定義情報として抽出された修飾子、識別子、引数及び戻り値の型に基づいて類似度を算出する。例えば、類似度算出部154は、関数定義情報を用いて、ソースコードとバイトコードとの修飾子、識別子、引数及び戻り値の型がそれぞれ一致しているか否かを比較することによって、関数定義の同一性を考慮した類似度を算出する。
また、類似度算出部154は、特徴情報抽出部151によって抽出された関数呼出順序情報に対して、順序関係を考慮した比較アルゴリズムを適用して類似度を算出する。具体的には、類似度算出部154は、ソースコードとバイトコードとの各関数呼出順序情報に対し、編集距離(Levenshtein Distance)や最長共通部分列(Longest Common Sequence)等といったアルゴリズムを適用することによって、関数呼出順序の部分的なシーケンスを考慮した類似度を算出する。
判定部155は、類似度算出部154によって算出された類似度に基づいて、プログラムが特定のソースコードを使用して生成されているか否かを判定する。判定部155は、関数定義の同一性を考慮した類似度及び関数呼出順序の部分的なシーケンスを考慮した類似度を用いて、プログラムが特定のソースコードを使用して生成されているか否かを判定する。続いて、制御部15における各構成部の処理内容について具体例を挙げて説明する。
[ソースコード特徴情報抽出部の処理]
まず、ソースコード特徴情報抽出部152の処理について説明する。図2は、プログラミング言語Javaで実装されたソースコードと該ソースコードから抽出された特徴情報との一例を示す図である。図2の(a)には、一例としてソースコードLaを示し、図2の(b)には、ソースコードLaから抽出された特徴情報Taを示す。特徴情報Taでは、左列に関数定義情報が記載され、右列に関数呼出順序情報が記載される。
ソースコード特徴情報抽出部152は、ソースコードLa(図2の(a)参照)から、関数定義情報として、修飾子、戻り値の型、識別子、引数の型を抽出する。そして、ソースコード特徴情報抽出部152は、矢印Y11〜Y14のように、抽出したそれぞれの関数定義情報を、特徴情報Ta(図2の(b)参照)の左列に順次記載する。
例えば、ソースコード特徴情報抽出部152は、ソースコードLaの4〜6行目から、修飾子(public)、戻り値の型(void)、識別子(init)、引数の型(int)を抽出し、矢印Y11のように、特徴情報TaのセルC11Aに関数定義情報として記載する。また、ソースコード特徴情報抽出部152は、ソースコードLaの8〜13行目から、“public”、“void”、“MethodA”、“String”を抽出し、矢印Y12のように、特徴情報TaのセルC12Aに関数定義情報として記載する。また、ソースコード特徴情報抽出部152は、ソースコードLaの15〜19行目から、“private”、“void”、“MethodB”、“void”を抽出し、矢印Y13のように、特徴情報TaのセルC13Aに関数定義情報として記載する。
さらに、ソースコード特徴情報抽出部152は、ソースコードLa(図2の(a)参照)から、関数呼出順序情報として、この関数内で実行される関数名を実行される順番で抽出する。そして、ソースコード特徴情報抽出部152は、関数呼出順序情報として、矢印Y11〜Y14のように、抽出したそれぞれの関数名を、特徴情報Ta(図2の(b)参照)の右列に、実行される順序で順次記載する。
例えば、ソースコード特徴情報抽出部152は、ソースコードLaの4〜6行目から、関数内で実行される関数名(super)を抽出し、矢印Y11のように、抽出した関数名(super)を、特徴情報TaのセルC21Aに、関数呼出順序情報として記載する。また、ソースコード特徴情報抽出部152は、ソースコードLaの8〜13行目から、関数内で実行される関数名(println、MethodB、send)を抽出する。そして、ソースコード特徴情報抽出部152は、矢印Y12のように、特徴情報TaのセルC22Aに、抽出した関数名(println、MethodB、send)を、関数呼出順序情報として、実行される順番で順次記載する。また、ソースコード特徴情報抽出部152は、ソースコードLaの15〜19行目から、関数呼出順序情報として、“getClass”、“getSimpleName”、“println”、“MethodC”、“send”を抽出し、矢印Y13のように、特徴情報TaのセルC23Aに、実行される順番で順次記載する。
ここで、ソースコード特徴情報抽出部152は、ソースコードが断片的であり変数や型、パッケージ構造等の情報が欠落している場合に、該欠落箇所を任意の変数や、任意の型、任意のパッケージ構造とみなし、情報を補うことで特徴情報を抽出している。
例えば、Javaにおいて、変数の型は、当該変数に格納されるオブジェクトのクラスが所属するパッケージ名と、オブジェクトのクラス名を合わせた完全修飾名(例えば、java.lang.String)によって表される。ただし、実際のソースコードにおいては、予めimport宣言を行う事で完全修飾名のうち、パッケージ名の部分を省略することが可能である。
具体的には、ソースコードLaでは、import宣言が欠落しているため、関数“MethodC”の引数である“ClassB”(21行目)の完全修飾名が不明となっている。この場合、ソースコード特徴情報抽出部152は“ClassB”の型を“(任意のパケージ名).ClassB”とみなして、この“(任意のパケージ名).ClassB”を補い、特徴情報として抽出する。そして、ソースコード特徴情報抽出部152は、抽出した“(任意のパケージ名).ClassB”を、特徴情報TaのセルC14Aに記載する。
したがって、ソースコード特徴情報抽出部152は、ソースコードLaの21〜24行目から、“public”、“boolean”、“MethodC”を抽出するとともに、補った“(任意のパケージ名).ClassB”を、矢印Y14のように、セルC14Aに記載する。なお、ソースコード特徴情報抽出部152は、ソースコードLaの21〜22行目から、関数呼出順序情報として、“getData”を抽出し、矢印Y14のように、特徴情報TaのセルC24Aに記載する。
[バイトコード特徴情報抽出部の処理]
次に、バイトコード特徴情報抽出部153の処理について説明する。図3は、プログラミング言語Javaで実装されたバイトコードと該バイトコードから抽出された特徴情報との一例を示す図である。図3の(a)には、一例としてバイトコードLbを示し、図3の(b)には、バイトコードLbから抽出された特徴情報Tbを示す。特徴情報Tbでは、左列に関数定義情報が記載され、右列に関数呼出順序情報が記載される。
バイトコード特徴情報抽出部153は、プログラムのバイトコードLbを入力とし、バイトコードを解析することによって、矢印Y21〜Y24のように特徴情報Tbを抽出する。なお、バイトコード特徴情報抽出部153は、バイトコードから情報抽出を行う際には、例えば、ディスアセンブラ等を用いてバイトコードを可読テキスト形式に変換してから行ってもよい。
バイトコード特徴情報抽出部153は、バイトコードLb(図3の(a)参照)から、関数定義情報として、修飾子、戻り値の型、識別子、引数の型を抽出する。そして、バイトコード特徴情報抽出部153は、矢印Y21〜Y24のように、抽出したそれぞれの関数定義情報を、特徴情報Tb(図3の(b)参照)の左列に順次記載する。また、バイトコード特徴情報抽出部153は、ソースコードLbから、関数呼出順序情報として、この関数内で実行される関数名を実行される順番で抽出する。そして、バイトコード特徴情報抽出部153は、矢印Y21〜Y24のように、抽出したそれぞれの関数を、関数呼出順序情報として、特徴情報Tbの右列に、実行される順序で順次記載する。
例えば、バイトコード特徴情報抽出部153は、バイトコードLbの3〜5行目から、修飾子(public)、戻り値の型(void)、識別子(init)、引数の型(int)を抽出し、矢印Y21のように、特徴情報TbのセルC11Bに関数定義情報として記載する。バイトコード特徴情報抽出部153は、バイトコードLbの3〜5行目から、関数内で実行される関数名(init)を抽出し、矢印Y21のように、関数呼出順序情報として、特徴情報TbのセルC21Bに記載する。
ただし、バイトコード特徴情報抽出部153は、ソースコードの難読化処理または圧縮処理により、関数名が非常に短い場合、かつ、該関数の定義及び該関数の呼び出しを関連付けることができる場合に、該関数名を任意の関数名とみなし、情報を補う。そして、バイトコード特徴情報抽出部153は、補った任意の関数名を特徴データとして抽出している。
例えば、図3の(a)のバイトコードLbにおいて、難読化処理によりより関数名が“a”(18,22行目)となっている関数が存在する。この関数“a”は、関数“MethodB”(バイトコードLbの14行目)により呼び出されていることが分かる。この場合、バイトコード特徴情報抽出部153は、関数“a”の関数定義情報及び関数“MethodB”の関数呼出順序情報における関数名を“任意の値”としてみなす。
具体的には、バイトコード特徴情報抽出部153は、関数呼出順序情報として、18行目における関数“a”を“任意の値”とみなし、矢印Y23のように、関数“a”の順序に対応させて、特徴情報TbのセルC23Bの“[任意の値]”を記載する。また、バイトコード特徴情報抽出部153は、関数定義情報として、22行目における関数“a”を“任意の値”とみなし、矢印Y24のように、特徴情報TbのセルC14Bに“[任意の値]”を記載する。
なお、ソースコード特徴情報抽出部152及びバイトコード特徴情報抽出部153において、関数定義情報及び関数呼出順序情報を得ることができるならば、解析対象を、ソースコードまたはバイトコードに限定せずともよい。
また、特徴情報抽出部151は、特徴情報として抽出する対象を、ソースコード内及びバイトコード内の関数に限定しなくともよい。例えば、特徴情報抽出部151は、ソースコード及びバイトコードから、クラスやインタフェース等のプログラムを特徴付ける情報から、特徴情報を抽出してもよい。
[類似度算出部の処理]
次に、類似度算出部154の処理について説明する。類似度算出部154は、特徴情報抽出部151から抽出した二つの解析対象の特徴情報を入力とし、該二つの特徴情報におけるソースコード内の関数とバイトコード内の関数との類似度をそれぞれ算出する。前述したように、二つの特徴情報は、関数定義情報及び関数呼出順序情報である。
まず、類似度算出部154が、二つの特徴情報のうちの関数定義情報を用いて、関数定義の同一性を考慮した類似度を算出する場合について説明する。この場合、類似度算出部154は、ソースコードとバイトコードとにおける、修飾子、識別子、戻り値の型、引数の型がそれぞれ一致しているかを比較することによって、関数定義の同一性を考慮した類似度を算出する。
具体的に、図2の(b)におけるソースコードLaの関数“MethodA”と、図3の(b)におけるバイトコードLbの関数“MethodA”との関数定義情報の類似度を算出する場合について説明する。図2の(b)の特徴情報TaにおけるセルC12Aに示すように、関数“MethodA”については、修飾子が“public”、戻り値の型が“void”、識別子が“MethodA”、引数の型が“String”である。一方、図3の(b)の特徴情報TbにおけるセルC12Bに示すように、関数“MethodA”については、修飾子が“public”、戻り値の型が“void”、識別子が“MethodA”、引数の型が“String”である。したがって、図2の(b)における関数“MethodA”と、図3の(b)における関数“MethodA”とでは、修飾子、識別子、戻り値の型、引数の型の四つの関数定義情報の全てが一致している。このため、類似度算出部154は、類似度として、「4/4=1」を算出する。
また、図2の(b)におけるソースコードLaの関数“MethodA”と、図3の(b)におけるバイトコードLbの関数“MethodB”との関数定義情報の類似度を算出する場合について説明する。この場合、図2の(b)の特徴情報TaにおけるセルC12Aに示すように、関数“MethodA”については、修飾子が“public”、戻り値の型が“void”、識別子が“MethodA”、引数の型が“String”である。一方、図3の(b)の特徴情報TbにおけるセルC13Bに示すように、関数“MethodB”については、修飾子が“private”、戻り値の型が“void”、識別子が“MethodB”、引数の型が“void”である。したがって、図2の(b)における関数“MethodA”と図3の(b)における“MethodB”とでは、四つの関数定義情報のうち戻り値の型のみが一致している。このため、類似度算出部154は、類似度として、「1/4=0.25」を算出する。
なお、類似度算出部154は、関数定義の同一性を考慮した類似度を算出する場合、特徴情報抽出部151によって抽出された関数定義情報の種類ごとに適宜重みをつけることによって、関数定義情報の種類の優先度を変更することもできる。もちろん、類似度算出部154は、このような重みづけを行わずともよい。
次に、類似度算出部154が、二つの特徴情報のうちの関数呼出順序情報を用いて、ソースコード内の関数とバイトコード内の関数とにおける類似度を算出する場合について説明する。この場合、類似度算出部154は、特徴情報中の関数呼出順序情報に、編集距離や最長共通部分列等といったアルゴリズムを適用することによって、ソースコード内の関数とバイトコード内の関数とにおける、関数呼出順序の部分的なシーケンスを考慮した類似度を算出する。
まず、類似度算出部154が、関数呼出順序情報を用いて、ソースコード内の関数とバイトコード内の関数とにおける、編集距離を算出する場合について説明する。例えば、図2の(b)におけるソースコードLaの関数“MethodA”と、図3の(b)におけるバイトコードLbの関数“MethodC”の編集距離を算出する場合を例に説明する。なお、図3の(b)について、バイトコードLbの関数“MethodC”は、難読化処理によって関数名が“a”となっている。そして、前述したように、この関数“a”は、図3の(b)のセルC23Bに示すように、関数呼出順序情報における関数名が“[任意の値]”としてみなされている。
そして、本実施の形態では、各手順のコストが予め定められている。例えば、置換に対するコストが2であり、削除に対するコストは1である。この例では、類似度算出部154は、図2の(b)における関数“MethodA”(セルC12A)の関数呼出順序(セルC22A)を、図3の(b)における関数“MethodC”(セルC14B)の関数呼出順序(セルC24B)に一致させるまでに、置換手順(コスト2)が1回、削除手順(コスト1)が2回必要である。
そして、類似度算出部154は、コストと手順回数との乗算の総和を編集距離として算出する。したがって、類似度算出部154は、「2×1+1×2=4」を、編集距離として算出する。なお、編集距離においては編集距離の値が小さい程、系列の類似度が高いことを表す。
次に、関数呼出順序情報を用いて、ソースコード内の関数とバイトコード内の関数とにおける、最長共通部分列を算出する場合について説明する。例えば、図2の(b)におけるソースコードLaの関数“MethodB”と、図3の(b)におけるバイトコードLbの関数“MethodA”との最長共通部分列の値を算出する場合を例に説明する。
まず、類似度算出部154は、図2の(b)におけるソースコードLaの関数“MethodB”の関数呼出順序(セルC23A)と、図3の(b)におけるバイトコードLbの関数“MethodA”の関数呼出順序(セルC22B)とを比較する。続いて、類似度算出部154は、ソースコードLaの関数“MethodB”の関数呼出順序(セルC23A)と、バイトコードLbの関数“MethodA”の関数呼出順序(セルC22B)とにおいて、共通する関数呼出順序の部分列であって最長の部分列を求める。そして、類似度算出部154は、求めた部分列の長さを類似度として求める。
この場合には、ソースコードLaの関数“MethodB”の関数呼出順序(セルC23A)と、バイトコードLbの関数“MethodA”の関数呼出順序(セルC22B)とでは、共通する関数呼出順序の部分列であって最長の部分列は、“println()→send()”の二つの部分列である。そして、この“println()→send()”の最長共通部分列の長さは、2となる。したがって、類似度算出部154は、ソースコードLaの関数“MethodB”の関数呼出順序(セルC23A)と、バイトコードLbの関数“MethodA”の関数呼出順序(セルC22B)とに対し、関数呼出順序の部分的なシーケンスを考慮した類似度として、2を算出する。なお、最長共通部分列を用いた類似度は、値が大きい程、系列の類似度が高いことを示す。
また、類似度算出部154は、上述のように算出した関数定義情報や関数呼出順序情報を用いた類似度に適宜重み付けを行うことによって、特徴の優先度を変更することもできる。もちろん、類似度算出部154は、このような重みづけを行わずともよい。
[判定部の処理]
次に、判定部155の処理について説明する。判定部155は、類似度算出部154によって算出された類似度に基づいて、プログラムが特定のソースコードを使用して生成されているか否かを判定する。ここでは、判定部155が、一つのソースコードと一つのバイトコードとを入力データとして、これらの類似度を判定する場合について説明する。
具体的には、予め、判定において使用する任意の閾値を、二つの類似度のそれぞれに対して設定しておく。二つの類似度は、上述したように、関数定義情報に基づく類似度、及び、関数呼出順序情報に基づく類似度である。そして、判定部155は、ソースコードの関数に対する二つの類似度と、バイトコードの関数に対する二つの類似度とにおいて、いずれも閾値以上となる類似度を有する関数の組み合わせが存在した場合、バイトコード中の関数が、比較対象のソースコードの関数部分を用いて実装されたと判定する。
また、判定装置10では、予め、関数定義情報の同一性を考慮した類似度、関数呼出順序情報に基づく類似度である編集距離及び最長共通部分列の三つの類似度について、類似度算出部154が算出する三つの類似度の組み合わせを予め設定しておいてもよい。そして、判定装置10では、これらの組み合わせごとに、プログラムが特定のソースコードを使用して生成されていると判定できる旨、或いは、プログラムが特定のソースコードを使用して生成されていないと判定できる旨、を対応付けた判定用テーブルを設定してもよい。この場合、判定部155は、この判定用テーブルを参照し、類似度算出部154が算出した三つの類似度の組み合わせに対応する判定内容を用いて、判定を行ってもよい。
また、判定部155による判定処理は、個々の関数同士の類似度にそれぞれ閾値を設けて判定する処理に限らない。例えば、判定装置10では、バイトコード中の特定のクラスに含まれる関数群と、ソースコードに含まれる関数群との類似度算出結果の合算値に対して閾値を設定する。そして、判定部155は、合算値が閾値を超えているかを基に、クラスごとに、このバイトコードが比較対象のソースコードを用いて実装されたか否かを判定してもよい。もちろん、判定装置10では、予め設定された所定の演算式に各類似度を適用した場合の演算値に対する閾値を設定し、判定部155は、各類似度をこの演算式に適用した際の演算値と、閾値との比較結果を基に判定を行ってもよい。
また、判定部155が、関数定義情報の同一性を考慮した類似度、及び、関数呼出順序情報に基づく類似度である編集距離、最長共通部分列の三つの類似度に基づいて判定を行う場合について説明したが、もちろんこれに限らない。判定部155は、比較対象のソースコードが、単一の関数のみで短い場合には、三つの類似度のうちの一つ或いは二つの類似度に基づいて判定を行ってもよい。例えば、判定部155は、比較対象のソースコードが短い場合には、関数定義情報の同一性を考慮した類似度のみを用いて判定を行ってもよい。
また、本実施の形態に係る判定装置10では、一つのソースコードと一つのバイトコードとを入力とし、その類似度を判定する手順を説明したが、もちろん、これに限らない。判定装置10は、複数のソースコードと複数のバイトコードとを入力とし、算出した類似度に基づき、いずれかのバイトコードがいずれかのソースコードを用いて実装していることを判定してもよい。
[判定装置における処理手順]
次に、図4を参照して、判定装置10における処理手順の一例について説明する。図4は、図1に示す判定装置10による判定処理の処理手順を示すフローチャートである。
まず、ソースコード特徴情報抽出部152は、入力されたソースコードから特徴情報を抽出するソースコード特徴情報抽出処理を行う(ステップS1)。また、バイトコード特徴情報抽出部153は、プログラムのバイトコードから特徴情報を抽出するバイトコード特徴情報抽出処理を行う(ステップS2)。なお、ステップS1及びステップS2は、並列処理でもよいし、どちらが先に処理されてもよい。
続いて、類似度算出部154は、ソースコードから抽出された特徴情報及びバイトコードから抽出された特徴情報に基づき、バイトコード、ソースコードのそれぞれに含まれる関数同士の類似度を算出する類似度算出処理を行う(ステップS3)。
そして、判定部155は、類似度算出処理において算出された類似度と任意の閾値とに基づき、入力されたソースコードがバイトコード(プログラム)に含まれているか否かを判定する判定処理を行う(ステップS4)。言い換えると、判定部155は、類似度算出処理において算出された類似度と任意の閾値とに基づき、プログラムが、入力された特定のソースコードを使用して生成されているか否かを判定する。
[ソースコード特徴情報抽出処理の処理手順]
図5は、図4に示すソースコード特徴情報抽出処理の処理手順を示すフローチャートである。なお、図5では、比較対象のソースコードが複数のクラス定義を含んでいない場合を想定している。
まず、ソースコード特徴情報抽出部152は、ソースコード内に記述されている全関数を抽出する処理を行う(ステップS11)。そして、ソースコード特徴情報抽出部152は、ステップS11において抽出した関数のうち、特徴情報の抽出を行っていない特徴未抽出の関数を選択する(ステップS12)。続いて、ソースコード特徴情報抽出部152は、この選択した関数の関数定義情報を抽出する(ステップS13)。そして、ソースコード特徴情報抽出部152は、この選択した関数の実装内における関数呼出順序情報を抽出する(ステップS14)。
続いて、ソースコード特徴情報抽出部152は、ステップS11において抽出したすべての関数から特徴情報を抽出したか否かを判断する(ステップS15)。ソースコード特徴情報抽出部152は、ステップS11において抽出したすべての関数から特徴情報を抽出したと判断した場合(ステップS15:Yes)、ソースコード特徴情報抽出処理を終了する。一方、ソースコード特徴情報抽出部152は、ステップS11において抽出したすべての関数から特徴情報を抽出していないと判断した場合(ステップS15:No)、ステップS12に戻り、特徴未抽出の関数を選択し、ステップS13以降の処理を実行する。
[バイトコード特徴情報抽出処理の処理手順]
図6は、図4に示すバイトコード特徴情報抽出処理の処理手順を示すフローチャートである。なお、図6では、判定対象のバイトコードが複数のクラス定義を含んでいる場合を想定し、説明する。
バイトコード特徴情報抽出部153は、入力されたバイトコードについて、バイトコードに記述されているすべてのクラスを抽出する(ステップS21)。バイトコード特徴情報抽出部153は、抽出したクラスのうち、未解析クラスを選択し(ステップS22)、選択したクラス内の全関数を抽出する処理を行う(ステップS23)。なお、図6において、解析とは、関数定義情報及び関数呼出順序情報を特徴情報として抽出することをいう。
そして、バイトコード特徴情報抽出部153は、抽出した関数の内、特徴情報抽出を行っていない特徴未抽出の関数を選択し(ステップS24)、選択した関数の関数定義情報を抽出する(ステップS25)。続いて、バイトコード特徴情報抽出部153は、選択した関数の実装内における関数呼出順序情報を抽出する(ステップS26)。
バイトコード特徴情報抽出部153は、ステップS23において抽出した全ての関数から特徴情報の抽出を行ったか否かを判断する(ステップS27)。バイトコード特徴情報抽出部153は、ステップS23において抽出した全ての関数から特徴情報の抽出を行っていないと判断した場合(ステップS27:No)、ステップS24に戻り、特徴未抽出の関数の選択を行い、以降の処理を実行する。
これに対し、バイトコード特徴情報抽出部153は、ステップS23において抽出した全ての関数から特徴情報の抽出を行ったと判断した場合(ステップS27:Yes)、ステップS21において抽出したすべてのクラスを解析したか否かを判断する(ステップS28)。バイトコード特徴情報抽出部153は、抽出したすべてのクラスを解析していないと判断した場合には(ステップS28:No)、ステップS22に戻り、解析していないクラスの選択を実行する。一方、バイトコード特徴情報抽出部153は、抽出したすべてのクラスを解析したと判断した場合には(ステップS28:Yes)、バイトコード特徴情報抽出処理を終了する。
[類似度算出処理の処理手順]
図7は、図4に示す類似度算出処理の処理手順を示すフローチャートである。図7に示すように、類似度算出部154は、ソースコード内の全関数抽出処理(図5のステップS11)において抽出したソースコード内の関数一覧(関数群1とする。)を取得し、この関数群1から未解析関数(関数Aとする。)を選択する(ステップS31)。同様に、類似度算出部154は、バイトコードにおける選択クラス内の全関数抽出処理(図6のステップS23)において抽出した関数一覧(関数群2とする。)を取得し、この関数群2から未解析関数(関数Bとする。)を選択する(ステップS32)。なお、図7において、解析とは、関数Aと関数Bとの類似度を算出することをいう。
次に、類似度算出部154は、ステップS31及びステップS32において選択した関数A及び関数Bのそれぞれの関数定義情報及び関数呼出順序情報を用いて、ソースコードの関数Aとバイトコードの関数Bとを比較し、類似度を算出する(ステップS33)。前述したように、類似度算出部154は、類似度として、関数定義の同一性を考慮した類似度と、関数呼出順序の部分的なシーケンスを考慮した類似度である編集距離及び最長共通部分列とを算出する。
そして、類似度算出部154は、ステップS32において取得した関数群2に含まれる関数をすべて比較したか否かを判断する(ステップS34)。類似度算出部154は、ステップS32において取得した関数群2に含まれる関数をすべて比較していないと判断した場合(ステップS34:No)、ステップS32に戻り、関数群2からの未解析関数の選択を行う。
これに対し、類似度算出部154は、ステップS32において取得した関数群2に含まれる関数をすべて比較したと判断した場合(ステップS34:Yes)、関数群1に含まれるすべての関数を比較したか否かを判断する(ステップS35)。そして、類似度算出部154は、関数群1に含まれるすべての関数を比較していないと判断した場合(ステップS35:No)、ステップS31に戻り、関数群1からの未解析関数を選択する。
一方、類似度算出部154は、関数群1に含まれるすべての関数を比較したと判断した場合(ステップS35:Yes)、類似度算出処理を終了する。判定部155は、類似度算出処理の出力として得られたソースコードに含まれる全関数と、バイトコードに含まれる全関数との類似度算出結果を用いて、判定対象プログラム(バイトコード)が、比較対象のソースコードを使用して生成されているか否かを判定する。例えば、判定部155は、前述したように、任意の閾値を用いて、類似度が閾値以上の関数の組み合わせが存在した場合、バイトコード中の関数が、比較対象のソースコードの関数部分を用いて実装されたと判定する。
[実施の形態の効果]
このように、本実施の形態では、入力されたソースコードとプログラムのバイトコードとのそれぞれから、関数を定義する情報である関数定義情報、及び、関数内で実行される関数名が実行される順序で記載された関数呼出順序情報を特徴情報として抽出する。そして、本実施の形態では、この特徴情報である関数定義情報及び関数呼出順序情報を用いて、ソースコード内の関数とバイトコード内の関数との類似度を算出する。
この関数定義情報及び関数呼出順序情報はデータ形式に限らず抽出可能であるため、本実施によれば、プログラムのバイトコードとソースコードとのデータ形式が異なる場合であっても、バイトコードとソースコードとのそれぞれから特徴情報を抽出できる。この結果、本実施の形態では、抽出した特徴情報を基に、ソースコード内の関数とバイトコード内の関数との類似度を適切に算出することができる。さらに、本実施の形態では、プログラムのバイトコードとソースコードとのデータ形式が異なる場合であっても、適切に算出された類似度を取得することができるため、プログラムが、特定のソースコードを使用して生成されているか否かを正確に判定することができるという効果を奏する。
また、本実施の形態では、特徴情報抽出部151は、ソースコードにおける変数の型情報或いはパッケージ構造の情報が欠落している場合には、欠落している部分を任意の変数、任意の型或いは任意のパッケージ構造の情報とみなして、特徴情報を抽出している。さらに、本実施の形態では、特徴情報抽出部151は、バイトコード中の関数の識別子が難読化されており、かつ、関数の定義及び関数の呼び出しを関連付けることができる場合には、関数の識別子を任意の文字列とみなして、特徴情報を抽出している。
このように、本実施の形態では、ソースコードが、情報が欠落した断片的なコードであっても、欠落している部分を補完する処理は、上述のような簡易な処理で足りる。また、本実施の形態では、バイトコード中の識別子が難読化されている場合も任意の文字列に置き換えるのみでよい。したがって、本実施の形態によれば、例えば、従来必要であったソースコードのコンパイルに必要な情報を補完するという煩雑な処理を行うこともない。
また、本実施の形態では、類似度算出部154は、関数定義情報として抽出された修飾子、識別子、引数の型或いは戻り値の型に基づいて類似度を算出するとともに、関数呼出順序情報に対して順序関係を考慮した比較アルゴリズムを適用して類似度を算出する。すなわち、本実施の形態では、複数種別の特徴情報のそれぞれに応じた類似度を複数算出する。したがって、本実施の形態では、複数の類似度を用いた判定処理を行うことができ、厳密な判定結果を得ることができる。そして、本実施の形態では、複数の類似度を用いることができるため、判定処理として様々な手法を選択することができ、判定処理内容を柔軟に設定することができる。
[システム構成等]
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部又は任意の一部が、CPU及び当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部又は一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
[プログラム]
図8は、プログラムが実行されることにより、判定装置10が実現されるコンピュータの一例を示す図である。コンピュータ1000は、例えば、メモリ1010、CPU1020を有する。また、コンピュータ1000は、ハードディスクドライブインタフェース1030、ディスクドライブインタフェース1040、シリアルポートインタフェース1050、ビデオアダプタ1060、ネットワークインタフェース1070を有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1100に挿入される。シリアルポートインタフェース1050は、例えばマウス1110、キーボード1120に接続される。ビデオアダプタ1060は、例えばディスプレイ1130に接続される。
ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、判定装置10の各処理を規定するプログラムは、コンピュータ1000により実行可能なコードが記述されたプログラムモジュール1093として実装される。プログラムモジュール1093は、例えばハードディスクドライブ1090に記憶される。例えば、判定装置10における機能構成と同様の処理を実行するためのプログラムモジュール1093が、ハードディスクドライブ1090に記憶される。なお、ハードディスクドライブ1090は、SSD(Solid State Drive)により代替されてもよい。
また、上述した実施の形態の処理で用いられる設定データは、プログラムデータ1094として、例えばメモリ1010やハードディスクドライブ1090に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して実行する。
なお、プログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、プログラムモジュール1093及びプログラムデータ1094は、ネットワーク(LAN、WAN等)を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール1093及びプログラムデータ1094は、他のコンピュータから、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
以上、本発明者によってなされた発明を適用した実施の形態について説明したが、本実施の形態による本発明の開示の一部をなす記述及び図面により本発明は限定されることはない。すなわち、本実施の形態に基づいて当業者等によりなされる他の実施の形態、実施例及び運用技術等は全て本発明の範疇に含まれる。
10 判定装置
11 入力部
12 出力部
13 通信部
14 記憶部
15 制御部
151 特徴情報抽出部
152 ソースコード特徴情報抽出部
153 バイトコード特徴情報抽出部
154 類似度算出部
155 判定部

Claims (7)

  1. 入力されたソースコードとプログラムのバイトコードとのそれぞれから、関数を定義する情報である関数定義情報、及び、関数内で実行される関数名が実行される順序で記載された関数呼出順序情報を特徴情報として抽出する特徴情報抽出部と、
    前記特徴情報抽出部によって抽出された特徴情報を用いて、前記ソースコード内の関数と前記バイトコード内の関数との類似度を算出する類似度算出部と、
    を有し、
    前記特徴情報抽出部は、前記ソースコードにおける変数の型情報或いはパッケージ構造の情報が欠落している場合には、欠落している部分を任意の型或いは任意のパッケージ構造の情報とみなすことを特徴とする判定装置。
  2. 前記類似度算出部によって算出された類似度に基づいて、前記プログラムが特定のソースコードを使用して生成されているか否かを判定する判定部をさらに有することを特徴とする請求項1に記載の判定装置。
  3. 前記特徴情報抽出部は、前記バイトコード中の関数の識別子が難読化されており、かつ、前記関数の定義及び前記関数の呼び出しを関連付けることができる場合には、前記関数の識別子を任意の文字列とみなすことを特徴とする請求項1または2に記載の判定装置。
  4. 前記特徴情報抽出部は、前記関数定義情報として、修飾子、識別子、引数及び戻り値の型を抽出し、
    前記類似度算出部は、前記特徴情報抽出部によって抽出された修飾子、識別子、引数及び戻り値の型に基づいて前記類似度を算出することを特徴とする請求項1〜のいずれか一つに記載の判定装置。
  5. 前記類似度算出部は、前記特徴情報抽出部によって抽出された関数呼出順序情報に対して、順序関係を考慮した比較アルゴリズムを適用して前記類似度を算出することを特徴とする請求項1〜のいずれか一つに記載の判定装置。
  6. プログラムが特定のソースコードを使用して生成されているか否かを判定する判定装置であって、特徴情報抽出部と類似度算出部と判定部とを有する判定装置が実行する判定方法であって、
    前記判定装置の前記特徴情報抽出部が、入力された前記ソースコードと前記プログラムのバイトコードとのそれぞれから、関数を定義する情報である関数定義情報、及び、関数内で実行される関数名が実行される順序で記載された関数呼出順序情報を特徴情報として抽出する特徴情報抽出工程と、
    前記判定装置の前記類似度算出部が、前記特徴情報抽出工程において抽出された特徴情報を用いて、前記ソースコード内の関数と前記バイトコード内の関数との類似度を算出する類似度算出工程と、
    前記判定装置の前記判定部が、前記類似度算出工程において算出された類似度に基づいて、前記プログラムが特定のソースコードを使用して生成されているか否かを判定する判定工程と、
    を含み、
    前記特徴情報抽出工程は、前記ソースコードにおける変数の型情報或いはパッケージ構造の情報が欠落している場合には、欠落している部分を任意の型或いは任意のパッケージ構造の情報とみなすことを特徴とする判定方法。
  7. 入力されたソースコードとプログラムのバイトコードとのそれぞれから、関数を定義する情報である関数定義情報、及び、関数内で実行される関数名が実行される順序で記載された関数呼出順序情報を特徴情報として抽出する特徴情報抽出ステップと、
    前記特徴情報抽出ステップにおいて抽出された特徴情報を用いて、前記ソースコード内の関数と前記バイトコード内の関数との類似度を算出する類似度算出ステップと、
    前記類似度算出ステップによって算出された類似度に基づいて、前記プログラムが特定のソースコードを使用して生成されているか否かを判定する判定ステップと、
    をコンピュータに実行させ
    前記特徴情報抽出ステップは、前記ソースコードにおける変数の型情報或いはパッケージ構造の情報が欠落している場合には、欠落している部分を任意の型或いは任意のパッケージ構造の情報とみなす判定プログラム。
JP2018557527A 2016-12-19 2017-08-23 判定装置、判定方法及び判定プログラム Active JP6674048B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2016245768 2016-12-19
JP2016245768 2016-12-19
PCT/JP2017/030038 WO2018116522A1 (ja) 2016-12-19 2017-08-23 判定装置、判定方法及び判定プログラム

Publications (2)

Publication Number Publication Date
JPWO2018116522A1 JPWO2018116522A1 (ja) 2019-03-22
JP6674048B2 true JP6674048B2 (ja) 2020-04-01

Family

ID=62626113

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018557527A Active JP6674048B2 (ja) 2016-12-19 2017-08-23 判定装置、判定方法及び判定プログラム

Country Status (4)

Country Link
US (1) US20190391806A1 (ja)
EP (1) EP3540596B1 (ja)
JP (1) JP6674048B2 (ja)
WO (1) WO2018116522A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112199115A (zh) * 2020-09-21 2021-01-08 复旦大学 基于特征相似度匹配的跨Java字节码和源代码行关联方法
CN113469284B (zh) * 2021-07-26 2024-07-02 浙江大华技术股份有限公司 一种数据分析的方法、装置及存储介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5699507A (en) * 1995-01-17 1997-12-16 Lucent Technologies Inc. Method of identifying similarities in code segments
JPH11249875A (ja) * 1998-02-26 1999-09-17 Nec Ic Microcomput Syst Ltd プログラミング支援方法及びその装置
JP3736308B2 (ja) * 2000-07-14 2006-01-18 日本電気株式会社 ソフトウェアコンポーネント自動生成システム
WO2007117585A2 (en) * 2006-04-06 2007-10-18 Smobile Systems Inc. System and method for managing malware protection on mobile devices
US8429628B2 (en) * 2007-12-28 2013-04-23 International Business Machines Corporation System and method for comparing partially decompiled software
US8407667B2 (en) * 2009-03-20 2013-03-26 Microsoft Corporation Inferring missing type information for reflection
US8539475B2 (en) * 2009-09-29 2013-09-17 Oracle America, Inc. API backward compatibility checking
JP5654944B2 (ja) * 2011-05-02 2015-01-14 Kddi株式会社 アプリケーション解析装置およびプログラム
JP6379654B2 (ja) * 2014-05-15 2018-08-29 富士通株式会社 処理実行プログラム、処理実行方法、及び情報処理装置
CN106575337A (zh) * 2014-08-20 2017-04-19 日本电信电话株式会社 漏洞发现装置、漏洞发现方法以及漏洞发现程序

Also Published As

Publication number Publication date
EP3540596A4 (en) 2020-06-17
EP3540596B1 (en) 2021-05-19
EP3540596A1 (en) 2019-09-18
JPWO2018116522A1 (ja) 2019-03-22
US20190391806A1 (en) 2019-12-26
WO2018116522A1 (ja) 2018-06-28

Similar Documents

Publication Publication Date Title
KR101687213B1 (ko) 동적으로 로딩하는 그래프 기반 계산
Rahimian et al. Bincomp: A stratified approach to compiler provenance attribution
US8726255B2 (en) Recompiling with generic to specific replacement
US20060005177A1 (en) Method, system and program product for optimizing java application performance through data mining
US9817643B2 (en) Incremental interprocedural dataflow analysis during compilation
CN110825363B (zh) 智能合约获取方法、装置、电子设备及存储介质
CN110059456B (zh) 代码保护方法、代码保护装置、存储介质与电子设备
Buinevich et al. Testing of utilities for finding vulnerabilities in the machine code of telecommunication devices
US10409572B2 (en) Compiled file normalization
CN108027748A (zh) 指令集模拟器及其模拟器生成方法
JP6674048B2 (ja) 判定装置、判定方法及び判定プログラム
US10013244B2 (en) Apparatus and method to compile a variadic template function
Michelon et al. Mining feature revisions in highly-configurable software systems
US12001325B2 (en) Test data generation apparatus, test data generation method and program
KR102439778B1 (ko) 애플리케이션의 보안성 향상을 위한 애플리케이션 변환 장치 및 방법
KR101436741B1 (ko) 프로그램 보안 솔루션 적용 방법 및 시스템
CN114174983B (zh) 用于高级构造的优化的自动验证的方法和系统
WO2016189721A1 (ja) ソースコード評価装置及びソースコード評価方法及びソースコード評価プログラム
Rosiak et al. Analyzing variability in 25 years of industrial legacy software: an experience report
Nep et al. A research on countering virtual machine evasion techniques of malware in dynamic analysis
Dias et al. Experiencing dfanalyzer for runtime analysis of phylogenomic dataflows
JP2014225160A (ja) 情報処理装置および情報処理方法
CN112052462B (zh) 一种虚拟化加密方法、终端及存储介质
US20150220310A1 (en) Object field optimization
JP2018147114A (ja) テストケース生成方法、計算機及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200107

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200205

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200305

R150 Certificate of patent or registration of utility model

Ref document number: 6674048

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150