JP2021005375A - 難読化解除方法および装置 - Google Patents
難読化解除方法および装置 Download PDFInfo
- Publication number
- JP2021005375A JP2021005375A JP2020108552A JP2020108552A JP2021005375A JP 2021005375 A JP2021005375 A JP 2021005375A JP 2020108552 A JP2020108552 A JP 2020108552A JP 2020108552 A JP2020108552 A JP 2020108552A JP 2021005375 A JP2021005375 A JP 2021005375A
- Authority
- JP
- Japan
- Prior art keywords
- executable file
- executable
- framework
- memory
- file
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 230000006870 function Effects 0.000 claims abstract description 96
- 238000004590 computer program Methods 0.000 claims description 20
- 238000006243 chemical reaction Methods 0.000 claims 1
- 238000004891 communication Methods 0.000 description 12
- 238000012545 processing Methods 0.000 description 11
- 238000001514 detection method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000003211 malignant effect Effects 0.000 description 3
- 241000136406 Comones Species 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000013478 data encryption standard Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 208000006930 Pseudomyxoma Peritonei Diseases 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 229920000306 polymethylpentene Polymers 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2125—Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Memory System (AREA)
- Information Transfer Between Computers (AREA)
Abstract
【課題】難読化解除方法および装置を提供する。【解決手段】難読化解除方法は、共通中間言語を利用して実行ファイルを実行するフレームワークが実行可能なネイティブイメージをメモリにロードするために呼び出すロード関数の情報を格納する段階310、フレームワークで第1実行ファイルが実行される場合、格納された情報に基づき、フレームワークが第1実行ファイルのコードによって呼び出すロード関数をフッキングする段階320およびロード関数のフッキングによって得られるアドレスを利用してメモリで第1実行ファイルに対する実行可能なネイティブイメージを抽出して第1実行ファイルに対する原本実行ファイルを生成する段階330を含む。【選択図】図3
Description
以下の説明は、難読化解除方法および装置に関する。
現在は、特殊な技術がなくても悪性コードを隠ぺいできるようにサポートするツールが多く出回っており、攻撃者は、このような強力なツールをいつでも手軽に不正に入手できるようになった。このため、悪性コードを新たに作るためのハードルが下がり、その数は迅速に増加している。長きに渡り、セキュリティソリューションは、悪性コードを探知するために悪性コードのシグニチャをアップデートし続けてきた。例えば、特許文献1は、ストリングとコードシグニチャを利用した悪性コード探知およびパッカー解除方法を開示している。しかし、新たな悪性コードが大量かつ迅速に作られ続けており、アップデートしなければならないシグニチャの量も迅速に増加する点を考慮すると、事後対処でシグニチャをアップデートするシグニチャ基盤探知は効率的であるとは言えない。
このようなシグニチャ基盤探知の弱点を補うために、保安ソリューションは、仮想環境で悪性コードを実行して観察するような、実際のプロセスの行為を分析する方向に発展した。しかし、行為基盤探知も、分析環境が探知されてしまえば、悪性行為が現れないようにする方法によって探知から簡単に逃れることができる。特に、最近では、FUD(Fully UnDetectable)と呼ばれるツールを利用することで行為基盤探知を回避することができ、同じ悪性コードであっても新たにFUDを適用する場合には、以前の悪性コードとは異なるシグニチャ値を有するようになる。FUD RunPE技術とは、悪性コード自体を実行ファイル内に暗号化して格納し、実行ファイルの実行時に復号化した後、ディスクを経ずにメモリで直ぐにコードを実行する技法を意味する。これを探知および分析するためには、メモリにロードされたファイルを手作業で生成しなければならないという不便が存在する。したがって、迅速に生成可能でありながら、FUDのようにメモリ上で直ぐに実行可能である、新たな悪性コードに対処することのできる効率的な方案が必要な状況にある。
JVM(Java(登録商標) Virtual Machine)やドットネット(.NET)フレームワークのような共通中間言語(Common Intermediate Language)を利用してプラットフォームに関係なくランタイムに実行環境に合うように実行ファイルのコードを実行するフレームワークで前記実行ファイルを実行するときに、前記実行ファイルに対する実行可能なネイティブイメージをメモリにロードするために前記フレームワークが呼び出す関数をフッキングすることにより、前記実行ファイルに対して難読化が解除された原本ファイルを抽出することができる難読化解除方法、前記方法を実行するコンピュータ装置、前記コンピュータ装置と結合して前記方法をコンピュータ装置に実行させるためにコンピュータ読み取り可能な記録媒体に記録されたコンピュータプログラムおよびその記録媒体を提供する。
少なくとも1つのプロセッサを含むコンピュータ装置の難読化解除方法であって、前記少なくとも1つのプロセッサが、共通中間言語(Common Intermediate Language)を利用して実行ファイルを実行するフレームワークが実行可能なネイティブイメージをメモリにロードするために呼び出すロード関数の情報を格納することと、前記フレームワークで第1実行ファイルが実行される場合、前記少なくとも1つのプロセッサが、前記格納された情報に基づいて前記フレームワークが前記第1実行ファイルのコードを用いて呼び出す前記ロード関数をフッキングすることと、前記少なくとも1つのプロセッサが、前記ロード関数のフッキングによって得られるアドレスを利用して前記メモリで前記第1実行ファイルに対する実行可能なネイティブイメージを抽出して前記第1実行ファイルに対する原本実行ファイルを生成することとを含む、難読化解除方法を提供する。
一側によると、前記ロード関数は、前記フレームワークからパラメータとして伝達される実行ファイルに対する実行可能なネイティブイメージがメモリにロードするように前記フレームワークが呼び出す関数を含むことを特徴としてよい。
他の側面によると、前記原本実行ファイルを生成することは、前記フッキングされたロード関数を用い、前記フレームワークから前記フッキングされたロード関数でパラメータとして伝達される前記第1実行ファイルに対する実行可能なネイティブイメージが前記メモリにロードされるアドレスとサイズを抽出することと、前記第1実行ファイルに対する実行可能なネイティブイメージが前記メモリにロードされるように前記フッキングされたロード関数を実行することと、前記メモリで前記抽出されたアドレスから前記抽出されたサイズのデータを抽出することと、前記抽出されたデータをファイルで格納して前記第1実行ファイルに対する原本実行ファイルを生成することとを含むことを特徴としてよい。
また他の側面によると、前記フレームワークは、ドットネット(.NET)フレームワークを含み、前記ロード関数は、前記ドットネットフレームワークのドットネットローダとして含まれるコアライブラリに含まれ、前記フレームワークからパラメータとして伝達される実行ファイルに対する実行可能なネイティブイメージをメモリにロードするように前記フレームワークが呼び出す関数を含むことを特徴としてよい。
また他の側面によると、前記ロード関数は、同じシステム上で同じアドレスに実行可能なネイティブイメージをロードし、前記難読化解除方法は、前記フレームワークで第2実行ファイルが実行される場合、前記ロード関数のフッキングによって得られたアドレスを利用して前記メモリで前記第2実行ファイルに対する実行可能なネイティブイメージを抽出して前記第2実行ファイルに対する原本実行ファイルを生成することをさらに含むことを特徴としてよい。
さらに他の側面によると、前記実行ファイルは、少なくとも一部の内容に難読化が適用されたファイルを含み、前記実行可能なネイティブイメージは、前記実行ファイルの復元モジュールによって前記難読化に対する復元が進められた原本内容を含むことを特徴としてよい。
前記難読化解除方法をコンピュータ装置に実行させるためのコンピュータプログラムを提供する。
前記方法をコンピュータ装置に実行させるためのプログラムが記録されている、コンピュータ読み取り可能な記録媒体を提供する。
コンピュータ読み取り可能な命令を実行するように実現される少なくとも1つのプロセッサを含み、前記少なくとも1つのプロセッサが、共通中間言語(Common Intermediate Language)を利用して実行ファイルを実行するフレームワークが実行可能なネイティブイメージをメモリにロードするために呼び出すロード関数の情報を格納し、前記フレームワークで第1実行ファイルが実行される場合、前記格納された情報に基づいて前記フレームワークが前記第1実行ファイルのコードによって呼び出す前記ロード関数をフッキングし、前記ロード関数のフッキングによって得られるアドレスを利用して前記メモリで前記第1実行ファイルに対する実行可能なネイティブイメージを抽出して前記第1実行ファイルに対する原本実行ファイルを生成することを特徴とする、コンピュータ装置を提供する。
JVMやドットネットフレームワークのような共通中間言語(Common Intermediate Language)を利用してプラットフォームに関係なくランタイムに実行環境に合うように実行ファイルのコードを実行するフレームワークで前記実行ファイルを実行するときに、前記実行ファイルに対する実行可能なネイティブイメージをメモリにロードするために前記フレームワークが呼び出す関数をフッキングすることにより、前記実行ファイルに対して難読化が解除された原本ファイルを抽出することができる。
以下、本発明の実施形態について、添付の図面を参照しながら詳しく説明する。
本発明の実施形態に係る難読化解除方法は、少なくとも1つのコンピュータ装置によって実行されてよい。このとき、コンピュータ装置においては、本発明の一実施形態に係るコンピュータプログラムがインストールされて実行されてよく、コンピュータ装置は、実行されるコンピュータプログラムの制御に従って本発明の実施形態に係る難読化解除方法を実行してよい。上述したコンピュータプログラムは、コンピュータ装置と結合して難読化方法をコンピュータに実行させるためにコンピュータ読み取り可能な記録媒体に記録されてよい。一実施形態として、上述したコンピュータプログラムは、難読化された悪性コードを含む実行ファイルから難読化が解除された原本実行ファイルを得るための保安ソリューションであってよい。この場合、コンピュータ装置は、このような保安ソリューションの制御に従って難読化解除方法を実行して実行ファイルに対する原本実行ファイルを得てよい。
図1は、本発明の一実施形態における、ネットワーク環境の例を示した図である。図1のネットワーク環境は、複数の電子機器110、120、130、140、複数のサーバ150、160、およびネットワーク170を含む例を示している。このような図1は、発明の説明のための一例に過ぎず、電子機器の数やサーバの数が図1のように限定されることはない。また、図1のネットワーク環境は、本実施形態に適用可能な環境のうちの一例を説明したものに過ぎず、本実施形態に適用可能な環境が図1のネットワーク環境に限定されることはない。
複数の電子機器110、120、130、140は、コンピュータ装置によって実現される固定端末や移動端末であってよい。複数の電子機器110、120、130、140の例としては、スマートフォン、携帯電話、ナビゲーション、PC(personal computer)、ノート型PC、デジタル放送用端末、PDA(Personal Digital Assistant)、PMP(Portable Multimedia Player)、タブレットなどがある。一例として、図1では、電子機器110の例としてスマートフォンを示しているが、本発明の実施形態において、電子機器110は、実質的に無線または有線通信方式を利用し、ネットワーク170を介して他の電子機器120、130、140および/またはサーバ150、160と通信することのできる多様な物理的なコンピュータ装置のうちの1つを意味してよい。
通信方式が限定されることはなく、ネットワーク170が含むことのできる通信網(一例として、移動通信網、有線インターネット、無線インターネット、放送網)を利用する通信方式だけではなく、機器間の近距離無線通信が含まれてもよい。例えば、ネットワーク170は、PAN(personal area network)、LAN(local area network)、CAN(campus area network)、MAN(metropolitan area network)、WAN(wide area network)、BBN(broadband network)、インターネットなどのネットワークのうちの1つ以上の任意のネットワークを含んでよい。さらに、ネットワーク170は、バスネットワーク、スターネットワーク、リングネットワーク、メッシュネットワーク、スター−バスネットワーク、ツリーまたは階層的ネットワークなどを含むネットワークトポロジのうちの任意の1つ以上を含んでもよいが、これらに限定されることはない。
サーバ150、160それぞれは、複数の電子機器110、120、130、140とネットワーク170を介して通信して命令、コード、ファイル、コンテンツ、サービスなどを提供する1つ以上のコンピュータ装置によって実現されてよい。例えば、サーバ150は、ネットワーク170を介して接続した複数の電子機器110、120、130、140にサービス(一例として、メッセージングサービス、メールサービス、ソーシャルネットワークサービス、地図サービス、翻訳サービス、金融サービス、決済サービス、検索サービス、コンテンツ提供サービス、ゲームサービスなど)を提供するシステムであってよい。
図2は、本発明の一実施形態における、コンピュータ装置の例を示したブロック図である。上述した複数の電子機器110、120、130、140それぞれやサーバ150、160それぞれは、図2に示したコンピュータ装置200によって実現されてよい。
このようなコンピュータ装置200は、図2に示すように、メモリ210、プロセッサ220、通信インタフェース230、および入力/出力インタフェース240を含んでよい。メモリ210は、コンピュータ読み取り可能な記録媒体であって、RAM(random access memory)、ROM(read only memory)、およびディスクドライブのような永続的大容量記録装置を含んでよい。ここで、ROMやディスクドライブのような永続的大容量記録装置は、メモリ210とは区分される別の永続的記録装置としてコンピュータ装置200に含まれてもよい。また、メモリ210には、オペレーティングシステムと、少なくとも1つのプログラムコードが記録されてよい。このようなソフトウェア構成要素は、メモリ210とは別のコンピュータ読み取り可能な記録媒体からメモリ210にロードされてよい。このような別のコンピュータ読み取り可能な記録媒体は、フロッピー(登録商標)ドライブ、ディスク、テープ、DVD/CD−ROMドライブ、メモリカードなどのコンピュータ読み取り可能な記録媒体を含んでよい。他の実施形態において、ソフトウェア構成要素は、コンピュータ読み取り可能な記録媒体ではない通信インタフェース230を通じてメモリ210にロードされてもよい。例えば、ソフトウェア構成要素は、ネットワーク170を介して受信されるファイルによってインストールされるコンピュータプログラムに基づいてコンピュータ装置200のメモリ210にロードされてよい。
プロセッサ220は、基本的な算術、ロジック、および入出力演算を実行することにより、コンピュータプログラムの命令を処理するように構成されてよい。命令は、メモリ210または通信インタフェース230によって、プロセッサ220に提供されてよい。例えば、プロセッサ220は、メモリ210のような記録装置に記録されたプログラムコードに従って受信される命令を実行するように構成されてよい。
通信インタフェース230は、ネットワーク170を介してコンピュータ装置200が他の装置(一例として、上述した記録装置)と互いに通信するための機能を提供してよい。一例として、コンピュータ装置200のプロセッサ220がメモリ210のような記録装置に記録されたプログラムコードに従って生成した要求や命令、データ、ファイルなどが、通信インタフェース230の制御に従ってネットワーク170を介して他の装置に伝達されてよい。これとは逆に、他の装置からの信号や命令、データ、ファイルなどが、ネットワーク170を経てコンピュータ装置200の通信インタフェース230を通じてコンピュータ装置200に受信されてよい。通信インタフェース230を通じて受信された信号や命令、データなどは、プロセッサ220やメモリ210に伝達されてよく、ファイルなどは、コンピュータ装置200がさらに含むことのできる記録媒体(上述した永続的記録装置)に記録されてよい。
入力/出力インタフェース240は、入力/出力装置250とのインタフェースのための手段であってよい。例えば、入力装置は、マイク、キーボード、またはマウスなどの装置を、出力装置は、ディスプレイやスピーカなどのような装置を含んでよい。他の例として、入力/出力インタフェース240は、タッチスクリーンのように入力と出力のための機能が1つに統合された装置とのインタフェースのための手段であってもよい。入力/出力装置250は、コンピュータ装置200と1つの装置で構成されてもよい。
また、他の実施形態において、コンピュータ装置200は、図2の構成要素よりも少ないか多くの構成要素を含んでもよい。しかし、大部分の従来技術的構成要素を明確に図に示す必要はない。例えば、コンピュータ装置200は、上述した入力/出力装置250のうちの少なくとも一部を含むように実現されてもよいし、トランシーバやデータベースなどのような他の構成要素をさらに含んでもよい。
図3は、本発明の一実施形態における、難読化解除方法の例を示したフローチャートである。本実施形態に係る難読化解除方法は、図2を参照しながら説明したコンピュータ装置200によって実行されてよい。一例として、コンピュータ装置200のプロセッサ220は、メモリ210が含むオペレーティングシステムのコードと、少なくとも1つのコンピュータプログラムのコードとによる制御命令(instruction)を実行するように実現されてよい。ここで、プロセッサ220は、コンピュータ装置200に記録されたコードが提供する制御命令にしたがってコンピュータ装置200が図3の方法に含まれる段階310〜段階330を実行するようにコンピュータ装置200を制御してよい。上述したように、コンピュータプログラムは、難読化された悪性コードを含む実行ファイルから難読化が解除された原本実行ファイルを得るための保安ソリューションであってよい。
段階310において、コンピュータ装置200は、共通中間言語(Common Intermediate Language)を利用して実行ファイルを実行するフレームワークが実行可能なネイティブイメージをメモリにロードするために呼び出すロード関数の情報を格納してよい。ここで、フレームワークは、JVM(Java Virtual Machine)やドットネット(.NET)フレームワークのように、共通中間言語(Common Intermediate Language)を利用してプラットフォームに関係なくランタイムに実行環境に合うように実行ファイルのコードを実行するフレームワークを含んでよい。このようなフレームワークは、実行ファイルの実行のために、実行可能なネイティブイメージをメモリにロードするために呼び出すロード関数が予め定義されている。例えば、ドットネットフレームワークでは、ドットネットローダとして含まれるコアライブラリ(一例として、mscorlib)にAssembly.Load関数、および/またはAppDomain.CurrentDomain.Load関数のようなロード関数が含まれており、ドットネットフレームワークは、このようなロード関数を呼び出して実行可能なネイティブイメージをメモリにロードしてよい。保安ソリューションとしてのコンピュータプログラムは、このようなロード関数の情報を含んでよく、コンピュータ装置200に保安ソリューションをインストールするときに、このようなロード関数の情報がコンピュータ装置200に格納されてよい。実行ファイルは、少なくとも一部の内容に難読化が適用されたファイルを含んでよい。例えば、ドットネットフレームワークにおいて、任意の実行ファイルの少なくとも一部の内容は、ベース64(Base64)、排他的論理和(exclusive or:XOR)演算、AES(Advanced Encryption Standard)、DES(Data Encryption Standard)などのような多様な方式、または多様な方式の組み合わせを利用して難読化されることがある。このとき、実行可能なネイティブイメージは、実行ファイルの復元モジュールによって難読化に対する復元が進められた原本内容を含んでよい。難読化された状態では実行ファイルの実行が不可能であるため、実行ファイルは、難読化された部分を復元するための復元モジュールを含んでよく、メモリには、難読化に対する復元が進められた原本内容を含む実行可能なネイティブイメージがロードされてよい。
段階320において、コンピュータ装置200は、フレームワークで第1実行ファイルが実行される場合、格納された情報を用い、フレームワークが第1実行ファイルのコードによって呼び出すロード関数をフッキングしてよい。例えば、フレームワークが任意の実行ファイルを実行するためには、実行可能なネイティブイメージがメモリ上にロードされなければならない。実行ファイルの難読化によって実行可能なネイティブイメージをメモリ上にロードすることができなければ実行ファイルを実行することはできず、この場合、悪性コードを含む実行ファイルの場合には、悪性コードがもつ目的を実行することができない。したがって、悪性コードを含む実行ファイルは、実行ファイルの分析を防ぐためにいずれかの方式によって難読化されていたとしても、フレームワークが実行可能なネイティブイメージをメモリ上にロードする瞬間には、該当の実行ファイルに対する実行可能なネイティブイメージを提供しなければならない。例えば、悪性コードが含まれる実行ファイルは、実行ファイルの難読化された部分を復元するためのモジュールを含んでよく、メモリ上で難読化された実行ファイルを復元してパラメータとして実行可能なネイティブイメージを提供しなければならない。このような特徴を利用することで、コンピュータ装置200は、第1実行ファイル自体を分析するよりも、フレームワークが第1実行ファイルのコードによって呼び出すロード関数をフッキングすることにより、パラメータとしてロード関数で伝達される第1実行ファイルに対する実行可能なネイティブイメージを簡単に得ることができるようになる。
段階330において、コンピュータ装置200は、ロード関数のフッキングによって得られるアドレスを利用してメモリで第1実行ファイルに対する実行可能なネイティブイメージを抽出して、第1実行ファイルに対する原本実行ファイルを生成してよい。上述したように、第1実行ファイルは、難読化された部分を復元した後、実行可能なネイティブイメージをメモリにロードするようにコンピュータ装置200を制御するためのコードを含んでよい。このような第1実行ファイルのコードは、フレームワークが予め定義されたロード関数を呼び出すようにコンピュータ装置200を制御することができるため、保安ソリューションは、コンピュータ装置200がこのようなロード関数をフッキングするように制御してよい。上述したように、ロード関数は、フレームワークからパラメータとして伝達される実行ファイルに対する実行可能なネイティブイメージがメモリにロードするようにフレームワークが呼び出す関数を含んでよい。一方、実行可能なネイティブイメージは、ロード関数に基づいてバイトストリームの形態でメモリにロードされることができるため、コンピュータ装置200は、ロード関数のフッキングにより、実行可能なネイティブイメージがメモリにロードされるアドレスを得ることができる。この場合、コンピュータ装置200は、得られたアドレスに基づき、メモリで第1実行ファイルに対する実行可能なネイティブイメージを抽出してよく、得られた実行可能なネイティブイメージに基づき、第1実行ファイルに対して難読化されていない原本実行ファイルを得ることができるようになる。難読化されていない原本実行ファイルは、難読化された第1実行ファイルに比べて実行ファイルを簡単に分析できるということは、容易に理解することができるであろう。例えば、実行ファイルの少なくとも一部に対する難読化は、極めて多様な方式、または多様な方式の組み合わせによってなされるため、難読化された実行ファイルを復元して原本実行ファイルを得る過程は、極めて困難であると言える。この反面、ロード関数のフッキングを利用した実行可能なネイティブイメージの抽出によって原本実行ファイルを得る過程は、難読化された実行ファイルが復元された後になされるため、難読化方式とは関係なく原本実行ファイルを得ることができるようになる。
図4は、本発明の一実施形態における、原本実行ファイルを生成する過程の例を示したフローチャートである。図4の実施形態に係る段階410〜段階440は、図3を参照しながら説明した段階330に含まれ、コンピュータ装置200によって実行されてよい。
段階410において、コンピュータ装置200は、フッキングされたロード関数を用い、フレームワークからフッキングされたロード関数でパラメータとして伝達される第1実行ファイルに対する実行可能なネイティブイメージがメモリにロードされるアドレスとサイズを抽出してよい。上述したように、ロード関数は、フレームワークからパラメータとして伝達される実行ファイルに対する実行可能なネイティブイメージがメモリにロードするようにフレームワークが呼び出す関数であってよい。言い換えれば、ロード関数により、実行可能なネイティブイメージがメモリのどのアドレスにどのようなサイズでロードされるかを把握することができるようになる。
段階420において、コンピュータ装置200は、第1実行ファイルに対する実行可能なネイティブイメージがメモリにロードされるようにフッキングされたロード関数を実行してよい。ロード関数が実行されることによってメモリに実行可能なネイティブイメージがロードされることができるため、コンピュータ装置200は、フッキングされたロード関数を実行して実際に実行可能なネイティブイメージがメモリにロードされるようにしてよい。例えば、コンピュータ装置200は、Invoke関数を呼び出してフッキングされたロード関数を実行してよい。
段階430において、コンピュータ装置200は、メモリで抽出されたアドレスから抽出されたサイズのデータを抽出してよい。上述したように、実行可能なネイティブイメージは、バイトストリームの形態でメモリにロードされてよく、コンピュータ装置200は、このようなバイトストリーム形態のデータを、段階410で抽出されたアドレスとサイズを利用して抽出してよい。
段階440において、コンピュータ装置200は、抽出されたデータをファイルで格納して第1実行ファイルに対する原本実行ファイルを生成してよい。第1実行ファイルが、多様な難読化方式のうちのどの難読化方式によって難読化されていたとしても、第1実行ファイルの実行のためには、難読化された部分がすべて復元された実行可能なネイティブイメージがメモリにロードされていなければならない。このとき、メモリで抽出されたデータは、第1実行ファイルに対する実行可能なネイティブイメージに対応してよく、したがって、メモリで抽出されたデータを格納するファイルは、難読化が適用されていない原本実行ファイルとなってよい。
一方、ロード関数は、同じシステム上では同じアドレスに実行可能なネイティブイメージをロードしてよい。この場合、コンピュータ装置200は、同じロード関数に対して同じアドレスを活用することで、実行ファイルに対する実行可能なネイティブイメージを得ることができるようになる。
図5は、本発明の一実施形態における、一度抽出されたアドレスを利用して他の実行ファイルに対する実行可能なネイティブイメージを抽出する例を示したフローチャートである。図5の段階510は、図3の段階330以降にコンピュータ装置200によって実行されてよい。
段階510において、コンピュータ装置200は、フレームワークで第2実行ファイルが実行される場合、ロード関数のフッキングによって得られたアドレスを利用してメモリで第2実行ファイルに対する実行可能なネイティブイメージを抽出して第2実行ファイルに対する原本実行ファイルを生成してよい。上述したように、ロード関数は、同じシステム上では同じアドレスに実行可能なネイティブイメージをロードしてよい。したがって、第1実行ファイルに対する実行可能なネイティブイメージをメモリで抽出するために得られたアドレスが、第2実行ファイルに対する実行可能なネイティブイメージをメモリで抽出するために活用されてよい。
図6は、本発明の一実施形態における、ドットネットフレームワークで実行可能なネイティブイメージをロードするロード関数が定義されたライブラリの例を示した図である。図6において、第1点線枠610は、ドットネットフレームワークにドットネットローダとして含まれるコアライブラリとして「mscorlib」を示しており、第2点線枠620は、実行可能なネイティブイメージを1つずつのバイトで読み、インタプリタ言語を機械語に変換して実行するモジュールとして「mscorlib_ni」を示している。このとき、ドットネットフレームワークでは、「mscorlib_ni」モジュールに、上述したロード関数が含まれてよい。
図7は、本発明の一実施形態における、ドットネットフレームワークで実行可能なネイティブイメージをロードするロード関数の例を示した図である。図7において、第1点線枠710は、メモリでデータをデコードする例を示している。より具体的に、第1点線枠710は、ベース64によって難読化されたデータを復元する過程の例を示している。デコードされたデータ「asmData」は、COFF(Common Object File Format)形式であってよい。第2点線枠720は、ロード関数としてAssembly.Load関数を示しており、第3点線枠730は、このようなAssembly.Load関数が呼び出し(アドレス0x52AB29E4)される例を示している。このとき、Assembly.Load関数としては、パラメータとして、先駆けて復元されたCOFF形式のデコードされたデータ「asmData」が伝達されてよい。この場合、コンピュータ装置200は、このようなAssembly.Load関数の呼び出しをフッキングしてデコードされたデータ「asmData」に対するアドレスを得てよく、メモリで「asmData」を抽出してよい。この後、コンピュータ装置200は、抽出された「asmData」を含む原本実行ファイルを生成することができるようになる。
このように、本発明の実施形態によると、JVMやドットネットフレームワークのような共通中間言語(Common Intermediate Language)を利用してプラットフォームに関係なくランタイムに実行環境に合うように実行ファイルのコードを実行するフレームワークで前記実行ファイルを実行するときに、前記実行ファイルに対する実行可能なネイティブイメージをメモリにロードするために前記フレームワークが呼び出す関数をフッキングすることにより、前記実行ファイルに対して難読化が解除された原本ファイルを抽出することができる。
上述したシステムまたは装置は、ハードウェア構成要素、またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現されてよい。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、ALU(arithmetic logic unit)、デジタル信号プロセッサ、マイクロコンピュータ、FPGA(field programmable gate array)、PLU(programmable logic unit)、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、1つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現されてよい。処理装置は、オペレーティングシステム(OS)およびOS上で実行される1つ以上のソフトウェアアプリケーションを実行してよい。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを記録、操作、処理、および生成してもよい。理解の便宜のために、1つの処理装置が使用されるとして説明される場合もあるが、当業者は、処理装置が複数個の処理要素および/または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは1つのプロセッサおよび1つのコントローラを含んでよい。また、並列プロセッサのような、他の処理構成も可能である。
ソフトウェアは、コンピュータプログラム、コード、命令、またはこれらのうちの1つ以上の組み合わせを含んでもよく、思うままに動作するように処理装置を構成したり、独立的または集合的に処理装置に命令したりしてよい。ソフトウェアおよび/またはデータは、処理装置に基づいて解釈されたり、処理装置に命令またはデータを提供したりするために、いかなる種類の機械、コンポーネント、物理装置、仮想装置、コンピュータ記録媒体または装置に具現化されてよい。ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された状態で記録されても実行されてもよい。ソフトウェアおよびデータは、1つ以上のコンピュータ読み取り可能な記録媒体に記録されてよい。
実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータ読み取り可能な媒体に記録されてよい。コンピュータ読み取り可能な媒体は、プログラム命令、データファイル、データ構造などを単独でまたは組み合わせて含んでよい。媒体は、コンピュータ実行可能なプログラムを継続して記録するものであっても、実行またはダウンロードのために一時記録するものであってもよい。また、媒体は、単一または複数のハードウェアが結合した形態の多様な記録手段または格納手段であってよく、あるコンピュータシステムに直接接続する媒体に限定されることはなく、ネットワーク上に分散して存在するものであってもよい。媒体の例としては、ハードディスク、フロッピー(登録商標)ディスク、および磁気テープのような磁気媒体、CD−ROMおよびDVDのような光媒体、フロプティカルディスク(floptical disk)のような光磁気媒体、およびROM、RAM、フラッシュメモリなどを含み、プログラム命令が記録されるように構成されたものであってよい。また、媒体の他の例として、アプリケーションを配布するアプリケーションストアやその他の多様なソフトウェアを供給または配布するサイト、サーバなどで管理する記録媒体または格納媒体が挙げられる。プログラム命令の例には、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行されることのできる高級言語コードを含む。
以上のように、実施形態を、限定された実施形態および図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能であろう。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、かつ/あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で結合されたりまたは組み合わされたり、他の構成要素または均等物によって代替されたり置換されたとしても、適切な結果を達成することができる。
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。
110、120、130、140:電子機器
150、160:サーバ
170:ネットワーク
150、160:サーバ
170:ネットワーク
Claims (14)
- 難読化解除方法をコンピュータ装置に実行させるためのコンピュータプログラムであって、
共通中間言語を利用して実行ファイルを実行するフレームワークが実行可能なネイティブイメージをメモリにロードするために呼び出すロード関数の情報を格納することと、
前記フレームワークで第1実行ファイルが実行される場合、前記格納された情報に基づき、前記フレームワークが前記第1実行ファイルのコードによって呼び出す前記ロード関数をフッキングすることと、
前記ロード関数のフッキングによって得られるアドレスを利用して前記メモリで前記第1実行ファイルに対する実行可能なネイティブイメージを抽出して前記第1実行ファイルに対する原本実行ファイルを生成することと、
を含む、コンピュータプログラム。 - 前記ロード関数は、前記フレームワークからパラメータとして伝達される実行ファイルに対する実行可能なネイティブイメージがメモリにロードするように前記フレームワークが呼び出す関数を含むことを特徴とする、請求項1に記載のコンピュータプログラム。
- 前記原本実行ファイルを生成することは、
前記フッキングされたロード関数を用い、前記フレームワークから前記フッキングされたロード関数でパラメータとして伝達される前記第1実行ファイルに対する実行可能なネイティブイメージが前記メモリにロードされるアドレスとサイズを抽出することと、
前記第1実行ファイルに対する実行可能なネイティブイメージが前記メモリにロードされるように前記フッキングされたロード関数を実行することと、
前記メモリで前記抽出されたアドレスから前記抽出されたサイズのデータを抽出することと、
前記抽出されたデータをファイルで格納して前記第1実行ファイルに対する原本実行ファイルを生成することと
を含むことを特徴とする、請求項1または2に記載のコンピュータプログラム。 - 前記フレームワークは、ドットネットフレームワークを含み、
前記ロード関数は、前記ドットネットフレームワークのドットネットローダとして含まれるコアライブラリに含まれ、前記フレームワークからパラメータとして伝達される実行ファイルに対する実行可能なネイティブイメージをメモリにロードするように前記フレームワークが呼び出す関数を含むことを特徴とする、請求項1乃至3のいずれか一項に記載のコンピュータプログラム。 - 前記ロード関数は、同じシステム上で同じアドレスに実行可能なネイティブイメージをロードし、
前記フレームワークで第2実行ファイルが実行される場合、前記ロード関数のフッキングによって得られたアドレスを利用して前記メモリで前記第2実行ファイルに対する実行可能なネイティブイメージを抽出して前記第2実行ファイルに対する原本実行ファイルを生成すること
をさらに含むことを特徴とする、請求項1乃至4のいずれか一項に記載のコンピュータプログラム。 - 前記実行ファイルは、少なくとも一部の内容に難読化が適用されたファイルを含み、
前記実行可能なネイティブイメージは、前記実行ファイルの復元モジュールによって前記難読化に対する復元が進められた原本内容を含むことを特徴とする、請求項1乃至5のいずれか一項に記載のコンピュータプログラム。 - 少なくとも1つのプロセッサを含むコンピュータ装置の難読化解除方法であって、
前記少なくとも1つのプロセッサが、共通中間言語を利用して実行ファイルを実行するフレームワークが実行可能なネイティブイメージをメモリにロードするために呼び出すロード関数の情報を格納することと、
前記フレームワークで第1実行ファイルが実行される場合、前記少なくとも1つのプロセッサが、前記格納された情報に基づき、前記フレームワークが前記第1実行ファイルのコードによって呼び出す前記ロード関数をフッキングすることと、
前記少なくとも1つのプロセッサが、前記ロード関数のフッキングによって得られるアドレスを利用して前記メモリで前記第1実行ファイルに対する実行可能なネイティブイメージを抽出して前記第1実行ファイルに対する原本実行ファイルを生成することと、
を含む、難読化解除方法。 - 前記ロード関数は、前記フレームワークからパラメータとして伝達される実行ファイルに対する実行可能なネイティブイメージがメモリにロードするように前記フレームワークが呼び出す関数を含むことを特徴とする、請求項7に記載の難読化解除方法。
- 前記原本実行ファイルを生成することは、
前記フッキングされたロード関数を用い、前記フレームワークから前記フッキングされたロード関数でパラメータとして伝達される前記第1実行ファイルに対する実行可能なネイティブイメージが前記メモリにロードされるアドレスとサイズを抽出することと、
前記第1実行ファイルに対する実行可能なネイティブイメージが前記メモリにロードされるように前記フッキングされたロード関数を実行することと、
前記メモリで前記抽出されたアドレスから前記抽出されたサイズのデータを抽出することと、
前記抽出されたデータをファイルで格納して前記第1実行ファイルに対する原本実行ファイルを生成することと、
を含むことを特徴とする、請求項7または8に記載の難読化解除方法。 - 前記ロード関数は、同じシステム上で同じアドレスに実行可能なネイティブイメージをロードし、
前記フレームワークで第2実行ファイルが実行される場合、前記ロード関数のフッキングによって得られたアドレスを利用して前記メモリで前記第2実行ファイルに対する実行可能なネイティブイメージを抽出して前記第2実行ファイルに対する原本実行ファイルを生成すること
をさらに含むことを特徴とする、請求項7乃至9のいずれか一項に記載の難読化解除方法。 - 請求項7乃至10のうちのいずれか一項に記載の方法をコンピュータ装置に実行させるためのコンピュータプログラムが記録されている、コンピュータ読み取り可能な記録媒体。
- コンピュータ読み取り可能な命令を実行するように実現される少なくとも1つのプロセッサ
を含み、
前記少なくとも1つのプロセッサが、
共通中間言語を利用して実行ファイルを実行するフレームワークが実行可能なネイティブイメージをメモリにロードするために呼び出すロード関数の情報を格納し、
前記フレームワークで第1実行ファイルが実行される場合、前記格納された情報に基づき、前記フレームワークが前記第1実行ファイルのコードによって呼び出す前記ロード関数をフッキングし、
前記ロード関数のフッキングによって得られるアドレスを利用して前記メモリで前記第1実行ファイルに対する実行可能なネイティブイメージを抽出して前記第1実行ファイルに対する原本実行ファイルを生成すること
を特徴とする、コンピュータ装置。 - 前記少なくとも1つのプロセッサが、
前記フッキングされたロード関数を用い、前記フレームワークから前記フッキングされたロード関数でパラメータとして伝達される前記第1実行ファイルに対する実行可能なネイティブイメージが前記メモリにロードされるアドレスとサイズを抽出し、
前記第1実行ファイルに対する実行可能なネイティブイメージが前記メモリにロードされるように前記フッキングされたロード関数を実行し、
前記メモリで前記抽出されたアドレスから前記抽出されたサイズのデータを抽出し、
前記抽出されたデータをファイルで格納して前記第1実行ファイルに対する原本実行ファイルを生成すること
を特徴とする、請求項12に記載のコンピュータ装置。 - 前記ロード関数は、同じシステム上で同じアドレスに実行可能なネイティブイメージをロードし、
前記少なくとも1つのプロセッサが、
前記フレームワークで第2実行ファイルが実行される場合、前記ロード関数のフッキングによって得られたアドレスを利用して前記メモリで前記第2実行ファイルに対する実行可能なネイティブイメージを抽出して前記第2実行ファイルに対する原本実行ファイルを生成すること
を特徴とする、請求項12または13に記載のコンピュータ装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR10-2019-0075420 | 2019-06-25 | ||
KR1020190075420A KR20210000398A (ko) | 2019-06-25 | 2019-06-25 | 난독화 해제 방법 및 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021005375A true JP2021005375A (ja) | 2021-01-14 |
Family
ID=74097228
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020108552A Pending JP2021005375A (ja) | 2019-06-25 | 2020-06-24 | 難読化解除方法および装置 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP2021005375A (ja) |
KR (1) | KR20210000398A (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114707150B (zh) * | 2022-03-21 | 2023-05-09 | 安芯网盾(北京)科技有限公司 | 一种恶意代码检测方法、装置、电子设备和存储介质 |
-
2019
- 2019-06-25 KR KR1020190075420A patent/KR20210000398A/ko unknown
-
2020
- 2020-06-24 JP JP2020108552A patent/JP2021005375A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
KR20210000398A (ko) | 2021-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11645383B2 (en) | Early runtime detection and prevention of ransomware | |
US20170346843A1 (en) | Behavior processing method and device based on application program | |
JP6346632B2 (ja) | モバイルデバイスでの悪質なファイルを検出するシステム及び方法 | |
US8892876B1 (en) | Secured application package files for mobile computing devices | |
US10372444B2 (en) | Android dynamic loading file extraction method, recording medium and system for performing the method | |
JP6227772B2 (ja) | 動的ライブラリを保護する方法及び装置 | |
CN106295255B (zh) | 应用程序的加固方法和装置 | |
US7975308B1 (en) | Method and apparatus to secure user confidential data from untrusted browser extensions | |
CN111143869B (zh) | 应用程序包处理方法、装置、电子设备及存储介质 | |
US20130160126A1 (en) | Malware remediation system and method for modern applications | |
WO2016078130A1 (zh) | 一种防逆向apk文件的动态加载方法 | |
US8438640B1 (en) | Method and apparatus for reverse patching of application programming interface calls in a sandbox environment | |
JP6392446B2 (ja) | クラウドベースのアプリケーションセキュリティサービスの提供方法及びシステム | |
JP2016525760A (ja) | 無関係なコードの特定 | |
US20160078227A1 (en) | Data processing system security device and security method | |
KR101557455B1 (ko) | 응용 프로그램 코드 분석 장치 및 그것을 이용한 코드 분석 방법 | |
JP2017146967A (ja) | 中間言語ファイルのロード速度改善のための方法およびシステム | |
JP2021005375A (ja) | 難読化解除方法および装置 | |
US9785775B1 (en) | Malware management | |
KR101667774B1 (ko) | 스크립트 프로그램을 위한 보안 제공 장치 및 방법 | |
JP2016522511A (ja) | システムを保護するためのファイルセキュリティ用の管理装置と管理方法 | |
US20170171224A1 (en) | Method and System for Determining Initial Execution of an Attack | |
JP6307956B2 (ja) | 情報処理装置及び情報処理方法 | |
US11921874B2 (en) | Method and system for protecting file using class distribution and sequential memory loading | |
US10331902B2 (en) | Data loss prevention |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230615 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20240619 |