(57)【要約】  プログラムバイナリからソースコードを識別するための分類器システムが開示される。システムは、１つ以上のプロセッサ（１１０）と、１つ以上のプロセッサに通信可能に結合されるメモリ（１２０）と、セグメントのバイナリフォーマットを視覚的に表現するため、１つ以上のプロセッサにセグメントをイメージ（１８０）に変換させる命令を含むイメージモジュール（１３０）と、分類器を使用して、セグメントをソースコードにリバースエンジニアリングするために、１つ以上のプロセッサに、少なくとも部分的にイメージに基づき、セグメントに対応するソースコードを特定するセグメントインジケータ（１９０）を生成させる命令を含む認識モジュール（１４０）と、を含む。【選択図】図１
2021534498.tif 000002
【特許請求の範囲】
【請求項１】
プログラムバイナリからソースコードを識別する分類器システムであって、
１つ以上のプロセッサ（１１０）、および
１つ以上のプロセッサと通信可能に結合され、１つ以上のプロセッサによって実行されるとき、電子的入力として、バイナリフォーマットで表されたコードのセグメント（１７０）の受信に応答して、１つ以上のプロセッサに、セグメントのバイナリフォーマットを視覚的に表現するために、セグメントをイメージ（１８０）に変換させるための命令を含むイメージモジュール（１３０）と、１つ以上のプロセッサによって実行されるとき、分類器を使用して、セグメントをソースコードにリバースエンジニアリングするために、１つ以上のプロセッサに、分類器（１６０）からの電子的出力として、少なくとも部分的にイメージに基づく、セグメントに対応するソースコードを特定するセグメントインジケータを生成させる命令を含む認識モジュール（１４０）と、を格納するメモリ（１２０）を備える分類器システム。
【請求項２】
イメージモジュールは、セグメントのビットを使用してビットマップ内の個別のピクセルの値を定義することにより、セグメントを使用してビットマップをコード化することによって、セグメントをイメージに変換する命令を含む、請求項１に記載の分類器システム。
【請求項３】
セグメントを定義するソースコードは、セグメントがマシンコードであるバイナリフォーマットで表されることによって難読化され、
セグメントインジケータは、コードクラスの信頼区間とともに、ソースコードのコードクラスを特定する、請求項１又は２に記載の分類器システム。
【請求項４】
認識モジュールは、分類器内で具現化された、学習された相関関係により、セグメントと対応するソースコードを識別するため、セグメントをリバースエンジニアリングすべく、分類器を使用してセグメントインジケータを生成する命令を含む、請求項１乃至３のいずれか１項に記載の分類器システム。
【請求項５】
認識モジュールは、ソースコードの知識なしでセグメントのソースコードを復元するための、バイナリフォーマットと関連するソースコードとの間の相関関係の内部理解を有する機械学習アルゴリズムである分類器を使用してイメージを処理する命令を含む、イメージを分析する命令を含み、
認識モジュールは、既知のソースコードに対応するイメージ内のパターンを識別することを通じて、ソースコードとバイナリフォーマットとの間の相関関係を認識するように、分類器をトレーニングする命令を含む、請求項１乃至４のいずれか１項に記載の分類器システム。
【請求項６】
認識モジュールは、分類器によって生成される結果が、セグメントのソースコードを特定する、定義されたラベルと一致するかどうかに従って、分類器にフィードバックを与えることにより、イメージに表されるバイナリコードのセグメントと関連するソースコードを認識するように、分類器をトレーニングする命令をさらに含む、請求項１乃至５のいずれか１項に記載の分類器システム。
【請求項７】
認識モジュールは、ソースコードのコードクラスを近似するように分類器をトレーニングする命令を含む、分類器をトレーニングするための命令を含む、請求項６に記載の分類器システム。
【請求項８】
認識モジュールは、少なくとも、セグメントの機能全体を説明する関数レベルで、ソースコードを識別するように分類器をトレーニングする命令を含む、分類器をトレーニングするための命令を含む、請求項６に記載の分類器システム。
【請求項９】
１つ以上のプロセッサ（１１０）によって実行されるとき、１つ以上のプロセッサに、
電子的入力として、バイナリフォーマットで表されるコードのセグメント（１７０）の受信に応答して、セグメントのバイナリフォーマットを視覚的に表すために、セグメントをイメージ（１８０）に変換させ、
分類器を使用してセグメントをソースコードにリバースエンジニアリングするために、分類器（１６０）からの電子的出力として、少なくとも部分的にイメージに基づく、セグメントに対応するソースコードを特定するセグメントインジケータ（１９０）を生成させる、プログラムバイナリからソースコードを識別するための命令を格納する非一時的コンピュータ可読媒体。
【請求項１０】
セグメントをイメージに変換する命令は、セグメントのビットを使用してビットマップ内の個別のピクセルの値を定義することにより、セグメントを使用してビットマップをコード化する命令を含む、請求項９に記載の非一時的コンピュータ可読媒体。
【請求項１１】
セグメントを定義するソースコードは、セグメントがマシンコードであるバイナリフォーマットで表されることによって難読化され、
セグメントインジケータは、コードクラスの信頼区間とともに、ソースコードのコードクラスを特定する、請求項１又は２に記載の非一時的コンピュータ可読媒体。
【請求項１２】
セグメントインジケータを生成する命令は、分類器内で具現化された、学習された相関関係により、セグメントと対応するソースコードを識別することによりセグメントをリバースエンジニアリングするように、分類器を使用する命令を含む、請求項９乃至１１のいずれか１項に記載の非一時的コンピュータ可読媒体。
【請求項１３】
イメージを分析する命令は、ソースコードの知識なしでセグメントのソースコードを復元するための、バイナリフォーマットと関連するソースコードとの間の相関関係の内部理解を有する機械学習アルゴリズムである分類器を使用してイメージを処理する命令を含み、
分類器をトレーニングする命令は、既知のソースコードに対応するイメージ内のパターンを識別することを通じて、分類器に、バイナリフォーマットからソースコードを認識するための相関関係を発現させる、請求項９乃至１２のいずれか１項に記載の非一時的コンピュータ可読媒体。
【請求項１４】
プログラムバイナリからソースコードを識別する方法であって、
電子的入力として、バイナリフォーマットで表されるコードのセグメント（１７０）の受信に応答して、セグメントのバイナリフォーマットを視覚的に表すために、セグメントをイメージ（１８０）に変換すること、
分類器を使用してセグメントをソースコードにリバースエンジニアリングするために、
分類器（１６０）からの電子的出力として、少なくとも部分的にイメージに基づく、セグメントに対応するソースコードを特定するセグメントインジケータ（１９０）を生成すること、を含む方法。
【請求項１５】
セグメントをイメージに変換することは、セグメントのビットを使用してビットマップ内の個別のピクセルの値を定義することにより、セグメントを使用してビットマップをコード化することを含む、請求項１４に記載の方法。
【請求項１６】
セグメントを定義するソースコードは、セグメントがマシンコードであるバイナリフォーマットで表されることによって難読化され、
セグメントインジケータは、セグメント識別子の信頼区間とともに、ソースコードのコードクラスを特定する、請求項１４又は１５に記載の方法。
【請求項１７】
分類器を使用してセグメントインジケータを生成することは、分類器内で具現化された、学習された相関関係により、セグメントと対応するソースコードを識別するため、セグメントをリバースエンジニアリングする、請求項１４乃至１６のいずれか１項に記載の方法。
【請求項１８】
イメージを分析する命令は、ソースコードの知識なしでセグメントのソースコードを復元するため、バイナリフォーマットと関連するソースコードとの間の相関関係の内部理解を有する機械学習アルゴリズムである分類器を使用してイメージを処理することによってイメージを分析すること、をさらに備え、
分類器は、既知のソースコードに対応するイメージ内のパターンを識別することを通じて、ソースコードとバイナリフォーマットとの相関関係を認識する、請求項１４乃至１７のいずれか１項に記載の方法。
【請求項１９】
分類器によって生成される結果が、セグメントの元のソースコードを特定する、定義されたラベルと一致するかどうかに従って、分類器にフィードバックを与えることによって、イメージに視覚的に表されるバイナリコードのセグメントと関連する元のソースコードを識別するように、分類器をトレーニングすることをさらに含む、請求項１４乃至１８のいずれか１項に記載の方法。
【請求項２０】
分類器をトレーニングすることは、ソースコードのコードクラスを近似するように分類器をトレーニングすることを含み、
分類器をトレーニングすることは、少なくとも、セグメントの機能全体を説明する関数レベルで、ソースコードを識別するように分類器をトレーニングすることを含む、請求項１９に記載の方法。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
この出願は、２０１８年１０月１７日に出願された米国特許出願第１６／１６２７６８号の利益を主張する。上記の出願の全開示が、参照により本明細書に組み込まれる。
【技術分野】
【０００２】
本明細書で説明される対象は、一般に、バイナリマシンコードからソースコードセグメントを識別するためのシステム及び方法に関し、より具体的には、バイナリコードをイメージに変換し、機械学習アルゴリズムを使用して、イメージからソースコードを識別するシステム及び方法に関する。
【背景技術】
【０００３】
コンパイルされたマシンコード、つまりバイナリからプログラムのソースコードを識別することは、複雑な作業である。これらの複雑さは、バイナリ表現がプログラムの元のソースコードを難読化するために生じ得る。つまり、元のソースコードからコンパイルされるバイナリマシンコードは、特定のコンパイラの実行に従って、類似の機能を実現するための、いくつかの異なる方法で生成することができるため、バイナリを正確な元のソースコードに直接戻すことは一般的に困難である。これは、バイナリを生成したコンパイラに関する知識が不足していることが原因である可能性があり、より一般的には、バイナリ表現の全体的な複雑さが原因である可能性がある。
【０００４】
例えば、セキュリティを維持するという観点では、悪意のある攻撃がどのようにプログラムを危険にさらしたのか、あるいは悪意のあるコードの特定の部分がどのように機能するのかを明らかにするために、危険にさらされたバイナリや独立した悪意のあるコードのバイナリをリバースエンジニアリングすることは有用である。しかし、バイナリコードをリバースエンジニアリングしようとすると、一般的には、不正確なツールを使用してバイナリコードから元のソースコードを近似し、その近似をベースとして用いて、ソースコードを手動で再構築することを含む複数のステップが必要になる。この複数ステップのプロセスは面倒な作業であり、しばしば、完全に正確な再構築を提供することができない。
【発明の概要】
【０００５】
一実施形態において、例示的なシステムおよび方法は、バイナリコードからのソースコードの識別を改善するための機械学習アルゴリズム（例えば、深層学習ニューラルネットワーク）の使用に関する。たとえば、機械学習アルゴリズムは、視覚データ（カメライメージなど）内の車、歩行者、その他の物体などの目標物を識別する能力があるため、目標物の検出と認識に使用されることがよくある。そこで、今回のアプローチでは、バイナリコードを表すイメージからソースコードを識別するというユニークな方法を採用し、この能力を活用する。開示されるシステムおよび方法は、一般に、バイナリコードを視覚的イメージに変換することによって機能する。つまり、1つのアプローチでは、システムは、バイナリコードのビットを使用してイメージ内のピクセルの値をコード化することにより、バイナリコードを表すイメージを生成する。その結果であるイメージは、バイナリコードの視覚的表現を提供する。
【０００６】
そのため、例えば、ソースコードセグメント、または少なくともソースコードセグメントのコードクラスを識別するラベルが付けられたバイナリコードのサンプルイメージを使用して初期的にトレーニングされる、選択された機械学習アルゴリズムを使用して、分類器が実現される。従って、分類器は、バイナリでコード化されたイメージとソースコードセグメントとの間の相関関係の内部理解を発現し、システムがその後そのようなイメージを処理するときに、分類器が対応するソースコードセグメントを識別できるようになる。このように、開示されるシステムおよび方法は、視覚データのパターンを認識するための機械学習アルゴリズムの能力を活用することによって、バイナリマシンコードをリバースエンジニアリングするプロセスを改善する。
【０００７】
一実施形態では、プログラムバイナリからソースコードを識別するための分類器システムが開示される。分類器システムは、１つ以上のプロセッサと、１つ以上のプロセッサに通信可能に結合されるメモリとを含む。メモリは、1つ以上のプロセッサによって実行されるとき、電子的入力として、バイナリフォーマットで表されるコードのセグメントを受信することに応答して、セグメントのバイナリフォーマットを視覚的に表現するため、１つ以上のプロセッサにセグメントをイメージに変換させる命令を含むイメージモジュールを格納する。メモリは、分類器を使用して、セグメントをソースコードにリバースエンジニアリングするために、１つ以上のプロセッサによって実行されるとき、１つ以上のプロセッサに、少なくとも部分的にイメージに基づき、セグメントに対応するソースコードを特定するセグメントインジケータを、分類器からの電子的出力として生成させる命令を含む認識モジュールを格納する。
【０００８】
一実施形態では、非一時的なコンピュータ可読媒体が開示される。コンピュータ可読媒体は、１つ以上のプロセッサによって実行されるとき、１つ以上のプロセッサに、開示される機能を実行させる命令を格納する。命令は、電子的入力として、バイナリフォーマットで表されるコードのセグメントを受信することに応答して、セグメントのバイナリフォーマットを視覚的に表現するため、セグメントをイメージに変換するための命令を含む。命令は、分類器を使用して、セグメントをソースコードにリバースエンジニアリングするために、少なくとも部分的にイメージに基づき、セグメントに対応するソースコードを特定するセグメントインジケータを、分類器からの電子的出力として生成するための命令を含む。
【０００９】
一実施形態では、プログラムバイナリからソースコードを識別する方法が開示される。この方法は、電子入力として、バイナリフォーマットで表されるコードのセグメントを受信することに応答して、セグメントのバイナリフォーマットを視覚的に表現するため、セグメントをイメージに変換することを含む。方法は、分類器を使用して、セグメントをソースコードにリバースエンジニアリングするために、少なくとも部分的にイメージに基づき、セグメントに対応するソースコードを特定するセグメントインジケータを、分類器からの電子的出力として生成することを含む。
【図面の簡単な説明】
【００１０】
本明細書に組み込まれ、その一部を構成する添付図面は、本開示の様々なシステム、方法、および他の実施形態を示す。図中の図示された要素の境界（例えば、ボックス、ボックスのグループ、または他の形状）は、境界の一実施形態を表すことが理解されよう。いくつかの実施形態では、１つの要素が複数の要素として設計されてもよく、または複数の要素が１つの要素として設計されてもよい。いくつかの実施形態では、別の要素の内部コンポーネントとして示される要素は、外部コンポーネントとして実装されてもよく、その逆もあり得る。さらに、要素は縮尺どおりに描かれない場合がある。
【図１】図１は、バイナリコードのセグメントをリバースエンジニアリングすることに関連する分類器システムの一実施形態を示す。
【図２】図２は、開示された分類器システムによって実現される分類器の一実施形態を示す。
【図３】図３は、バイナリコードセグメントを使用してイメージをコード化し、イメージからソースコードを識別することに関連する方法の一実施形態を示す。
【図４】図４は、図１の分類器システムをトレーニングする一例を示す。
【図５】図５は、イメージとして表されるバイナリコードからソースコードを認識するための分類器をトレーニングすることに関連する方法を示す。
【発明を実施するための形態】
【００１１】
ソースコードを復元するためのバイナリコード分析に関連するシステム、方法、および他の実施形態が開示される。前述のように、様々なアプローチにおいて、バイナリマシンコードからのソースコードの復元（つまり、リバースエンジニアリング）は、元のソースコードを再構築するため、手作業ととともに不正確なツールに依存するタスクである。従って、そのようなアプローチは一般に不正確であり、例えば、正確さの欠如のために使用が制限されることがある。
【００１２】
そのため、一実施形態において、本開示は、機械学習アルゴリズムのパターン認識能力を活用して、バイナリコードからのソースコードの復元を改善する分類器システムについて説明する。例えば、機械学習アルゴリズムは、一般的に、特定のアルゴリズムおよびそのアルゴリズムが実行される方法に応じて、様々なタスクを実行することができる。一例として、機械学習アルゴリズムは、視覚データ（例えば、イメージや映像）において、車、歩行者、および他の物体などの目標物を検出／識別するために使用することができる。しかし、バイナリコードは、通常、このような視覚的なフォーマットでは表現されず、代わりに、基となるオペコード、データ、メモリアドレスなどを表す０と１で単に構成される。
【００１３】
従って、開示される分類器システムは、バイナリコードを表し、機械学習アルゴリズムが処理できる視覚データを生成するために、最初にバイナリコードをイメージに変換する。例えば、一態様では、分類器システムは、ビットマップ内のピクセルの値としてバイナリコードのビットを使用して、ビットマップをコード化する。結果として得られるビットマップイメージは、通常、特定のオブジェクト、つまりコードのセグメントであると人間の目で識別することはできない。すなわち、特定のビットマップコード化に応じて、結果として得られるビットマップイメージは、例えば、抽象化されたイメージの中で、静的または「雪」のように見えることがある。しかし、分類器システムは、バイナリコードでコード化されたイメージからソースコードを認識するように分類器（つまり、選択された機械学習アルゴリズム）をトレーニングする。このようにして、分類器システムがバイナリコードでコード化されたイメージに対して分類器を実行したとき、結果として得られる電子的出力は、少なくともソースコードのコードクラスラベルを特定するセグメントインジケータになる。さらなる態様では、分類器システムは、より特定性の高い、関数、入力および出力パラメータ、関数内の特定のステートメントなどの識別子を含むセグメントインジケータを生成する。一般的に、分類器は、特定の用途に応じてさまざまなレベルの特定性にトレーニングされ得る。従って、開示される分類器システムは、機械学習とイメージ処理の組み合わせの使用を通じて、バイナリコードをソースコードにリバースエンジニアリングする精度を改善する。このようにして、ソースコードに注入された悪意のあるコードと、個別のスタンドアロンの悪意のあるコードをより良く識別、分析、および対策することで、様々な電子システムの全体的なセキュリティを向上させることができる。
【００１４】
図１を参照すると、分類器システム１００の一実施形態が示されている。分類器システム１００に関する構成が本明細書で説明されるが、実施形態は、図示される単一のシステムに限定されないことが理解されよう。いくつかの実装形態では、分類器システム１００は、クラウドコンピューティングシステム、クラスターコンピューティングシステム、分散コンピューティングシステム、ソフトウェアアズアサービス（ＳａａＳ）システム、スタンドアロンシステムなどとして具体化され得る。従って、分類器システム１００は、説明の目的のため単一のデバイスとして図示され、説明されるが、開示されるコンポーネントが構成され得る全体的な可能な構成を制限するように解釈されるべきではない。例えば、別個のモジュール、メモリ、データベースなどは、様々な組み合わせで様々なコンピューティングシステムに分散されても良いし、または単一のスタンドアロンシステム内に具現化されても良い。
【００１５】
分類器システム１００はまた、様々な要素を含む。様々な実施形態では、分類器システム１００が図１に示されるすべての要素を有する必要がない場合があることが理解されよう。分類器システム１００は、図１に示される様々な要素の任意の組み合わせを有することができる。さらに、分類器システム１００は、図１に示される要素に対して追加の要素を有することができる。いくつかの構成では、分類器システム１００は、図１に示される１つ以上の要素なしで実現されても良い。さらに、様々な要素が図１の分類器システム１００内に配置されるように示されているが、これらの要素のうちの１つ以上は、分類器システム１００の外部に配置することができることが理解されよう。さらに、示されている要素は、大きな距離によって物理的に隔てられても良い。
【００１６】
加えて、図のシンプルさと分かり易さのために、適宜、対応するまたは類似の要素を示すために、異なる図の間で参照番号が繰り返されることが理解されよう。さらに、説明は、本明細書に記載された実施形態の完全な理解を提供するために、多くの特定の詳細を概説する。しかしながら、当業者は、本明細書に記載の実施形態が、これらの要素の様々な組み合わせを使用して実施され得ることを理解するであろう。
【００１７】
いずれの場合も、分類器システム１００は、分類器１６０を使用してバイナリマシンコードに対応するソースコードを識別することに関連する、本明細書に開示される方法および他の機能を実行するように実現される。言及された機能と方法は、図のさらなる説明でより明らかになるであろう。分類器システム１００は、プロセッサ１１０を含むものとして示されている。このように、様々な実施例において、プロセッサ１１０は、分類器システム１００の一部であっても良いし、分類器システム１００は、データバスまたは別の通信経路を介してプロセッサ１１０にアクセスしても良いし、プロセッサ１１０は、分類器システム１００によってアクセス可能なリモートコンピューティングリソースであっても良い。いずれの場合も、プロセッサ１１０は、マイクロプロセッサ、ＡＳＩＣ、ＧＰＵ（グラフィックスプロセッシングユニット）、またはコンピュータ可読命令を実行することができる他のコンピューティングコンポーネントなどの電子デバイスであり、他の電子デバイスを制御する、または他の電子デバイスの制御を引き起こすために使用され得る様々な電子的出力を生成する。
【００１８】
一実施形態では、分類器システム１００は、イメージモジュール１３０及び認識モジュール１４０を格納するメモリ１２０を含む。メモリ１２０は、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、ハードディスクドライブ、フラッシュメモリ、またはモジュール１３０、１４０を格納するための他の適切なメモリである。モジュール１３０、１４０は、例えば、プロセッサ１１０によって実行されるとき、プロセッサ１１０に、本明細書に開示される様々な機能を実行させるコンピュータ可読命令である。様々な実施形態では、モジュール１３０、１４０は、限定されないが、ハードウェアロジック、ＡＳＩＣ、プロセッサ１１０のコンポーネント、電子メモリ内に埋め込まれた命令などを含み得る、異なる形態で実現することができる。
【００１９】
分類器システム１００を引き続き参照すると、一実施形態では、システム１００はデータベース１５０を含む。データベース１５０は、一実施形態では、メモリ１２０、分散メモリ、クラウドベースのメモリ、または別のデータストアに格納された電子データ構造であり、格納されたデータを分析する、格納されたデータを提供する、格納されたデータを整理する、などのため、プロセッサ１１０によって実行され得るルーチンで構成される。例えば、一実施形態では、データベース１５０は、様々な決定を実行する際にモジュール１３０、１４０によって使用されるデータを格納する。
【００２０】
一実施形態では、データベース１５０は、分類器１６０を格納する。さらなる実施形態では、分類器システム１００は、分類器１６０を、メモリ１２０、特化型データ構造、キャッシュメモリ、または別の適切なデータストレージコンポーネントに格納する。さらに別の実施形態では、分類器１６０は、認識モジュール１４０の一部として実現される。
【００２１】
データベース１５０について続けると、一実施形態では、データベース１５０は、バイナリマシンコードの１つ以上のコードセグメント１７０も格納する。一般的に、分類器システム１００は、ネットワーク通信経路（例えば、イーサネット）、無線通信経路、内部ハードウェアバス、または、コードセグメント１７０を取得するための他の適切なメカニズムである通信経路上での電子的要求を介してコードセグメント１７０を受信する。いずれの場合も、コードセグメント１７０自体は、一般的に、マシンコードで表されるコンパイルされたプログラムまたはその一部である。本明細書で使用される「マシンコード」という語句は、一般的に、例えば、プロセッサ１１０などのマイクロプロセッサによって実行することができる機械語命令で表されるプログラムまたはその一部を指す。さらに、マシンコードは、一般的に、関連するハードウェアによって実行される命令セットによって定義されるオペコードで構成される、原始言語またはハードウェア依存言語であると理解される。さらに、マシンコード自体は、データ値、レジスタアドレス、メモリアドレスなどでさらに構成される。
【００２２】
そして、プログラムバイナリからソースコードを識別するための開示されるアプローチについて続けると、イメージモジュール１３０は、一実施形態において、プロセッサ１１０によって実行されるとき、プロセッサにバイナリコードのセグメントをイメージに変換させるコンピュータ可読命令を含む。様々なアプローチにおいて、イメージの特定の形式が異なる場合がある。しかしながら、一般的に、イメージモジュール１３０は、イメージ１８０の値としてバイナリコードのビットを使用することを理解されたい。
【００２３】
従って、例として、イメージモジュール１３０は、コードセグメントを関連するソースコードにリバースエンジニアリングするための電子的要求としてコードセグメント１７０を受信する。様々な実施形態では、要求は、例えば、所望の精度、特定性のレベル、所望のイメージエンコーディングなどの、開示されるプロセスの実行に関連するオプションを制御するための１つ以上の追加のパラメータも含む。
【００２４】
そして、イメージモジュール１３０は、セグメント１７０からの連続するビットをイメージ１８０のピクセルの値として使用して、イメージ１８０をコード化する。様々なアプローチにおいて、イメージモジュール１３０がセグメントのビットをイメージ１８０に割り当てる特定の方法は、例えば、コード化されるイメージのタイプ（例えば、ビットマップ、ｊｐｅｇ、ｇｉｆ、ｐｎｇ、ｔｉｆｆ、など）、イメージ１８０がカラーで提供されるか白黒で提供されるか、イメージ１８０の寸法などに応じて異なっていてもよい。さらに、イメージモジュール１３０は、様々な態様において、イメージ１８０のピクセルを左から右、右から左などでコード化することができる。イメージモジュール１３０が、どのアプローチを実行するように実現されたとしても、イメージモジュール１３０は、種々のコードセグメント１７０に渡ってイメージ１８０を矛盾なくコード化する。
【００２５】
例えば、１つのアプローチでは、イメージモジュール１３０は、ピクセルあたりセグメント１７０の２ビットを使用して、イメージ１８０、例えば、白黒ビットマップをコード化する。あるいは、イメージモジュール１３０は、イメージ１８０の別個のピクセルためのコード化と相関する８ビット、１２ビット、１６ビット、または任意のビット数を使用する。例えば、イメージモジュール１３０は、イメージ１８０のタイプの標準に応じて、異なる標準に従ってイメージ１８０をコード化してもよい。いずれの場合も、イメージモジュール１３０は、分類器１６０の正確なトレーニングおよびその後の使用を保証するために、別々のイメージに渡って一貫したコード化メカニズムを実行する。
【００２６】
そして、イメージモジュール１３０は、セグメント１７０を、イメージ１８０によって具現化される視覚的表現に変換／翻訳すると、イメージ１８０を認識モジュール１４０に提供する。一実施形態では、認識モジュール１４０は、プロセッサ１１０によって実行されるとき、プロセッサに分類器１６０を使用してイメージ１８０を分析させて、セグメントインジケータ１９０を生成するコンピュータ可読命令を含む。分類器１６０の説明として、図２を簡単に考察する。図２は、分類器１６０の一実施形態を示している。図２に示されるように、バイナリマシンコードのセグメント１７０は、イメージ１８０に変換され、次に分類器１６０に提供される。
【００２７】
一般的に、分類器１６０は、分類器アルゴリズムのトレーニングに従って入力を解釈し、電子的出力を生成するように設計された内部プログラムおよびデータ構造を含む機械学習アルゴリズムである。分類器１６０をトレーニングする特定の態様は、後に説明されるが、分類器１６０は、一般的に、視覚データ内のパターンを認識するように設計された機械学習アルゴリズムを包含できることを理解されたい。例えば、分類器１６０は、入力コードセグメント１７０を関連するソースコードに関連付けるため、提供されるイメージ内のパターンを認識することが可能な、畳み込みニューラルネットワーク（ＣＮＮ）、リカレントニューラルネットワーク（ＲＮＮ）、自己組織化マップ、フィードフォワードニューラルネットワーク、または他の適切なマシンビジョンアルゴリズムなどの深層学習ニューラルネットワークである。図示のように、分類器１６０は、特定のフィルタに渡って入力を畳み込む畳み込み層、前の層からの決定値をダウンサンプリングするプーリング層、および処理された情報の分類スコアを生成する完全接続層からなるいくつかの異なる層を含む。分類器１６０は、様々な数およびタイプの層で実現することができるが、入力として提供されるイメージ１８０の態様を分類するように全体的に機能する。さらに、分類器１６０の図示された例示的なアーキテクチャは、用例として提供される。分類器１６０は、用例とは異なる、別の機械学習アルゴリズムおよびそれらのアルゴリズムの構成を使用して、実現されても良いことを理解されたい。例えば、分類器１６０は、さらなる実施形態では、活性化層（例えば、ＲｅＬＵ、ｔａｎＨなど）、畳み込み層に分散したドロップアウト層、空間プーリング層なども含む。
【００２８】
そして、分類器１６０を使用してイメージ１８０を処理すると、認識モジュール１４０は、電子的出力として、１つ以上のセグメントインジケータ１９０を提供する。認識モジュール１４０は、バイナリセグメント１７０をリバースエンジニアリングするために、セグメント１７０に対応するソースコードを特定するためのセグメントインジケータ１９０を生成する。様々な実施形態において、インジケータ１９０の特定の特性は変化する可能性がある。しかしながら、インジケータ１９０は、通常、例えば、分類器１６０が生成されたラベルに対してどれほど確信しているかを識別する信頼区間のインジケータとともに、セグメント１７０の関連する機能のためのコードクラスのラベルを少なくとも含む（例えば、ラベルがセグメント１７０にどれだけ厳密に一致するか）。
【００２９】
さらなる態様では、認識モジュール１４０は、分類器１６０をトレーニングして、バイナリセグメント１７０の内容に関してより細かい粒度の特定性を提供する。すなわち、様々な程度でバイナリコードセグメント１７０からソースコードを識別するように、分類器１６０が実現され得る。一態様では、分類器１６０は、特定のクラス、オブジェクト、サブ関数、およびそこに盛り込まれたステートメントに対する特定性を持たない、高レベル関数の識別を提供する。しかしながら、態様のもう一方の端では、分類器１６０は、サブ機能、ステートメント、データ構造、変数などの特定を含む、種々の関数の特定構造を示すように、分類器１６０が実現される。従って、認識モジュール１４０は、分類器１６０と共に、関数タイプのより高いレベルのインジケータから、ステートメントごとのソースコードの再構築までの範囲の様々なレベルの特定性を提供するように、実現され得る。
【００３０】
さらに、本明細書で使用される「ソースコード」という用語は、一般的に、元々バイナリコードが派生した高レベルのプログラミング言語を指すことを理解されたい。つまり、コンパイラやインタプリタなどのコンポーネントは、通常、ソースコードの実行可能形式としてバイナリコードを生成する。ソースコードは、元々、例えば、バイナリコードの抽象化された形式である、関数、ステートメント、データ引数、データ構造、および他のプログラム構成要素を使用して、開発者によって生成されたものである。コンパイラによって実行されるポリシーと手順に従って、コンパイラはソースコードをバイナリマシンコードに変換する。その結果、特定のコンパイラによって実行される特定のポリシーと手順の知識がなければ、バイナリコードをソースコードに戻すことは、前述のように一般的に非現実的である。したがって、本開示の分類器システム１００は、視覚的に表現されたバイナリコードをソースコードに関連付けるために、機械学習アルゴリズムのパターン認識能力を活用することにより、指摘された困難を克服する。このようにして、分類器システム１００は、バイナリコードをリバースエンジニアリングするプロセスを改善し、これまでリバースエンジニアリング、ひいては悪意のあるコードによって行われるアクションのメカニズムを理解することが困難であった、捕捉される悪意のあるコードのより良い理解を通じて、コンピューティングシステム内のセキュリティを向上させることができる。
【００３１】
イメージ処理および機械学習の使用による、バイナリコードのリバースエンジニアリングの追加の態様が、図３に関連して説明される。図３は、バイナリコードセグメントをイメージに変換し、そこからソースコードを識別することに関連する方法３００を示している。方法３００は、図１の分類器システム１００の観点から説明される。方法３００は、分類器システム１００と組み合わせて説明されるが、方法３００は分類器システム１００内で実行されることに限定されず、むしろ、方法３００を実行することができるシステムの一例であることを理解されたい。
【００３２】
３１０で、イメージモジュール１３０は、バイナリフォーマットで表されるコードのセグメント１７０を受信する。例えば、セグメント１７０は、分類器システム１００に未知の元のソースコードからコンパイルされたものであることを理解されたい。一実施形態では、イメージモジュール１３０は、提供デバイスからのネットワーク通信などの電子通信を介して、ストレージ場所（例えば、データベース１５０）からのデータバスを介したデータ転送を介して、または別の電子メカニズムから、分析デバイス（例えば、電子処理ユニット）における電子的入力として受信する。いずれの場合も、コードのセグメントは、一般的に、ハードウェアプロセッサまたは同様のデバイスによる実行のためのマシンコードとして表現される、実行可能なバイナリまたはその一部として提供される。例えば、１つまたは複数の構成では、セグメント１７０は、ハードウェア命令セット（例えば、ｘ８６、ｘ８６＿６４、ＡＲＭ３２、ＡＲＭ６４、ＭＩＰＳ、パワーＰＣなど）の命令セットに特有の方法でフォーマットされ、それは、対応する命令セットを特定するセグメントを実行している、または、セグメント１７０を戻すのに未知の追加の複雑性を加える可能性があるシステムとして知られているかもしれない。例えば、様々な実施例において、分類器１６０は、特定の命令セットに固有であっても良い。
【００３３】
３２０で、イメージモジュール１３０は、セグメント１７０をイメージ１８０に変換して、セグメント１７０のバイナリフォーマットを視覚的に表す。一実施形態では、イメージモジュール１３０は、セグメント１７０のビットを使用してビットマップ内の別個のピクセルの値を定義することによって、セグメント１７０を使用してビットマップをコード化する。もちろん、ビットマップが論じられているが、一般的に、コードセグメント１７０のバイナリを使用してコード化されることができるピクセルを有する任意のイメージフォーマットが、実施されてもよい。一般的に、イメージモジュール１３０は、イメージ１８０をコード化して、セグメント１７０のビットを視覚的に描写し、それにより、ビットをピクセルと相関させる。この直接相関は、セグメント１７０を視覚的に表すので、分類器は、様々なソースコード関数、ステートメントなどに対応するパターンについてイメージ１８０を分析することができる。従って、実行に応じて、前述のように、イメージ１８０のコード化は、セグメント１７０のビットをイメージ１８０のピクセルに相関させる、白黒コード化、グレースケールコード化、カラーコード化（例えば、８ビット、１６ビットなど）、または別の適切なコード化であっても良い。
【００３４】
３３０で、認識モジュール１４０は、イメージ１８０を分析する。一実施形態では、認識モジュール１４０は、分類器１６０を使用してイメージ１８０を処理する。すなわち、認識モジュール１４０は、例えば、分類器１６０の命令に応じてプロセッサを使用し、分類器１６０に関連する格納データを使用して、分類器１６０を実行する。様々なアプローチにおいて、分類器１６０は、部分的または全体的に認識モジュール１４０に統合され得るか、または分類器システム１００によって別個に定義されて保持され得るか、または遠隔的に格納され得る。いずれの場合も、前述のように、分類器１６０は、バイナリフォーマットの視覚的表現と、関連するソースコードとの間の相関関係の内部理解を発現させるようにトレーニングされた機械学習アルゴリズムである。このように、認識モジュール１４０は、分類器１６０を活用して、ソースコードの知識なしにセグメント１７０のソースコードを復元する。分類器１６０は、トレーニングされた／既知のソースコードに対応するイメージ１８０内のパターンを識別することを通じてソースコードを認識するべく、ソースコードに対応するイメージ１８０内のパターンのトレーニングされた内部知識を利用するので、セグメント１７０の視覚的表現を通じたこの認識が可能となる。
【００３５】
３４０において、認識モジュール１４０は、分類器１６０からの電子的出力として、セグメントインジケータ１９０を生成する。一実施形態では、セグメントインジケータ１９０は、バイナリをソースコードにリバースエンジニアリングするために、セグメント１７０に対応するソースコードを特定する。セグメント１７０を定義するソースコードは、マシンコードであるバイナリフォーマットで表されるセグメントによって難読化されるので、バイナリセグメント１７０をソースコードに直接変換して戻すことはできない。これは、様々なコンパイラがソースコードをどのように生成するかにおける相違、元のプログラムに配置された誤解を招くソースコードの使用による意図的な難読化などが原因であり得る。
【００３６】
いずれの場合も、認識モジュール１４０は、一実施形態では、セグメント識別子の信頼区間とともに、ソースコードの少なくともコードクラスを特定するためのセグメント識別子を生成する。信頼区間は、分類器１６０がインジケータ１９０はソースコードと一致するとどの程度確信しているかを特定する。コードクラスは、前述のように、セグメント１７０内に含まれる関数の一般的なタイプ／クラスを単に特定することができるし、またはより具体的にソースコードを特定してもよい。すなわち、セグメントインジケータ１９０は、分類器１６０が初期的にどのようにトレーニングされるかに応じて、特定性の態様全体にわたって変化し得る。従って、インジケータ１９０は、セグメント１７０内の関数のタイプ／クラスを特定することができ、または元のソースコードを再構築するところまで、個々のステートメント、変数、データ構造などを具体的に示すことができる。このようにして、分類器システム１００は、分類器１６０のイメージパターン認識能力を活用して、セグメント１７０をリバースエンジニアリングする。
【００３７】
次に、分類器１６０のトレーニングついて、図４−５を参照して説明する。図４は、バイナリコードのセグメントのラベルとして元のソースコードを使用して、分類器１６０をトレーニングする一例を示している。図５は、分類器１６０のトレーニングに関連する方法５００の一実施形態を示している。図５は、追加のブロック５１０、５２０、５３０とともに、図３のブロック３１０〜３４０を含むものとして示されている。分類器１６０のトレーニングおよびコードのセグメントを識別するための分類器１６０の使用は、概して類似しており、したがって、ブロック３１０〜３４０の間で共通性を共有することを理解されたい。従って、簡潔にするために、方法５００のブロック３１０〜３４０の説明は繰り返されない。
【００３８】
図４は、ソースコード４１０、４２０を示す。ソースコード４１０、４２０は、開発者によって作成された元のプログラミングの抽象概念を表している。ソースコード４１０、４２０は、説明のために示されており、分類器１６０のトレーニングデータセットは、一般的に、多数のサンプル（例えば、少なくとも数千）を含むことを理解されたい。ソースコード４１０、４２０は、一般的に、セグメント４３０、４４０によって表されるように、それぞれのバイナリにコンパイルされる。セグメント４３０、４４０は、概して、イメージモジュール１３０への電子的入力として提供されるセグメント１７０に対応する。トレーニング時に、分類器システム１００は、生成された結果と照合するための比較を実行するためのトレーニングデータとして、ソースコード４１０、４２０を受信するか、または少なくともソースコード４１０、４２０に関連する識別クラスラベルを受信する。トレーニングデータがクラスラベルとして提供される場合、クラスラベルは、関数、クラス、データ構造などのソースコード４１０、４２０の一部分（例えば、関数または関数ブロック）を識別する。しかしながら、トレーニングデータがソースコード４１０、４２０そのものを含む場合、ソースコードが、バイナリセグメント４３０、４４０から生成された対応するイメージ４５０、４６０のラベルとしての役割を果たす。
【００３９】
このように、認識モジュール１４０が３４０でセグメントインジケータ１９０を生成した後、５１０で、認識モジュール１４０は、セグメントインジケータ１９０をセグメント４３０、４４０の提供されたラベルと比較することによってトレーニングプロセスを開始する。示されているように、ラベルは、関数および他のオブジェクトの一般的なクラスの識別子である場合もあれば、行ごとにソースコードそのものを特定する場合もある。いずれの場合も、認識モジュール１４０は、５１０で、セグメントインジケータ１９０をトレーニングラベルと比較して、セグメントインジケータ１９０がバイナリセグメントに関連するソースコードを正確に記述しているかどうかを評価する。比較の結果として、認識モジュール１４０は、分類器１６０へのフィードバックを生成する。５２０で説明されるように、分類器１６０に提供されるフィードバックは、一実施形態では、スコアである。
【００４０】
様々なアプローチにおいて、スコアは様々に実現され得るが、スコアは少なくとも肯定的または否定的な一致を示すことを理解されたい。さらなる態様において、フィードバックは、数値スコア（例えば、０〜１００のスケールで一致に関連する信頼度）を示す。さらに、スコアは、例えば、各ラベルが別々にスコア付けされるように、個々のラベルに対して提供される。したがって、分類器１６０が別々のステートメントを識別するために実行される場合、フィードバックは、別個のステートメントに関連付けられた各別個のラベルのスコアを含む。
【００４１】
そして、５２０で、フィードバックは分類器１６０に与えられる。一実施形態では、認識モジュール１４０および分類器１６０は、フィードバックの生成、フィードバックの提供、および５３０で説明されるように分類器１６０の調整を取り扱う１つ以上のトレーニングアルゴリズムを実行する。分類器１６０をトレーニングするための特定のアルゴリズムは、特定のアプローチ（例えば、敵対的、強化、逆など）に応じて異なる形態をとることができることを理解されたい。さらに、概してフィードバックメカニズムが説明されているが、さらなる態様では、実行される分類器１６０が、フィードフォワード学習メカニズムまたは記載されたフィードバックメカニズムとは別の他の適切なアプローチを含むことができる。いずれの場合でも、認識モジュール１４０は、通常、ソースコードとイメージとの間の相関関係を学習するために、５３０で、フィードバックまたは他のメカニズムに従って分類器１６０を調整するためのトレーニングアルゴリズムを実行する。
【００４２】
一実施形態では、認識モジュール１４０は、分類器１６０の内部ノード重みを変更することによって分類器１６０を調整する。これらの調整は、例えば、分類器１６０の内部ノードによって様々な決定に与えられる重み付けを変化させる。このように、1つのアプローチでは、比較の結果は、ノードの重みを調整する方法を指定する勾配降下法アルゴリズムに情報を提供する。従って、認識モジュール１４０は、１つのアプローチにおいて、重みが、例えば、定義された入力範囲にわたって定常状態となる解に収束するまで、ノードの重みを調整する。さらなる実施形態では、分類器１６０は、例えば、入力対出力の差異に従って分類器１６０内で自己調整する「重み」つまり調整値であるハイパーパラメータを含む。さらに、認識モジュール１４０は、１つのアプローチにおいて、分類器１６０が、識別されたエラーに従って入力および分類出力の変化にどれだけ迅速に適応するかを定義するパラメータである学習率を実装する。このように、学習率は、例えば、外れ値の入力が分類される場合、または他の異常が発生した場合に、ノードの重みの大きな変動を防ぐことができる。
【００４３】
さらに、図４は、ソースコード４１０、４２０の２つの別個のセグメントのトレーニングを示しているが、分類器１６０の全体的なトレーニングプロセスは、複数のトレーニングサンプルに対して方法５００を実行することを含むことを理解されたい。様々なアプローチにおいて、使用されるトレーニングサンプル、従って、分類器１６０を十分にトレーニングするために行われるトレーニングの反復は、数千、数十万、または数百万のサンプル／反復であり得る。トレーニングプロセスの一般的な特徴として、実施されるトレーニングが多いほど、イメージからソースコードを識別するための分類器１６０の内部理解が向上する。
【００４４】
このようにして、分類器システム１００は、分類器１６０をトレーニングして、イメージで表されるバイナリコードのセグメントに関連するソースコードを認識し、それにより、人手を介さず、改善された精度で難読化されたバイナリコードセグメントのリバースエンジニアリングを可能にする。
【００４５】
さらに、図１の分類器システム１００は、個別の集積回路および／またはチップを用いて様々な配置で構成できることを理解されたい。そのような実施形態では、図１のイメージモジュール１３０は、別個の集積回路として具現化される。さらに、認識モジュール１４０は、個々の集積回路上に具現化される。回路は、個別の回路間で信号の通信を提供するために、接続経路を介して接続される。もちろん、別個の集積回路が説明されるが、様々な実施形態では、回路は、共通の集積回路基板に統合されてもよい。さらに、集積回路は、より少ない集積回路に組み合わせられるか、またはより多くの集積回路に分割されてもよい。別の実施形態では、モジュール１３０、１４０は、分離された特定用途向け集積回路に組み合わされてもよい。さらなる実施形態では、モジュール１３０、１４０に関連する機能の一部は、プロセッサによって実行可能なファームウェアとして具現化され、非一時的メモリに格納されてもよい。さらに別の実施形態では、モジュール１３０、１４０は、プロセッサ１１０のハードウェアコンポーネントとして統合される。
【００４６】
別の実施形態では、説明された方法および／またはそれらの均等物は、コンピュータ実行可能命令で実現することができる。従って、一実施形態では、非一時的なコンピュータ可読媒体が、マシン（例えば、プロセッサ、コンピュータなど）によって実行されるとき、マシン（および／または関連するコンポーネント）にその方法を実行させる、格納されたコンピュータ実行可能命令を有して構成される。
【００４７】
説明を簡単にするために、図に示された方法は一連のブロックとして示され、説明されているが、いくつかのブロックは、異なる順序で、および/または図示および説明されたものからの他のブロックと同時に発生する可能性があるため、方法（たとえば、図３の方法３００）はブロックの順序によって限定されないことを理解されたい。さらに、図示されたすべてのブロックよりも少ないブロックを使用して、例示の方法を実行してもよい。ブロックは組み合わされ、または複数のコンポーネントに分離されてもよい。さらに、追加および／または代替の方法は、図示されていない追加のブロックを使用することができる。
【００４８】
以下は、本明細書で使用される選択された用語の定義を含む。定義には、用語の範囲内にあり、様々な実施例に使用できるコンポーネントの様々な例、および／または形式が含まれる。例は限定することを意図していない。用語の単数形と複数形の両方が定義内に含まれる場合がある。
【００４９】
分類器システム１００は、１つ以上のプロセッサ１１０を含むことができる。１つ以上の構成において、プロセッサ１１０は、分類器システム１００のメインプロセッサであり得る。例えば、プロセッサ１１０は、電子制御ユニット（ＥＣＵ）であり得る。分類器システム１００は、１つ以上のタイプのデータを格納するための１つ以上のデータストアを含むことができる。データストアは、揮発性および／または不揮発性メモリを含むことができる。適切なデータストアの例には、ＲＡＭ（ランダムアクセスメモリ）、フラッシュメモリ、ＲＯＭ（リードオンリーメモリ）、ＰＲＯＭ（プログラム可能リードオンリーメモリ）、ＥＰＲＯＭ（消去可能プログラム可能リードオンリーメモリ）、ＥＥＰＲＯＭ（電気的消去可能プログラム可能リードオンリーメモリ）、レジスタ、磁気ディスク、光ディスク、ハードドライブ、分散メモリ、クラウドベースのメモリ、開示されたデータを格納するのに適した他の記憶媒体、またはそれらの任意の組み合わせが含まれる。データストアは、プロセッサ１１０の構成要素であり得るか、またはデータストアは、プロセッサによる使用のためにプロセッサ１１０に動作可能に接続され得る。この説明全体で使用される「動作可能に接続される」という用語は、直接的な接続、又は直接の物理的接触のない接続を含む、間接的な接続を含み得る。
【００５０】
詳細な実施形態が本明細書に開示される。しかし、開示された実施形態は例としてのみ意図されていることを理解されたい。したがって、本明細書で開示される特定の構造および機能の詳細は、限定として解釈されるべきではなく、単に特許請求の範囲の基礎として、および、実質的に任意の適切に詳細な構造において本明細書の態様を様々に採用することを当業者に教示するための代表的な基礎として解釈されるべきである。さらに、本明細書で使用される用語および語句は、限定することを意図するものではなく、可能な実施例の理解可能な説明を提供することを意図している。種々の実施形態が図１から図５に示されているが、実施形態は、図示された構造または用途に限定されない。
【００５１】
図中のフローチャートおよびブロック図は、様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実施例のアーキテクチャ、機能、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、特定の論理機能を実行するための１つ以上の実行可能な命令を含むモジュール、セグメント、またはコードの一部を表すことができる。いくつかの代替の実施例では、ブロックに記載された機能が、図に記載されている順序以外で発生する可能性があることにも注意されたい。たとえば、連続して示された２つのブロックが、実際には、実質的に同時に実行されても良く、またはそれらのブロックが、関連する機能に応じて、ときには逆の順序で実行されても良い。
【００５２】
上述したシステム、コンポーネント、および／またはプロセスは、ハードウェアまたはハードウェアとソフトウェアの組み合わせで実現でき、１つの処理システムにおいて中央集権方式で、または相互接続された複数の処理システムに異なる要素が分散された分散方式で実現することができる。本明細書に記載の方法を実行するように適合されたあらゆる種類の処理システムまたは別の装置が適している。ハードウェアおよびソフトウェアの組み合わせは、ロードされ、実行されたときに、本明細書に記載の方法を実行するように処理システムを制御するコンピュータで使用可能なプログラムコードを備えた処理システムであり得る。システム、コンポーネント、および／またはプロセスは、本明細書に記載された方法およびプロセスを実行するためにマシンによって実行可能な命令のプログラムを目に見える方法で具体化した、マシンによって読み取り可能な、コンピュータプログラム製品または他のデータプログラムストレージデバイスなどのコンピュータ読み取り可能なストレージに埋め込むこともできる。これらの要素は、本明細書で説明した方法の実行を可能にするすべての機能を備えた、処理システムにロードされたときにこれらの方法を実行することができるアプリケーション製品に組み込むこともできる。
【００５３】
さらに、本明細書で説明された構成は、例えば記憶されるなどして、具体化されたコンピュータ可読プログラムコードを有する１つ以上のコンピュータ可読媒体に具現化されるコンピュータプログラム製品の形をとることができる。１つ以上のコンピュータ可読媒体の任意の組み合わせが利用されてもよい。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であり得る。「コンピュータ可読記憶媒体」という語句は、非一時的な記憶媒体を意味する。コンピュータ可読媒体は、限定さえるものではないが、不揮発性媒体および揮発性媒体を含む、形態をとってもよい。不揮発性媒体には、たとえば、光ディスク、磁気ディスクなどが含まれる。揮発性媒体には、たとえば、半導体メモリ、ダイナミックメモリなどが含まれる。そのようなコンピュータ可読媒体の例には、限定されるものではないが、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の磁気媒体、ＡＳＩＣ、ＧＰＵのキャッシュまたは他のメモリ、ＣＤ、他の光学媒体、ＲＡＭ、ＲＯＭ、メモリチップまたはカード、メモリスティック、および、コンピュータ、プロセッサ、または他の電子デバイスが読み取ることが可能な他の媒体が含まれる。この明細書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用するためのプログラムを含む、または格納できる任意の有形の媒体であってもよい。
【００５４】
「１つの実施形態」、「一実施形態」、「１つの例」、「一例」などへの言及は、そのように記載された実施形態または例が、特定の特徴、構造、特性、特質、要素、または限定を含むかもしれないが、すべての実施形態または例が、必ずしも、その特定の特徴、構造、特性、特質、要素、または限定を含むわけではない。さらに、「１つの実施形態では」という語句の繰り返しの使用は、同じ実施形態を指す場合もあるが、必ずしもそうとは限らない。
【００５５】
本明細書で使用される「モジュール」には、コンピュータまたは電気ハードウェアコンポーネント、ファームウェア、命令を保存する非一時的なコンピュータ可読媒体、および／または、機能またはアクションを実行するように構成された、および／または、別のロジック、メソッド、および／またはシステムから機能またはアクションを引き起こすように構成された、これらのコンポーネントの組み合わせが含まれる。モジュールには、アルゴリズムによって制御されるマイクロプロセッサ、ディスクリートロジック回路（ＡＳＩＣなど）、アナログ回路、デジタル回路、プログラムされたロジックデバイス、実行時にアルゴリズムを実行する命令を含むメモリデバイスなどが含まれてもよい。モジュールは、１つ以上の実施形態において、１つ以上のＣＭＯＳゲート、ゲートの組み合わせ、または他の回路部品を含む。複数のモジュールが説明されている場合、１つ以上の実施形態は、複数のモジュールを１つの物理的なモジュールコンポーネントに組み込むことを含む。同様に、単一のモジュールが説明されている場合、１つ以上の実施形態は、単一のモジュールを複数の物理的コンポーネントに分散してもよい。
【００５６】
さらに、本明細書で使用されるモジュールには、特定のタスクを実行したり、特定のデータタイプを実施したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらなる態様において、メモリは一般に、言及されたモジュールを格納する。モジュールに関連付けられたメモリは、プロセッサ内に埋め込まれたバッファまたはキャッシュ、ＲＡＭ、ＲＯＭ、フラッシュメモリ、または別の適切な電子記憶媒体であってもよい。さらに別の態様では、本開示によって想定されるモジュールは、特定用途向け集積回路（ＡＳＩＣ）、システムオンチップ（ＳｏＣ）のハードウェアコンポーネント、プログラマブルロジックアレイ（ＰＬＡ）、ＧＰＵ、または開示された機能を実行するための定義された設定セット（たとえば、命令）が埋め込まれた別の適切なハードウェアコンポーネントとして実現される。
【００５７】
１つ以上の構成において、本明細書に記載のモジュールの１つ以上は、人工または計算知能要素、例えばニューラルネットワーク、ファジー論理または他の機械学習アルゴリズムを含むことができる。さらに、１つ以上の構成において、モジュールの１つ以上は、本明細書で説明する複数のモジュールに分散させることができる。１つ以上の構成では、本明細書に記載のモジュールの２つ以上が、単一のモジュールに組み合わせることができる。
【００５８】
コンピュータ可読媒体に具現化されるプログラムコードは、限定されるものではないが、無線、有線、光ファイバー、ケーブル、ＲＦなど、またはこれらの任意の適切な組み合わせを含む、任意の適切な媒体を使用して送信されてもよい。本構成の態様の動作を実行するためのコンピュータプログラムコードは、Python Go、Java（登録商標）、Ruby、Objective-C、Visual Base.NET、Smalltalk、C ++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つ以上のプログラミング言語の任意の組み合わせで記述されてもよい。プログラムコードは、スタンドアロンソフトウェアパッケージとして、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、あるいは、一部をユーザのコンピュータ上でかつ一部を遠隔コンピュータ上で、もしくは、完全に遠隔コンピュータまたはサーバ上で実行されてもよい。後者のシナリオでは、遠隔コンピュータは、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよいし、または、その接続は、外部コンピュータになされてもよい（例えば、インターネットサービスプロバイダを使用したインターネット経由）。
【００５９】
本明細書で使用される「ａ」および「ａｎ」という用語は、１つではなく、１つ以上として定義される。本明細書で使用される「複数」という用語は、２つではなく、２つ以上として定義される。本明細書で使用される「別の」という用語は、少なくとも２番目またはそれ以上として定義される。本明細書で使用される「含む」および／または「有する」という用語は、包含する（すなわち、オープン言語）と定義される。本明細書で使用される「...および...の少なくとも１つ」というフレーズは、関連する列挙されたアイテムの１つ以上の任意のおよび全ての可能な組み合わせを指し、包含する。例として、「Ａ、Ｂ、およびＣの少なくとも１つ」というフレーズは、Ａのみ、Ｂのみ、Ｃのみ、またはそれらの任意の組み合わせ（たとえば、ＡＢ、ＡＣ、ＢＣまたはＡＢＣ）を含む。
【００６０】
本明細書の態様は、その主旨または本質的な特質から逸脱することなく、他の形態で具現化することができる。したがって、本明細書の範囲を示すものとして、前述の明細書で
はなく、以下の特許請求の範囲を参照すべきである。
【００６１】
本出願におけるフローチャートまたはフローチャートの処理は、複数のステップ（セクションとも呼ばれる）を含み、そのそれぞれは、例えば、ブロック３１０として表されることに留意されたい。さらに、各ステップはいくつかのサブステップに分割でき、その一方で、複数のステップが単一のステップに組み合わせられることができる。
【００６２】
本開示による暗号化キーを処理する車両システムおよび電子制御装置の様々な実施形態、構成、および態様が例示されたが、本開示の実施形態、構成、および態様は、上記のものに限定されない。例えば、異なる実施形態、構成、および態様に開示される技術的要素の適切な組み合わせから得られる実施形態、構成、および態様もまた、本開示の実施形態、構成、および態様の範囲内に含まれる。
【図１】
2021534498.tif 000003
【図２】
2021534498.tif 000004
【図３】
2021534498.tif 000005
【図４】
2021534498.tif 000006
【図５】
2021534498.tif 000007
【国際調査報告】
2021534498.tif 000008
2021534498.tif 000009