JP7076014B2 - プログラム保護のためのJavaデバッガ遮断方法およびシステム - Google Patents

プログラム保護のためのJavaデバッガ遮断方法およびシステム Download PDF

Info

Publication number
JP7076014B2
JP7076014B2 JP2020566950A JP2020566950A JP7076014B2 JP 7076014 B2 JP7076014 B2 JP 7076014B2 JP 2020566950 A JP2020566950 A JP 2020566950A JP 2020566950 A JP2020566950 A JP 2020566950A JP 7076014 B2 JP7076014 B2 JP 7076014B2
Authority
JP
Japan
Prior art keywords
thread
java
computer
debugger
stage
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
JP2020566950A
Other languages
English (en)
Other versions
JP2021530014A (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.)
Line Plus Corp
Original Assignee
Line Plus 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 Line Plus Corp filed Critical Line Plus Corp
Publication of JP2021530014A publication Critical patent/JP2021530014A/ja
Application granted granted Critical
Publication of JP7076014B2 publication Critical patent/JP7076014B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Description

以下の説明は、プログラム保護のためのJavaデバッガ遮断方法、Javaデバッガ遮断方法を実行するJavaデバッガ遮断システム、コンピュータと結合してJavaデバッガ遮断方法をコンピュータに実行させるためにコンピュータ読み取り可能な記録媒体に記録されたコンピュータプログラムとその記録媒体に関する。
クライアント端末に配布されたアプリケーションは、リバースエンジニアリング(リバーシング)によってその動作方式を把握することができるため、このような技術によってアプリケーション機能の盗用を可能にする。また、アプリケーションの機能を修正してアプリケーションの本来の意図とは異なるように動作させることで、アプリケーションが提供するサービスと該当のサービスを提供するシステムの信頼性に良くない影響を与えたりもする。
このようなリバースエンジニアリングによるアプリケーションの分析過程では、デバッグ(debugging)の活用が必須となる。デバッグとは、プログラムのエラーを確認して修正する行為を意味するものであって、このような行為のために使用されるプログラムはデバッガと呼ばれる。このようなデバッグは、エラーのない正常なプログラムに対しても実行可能であり、このような場合には、プログラムが本来意図する動作を変更するだけではなく、プログラム内部の動作の原理を把握するための悪意的な目的として使用されることもある。
従来は、内蔵されたプログラムを保護する目的で、コードの修正と動作形態の理解を難しくするために、本来の動作方式を変更したり一部を暗号化したりする方式である難読化技法が利用されている。例えば、韓国登録特許第10-1328012号は、アプリケーションコード難読化装置およびその方法に関するものであって、アプリケーションに使用されるコードのうち、重要コードおよび重要コードを呼び出すための呼び出しコードをネイティブコード形態に変換する技術を開示している。
しかし、このような従来技術は、難読化されたコードを実行するために追加の実行時間が必要となり、本来の動作を実行するために特定の時点ではメモリ上に本来のコードがロードされなければならないという問題があった。
韓国登録特許第10-1328012号公報
Javaアプリケーションとデバッガとの通信を定義するデバッグ規約に従って動作するスレッドを終了させることにより、Javaアプリケーションに対するデバッガの影響を遮断することができるJavaデバッガ遮断方法、Javaデバッガ遮断方法を実行するJavaデバッガ遮断システム、コンピュータと結合してJavaデバッガ遮断方法をコンピュータに実行させるためにコンピュータ読み取り可能な記録媒体に記録されたコンピュータプログラムとその記録媒体を提供する。
コンピュータのプロセッサが実行するJavaデバッガ遮断方法であって、前記コンピュータ上で現在実行中のJava仮想マシンのハンドルを取得する段階、前記コンピュータ上で現在実行中のスレッドのうちからJavaで予め定義されたデバッグ規約に従って動作するスレッドを確認する段階、および前記取得したJava仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる段階を含む、Javaデバッガ遮断方法を提供する。
コンピュータと結合して前記Javaデバッガ遮断方法をコンピュータ実行させるためにコンピュータ読み取り可能な記録媒体に記録された、コンピュータプログラムを提供する。
前記Javaデバッガ遮断方法をコンピュータに実行させるためのコンピュータプログラムが記録されていることを特徴とする、コンピュータ読み取り可能な記録媒体を提供する。
コンピュータ読み取り可能な命令を実行するように実現される少なくとも1つのプロセッサを含み、前記少なくとも1つのプロセッサにより、前記コンピュータ上で現在実行中のJava仮想マシンのハンドルを取得し、前記コンピュータ上で現在実行中のスレッドのうちからJavaで予め定義されたデバッグ規約に従って動作するスレッドを確認し、前記取得したJava仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる、コンピュータ装置を提供する。
Javaアプリケーションとデバッガとの通信を定義するデバッグ規約に従って動作するスレッドを終了させることにより、Javaアプリケーションに対するデバッガの影響を遮断することができる。
本発明の一実施形態における、ネットワーク環境の例を示した図である。 本発明の一実施形態における、電子機器およびサーバの内部構成を説明するためのブロック図である。 本発明の一実施形態における、Javaデバッガを遮断する過程の例を示した図である。 本発明の一実施形態における、Javaデバッガ遮断方法の例を示したフローチャートである。 本発明の一実施形態における、スレッドをJava仮想マシンのハンドルから分離させる過程の例を示したフローチャートである。
以下、実施形態について、添付の図面を参照しながら詳しく説明する。
本発明の実施形態に係るJavaデバッガ遮断システムは、一例として、図2で説明するコンピュータ装置200のようなコンピュータによって実現されてよく、本発明の実施形態に係るJavaデバッガ遮断方法は、コンピュータによって実行されてよい。例えば、コンピュータにおいては、本発明の一実施形態に係るコンピュータプログラム(一例として、特定のサービス提供を受けるためにコンピュータ装置にインストールされたアプリケーション)が実行されてよく、コンピュータは、実行されたコンピュータプログラムの制御にしたがって本発明の一実施形態に係るJavaデバッガ遮断方法を実行してよい。上述したコンピュータプログラムは、コンピュータと結合してJavaデバッガ遮断方法をコンピュータに実行させるためにコンピュータ読み取り可能な記録媒体に記録されてよい。
図1は、本発明の一実施形態における、ネットワーク環境の例を示した図である。図1のネットワーク環境は、複数の電子機器110、120、130、140、複数のサーバ150、160、およびネットワーク170を含む例を示している。このような図1は、発明の説明のための一例に過ぎず、電子機器の数やサーバの数が図1のように限定されることはない。
複数の電子機器110、120、130、140は、コンピュータ装置によって実現される固定端末や移動端末であってよい。複数の電子機器110、120、130、140の例としては、スマートフォン、携帯電話、ナビゲーション、PC(personal computer)、ノート型パンコン、デジタル放送用端末、PDA(Personal Digital Assistant)、PMP(Portable Multimedia Player)、タブレットなどがある。一例として、図1では、電子機器1(110)の例としてスマートフォンを示しているが、本発明の実施形態において、電子機器1(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に第1サービスを提供するシステムであってよく、サーバ160も、ネットワーク170を介して接続した複数の電子機器110、120、130、140に第2サービスを提供するシステムであってよい。より具体的な例として、サーバ150は、複数の電子機器110、120、130、140にインストールされたアプリケーション(コンピュータプログラム)と連係するサービスを前記第1サービスとして提供してよい。他の例として、サーバ160は、前記第1サービスのためのアプリケーションのインストールファイルを複数の電子機器110、120、130、140に提供するサービスを前記第2サービスとして提供してよい。
図2は、本発明の一実施形態における、コンピュータ装置の例を示したブロック図である。上述した複数の電子機器110、120、130、140それぞれやサーバ150、160それぞれは、図2に示したコンピュータ装置200によって実現されてよい。例えば、コンピュータ装置200においては、一実施形態に係るコンピュータプログラムがインストールされて実行されてよく、コンピュータ装置200は、実行されるコンピュータプログラムの制御にしたがって本発明の一実施形態に係るJavaデバッガ遮断方法を実行してよい。
このようなコンピュータ装置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は、本発明の一実施形態における、Javaデバッガを遮断する過程の例を示した図である。コンピュータ装置200は、Java仮想マシン(Java Virtual Machine)300を含んでよい。Java仮想マシン300は、Java言語で作成されたプログラムを解釈して実行する仮想のコンピュータである。Java言語で記述されたプログラムはJavaコンパイラによってバイトコードのような中間コードに変換されるが、このとき、Java仮想マシン300は、このようなバイトコードを解釈して実行するソフトウェアモジュールであってよい。Javaは、オブジェクト指向プログラミング言語であって、JavaアプリケーションのデバッグのためにJDWP(JavaTM Debug Wire Protocol)のようなJavaアプリケーションとデバッガプロセスとの通信を定義するデバッグ規約を提供する。このとき、このようなデバッグ規約に従って動作するスレッドが存在することがある。図3は、Java仮想マシン300にアタッチ(attach)したn個のスレッド310を示しており、n個のスレッド310のうちスレッドn320をデバッグ規約に従って動作するスレッドとして示している。このとき、スレッドn320は、一般的にJDWPを名称として使用し、JDWPのようなデバッグ規約による機能を実行することにより、コンピュータ装置200にインストールされた他のソフトウェアであるデバッガ330がJavaアプリケーションと通信できるように動作する。例えば、スレッドn320は、デバッガ330が、n個のスレッド310のうち、Javaアプリケーションによる他のスレッドと通信できるようにする機能を提供してよい。
デバッガ330は、スレッドn320と連結することができない場合には、Javaアプリケーションによる他のスレッドと通信することができないため、本実施形態では、スレッドn320を終了させることによってJavaアプリケーションをデバッグしようとするデバッガ330を遮断する。図3では「pthread_exit()」340のような処理関数を利用してJava仮想マシン300にアタッチしたJDWPスレッドであるスレッドn320を終了させて無力化することによってデバッガ330を遮断する例を示している。
図4は、本発明の一実施形態における、Javaデバッガ遮断方法の例を示したフローチャートである。本実施形態に係るJavaデバッガ遮断方法は、上述したコンピュータ装置200によって実行されてよい。例えば、コンピュータ装置200のプロセッサ220は、メモリ210が含むオペレーティングシステムのコード、および/または少なくとも1つのプログラムのコードによる制御命令(instruction)を実行するように実現されてよい。例えば、上述したプログラムコードは、デバッグの対象となるJavaアプリケーションのコードであってよい。言い換えれば、Javaアプリケーションは、Javaデバッガを遮断するためのコードを含んでよく、プロセッサ220は、コンピュータ装置200に記録されたJavaアプリケーションのコードが提供する制御命令にしたがってコンピュータ装置200が図3の制御方法に含まれる段階410~430を実行するようにコンピュータ装置200を制御してよい。実施形態によっては、プログラムのコードは、デバッグの対象となるJavaアプリケーションとは別のプログラムによって提供されてもよい。
段階410で、コンピュータ装置200は、現在実行中のJava仮想マシンのハンドルを取得してよい。Javaコードを実行するすべてのスレッドはJava仮想マシンに連結(attach)しているため、このようなスレッドを「pthread_exit()」のような関数を利用して直ぐに終了させる場合にはJava仮想マシンで衝突が発生する恐れがある。したがって、コンピュータ装置200は、後にスレッドを終了させようとするときに「DetachCurrentThread()」のような関数を利用して終了させようとする関数をJava仮想マシンから予め分離(detach)してからスレッドを終了させてよく、このために、Java仮想マシンのハンドルを予め取得してよい。したがって、実施形態によっては、段階410は、スレッドをJava仮想マシンから分離させる前、一例として、段階420と段階430の間に実行されてもよい。
コンピュータ装置200は、「JNI_OnLoad()」のような関数によって呼び出されるJava仮想マシンのハンドルを記録してよい。例えば、仮想マシンのハンドルは、現在実行中のJava仮想マシンのオブジェクトにアクセスするためのアドレスポインタ値であって、Java仮想マシンがネイティブライブラリをロードする時点に先立ち、説明した関数「JNI_OnLoad()」を行うようになり、関数「JNI_OnLoad()」を呼び出す時点に呼び出されるハンドル(現在実行中のプロセッサのJava仮想マシンインスタンス自体に対するポインタ値として、一般的に「JNI_OnLoad()」に伝達される最初のパラメータ「JavaVM*vm」を意味する)を記録してよい。記録されたハンドルは、後にスレッドを分離する場合に、スレッド分離のための関数「DetachCurrentThread()」を呼び出すのに活用されてよい。ただし、コンピュータ上で実行中のJava仮想マシンのハンドルをインポートすることができる方法であれば、上述した関数「JNI_OnLoad()」に限定されることなく使用が可能である。
段階420で、コンピュータ装置200は、現在実行中のスレッドのうちからJavaで予め定義されたデバッグ規約に従って動作するスレッドを確認してよい。デバッグ規約は、上述したように、Javaアプリケーションとデバッガプロセスとの通信を定義するJDWPを含んでよい。このようなデバッグ規約に従って動作するスレッドの名称は一般的にはJDWPをそのまま使用するため、コンピュータ装置200は、スレッドのうちで名称がJDWPであるスレッドの識別子を確認することにより、デバッグ規約に従って動作するスレッドを確認してよい。他の実施形態として、コンピュータ装置200は、スレッドのうちからJDWP機能を実行するスレッドの識別子を確認することにより、デバッグ規約に従って動作するスレッドを確認してもよい。また他の実施形態として、コンピュータ装置200は、スレッドそれぞれのタスク情報を取得し、タスク情報に基づいてJDWPに対応するタスク情報を有するスレッドの識別子を確認することにより、デバッグ規約に従って動作するスレッドを確認してもよい。一例として、ユニックス(Unix)を使用するコンピュータ装置200は、PROCファイルシステムで現在実行中のプロセス情報にアクセスしてタスク情報をインポートしてよい。このとき、コンピュータ装置200は、JDWPに該当するタスクによってスレッドの識別子を確認してよい。
段階430で、コンピュータ装置200は、取得したJava仮想マシンのハンドルから確認されたスレッドを分離して終了させてよい。このように、デバッグ規約に従って動作するスレッドを終了させることにより、Javaデバッガ(一例として、図3を参照しながら説明したデバッガ330)はデバッグしようとするJavaアプリケーションと通信することができなくなり、これにより、Javaデバッガを遮断させることができるようになる。
一方、単にスレッドを終了させる場合には衝突が発生する恐れがあるため、コンピュータ装置200は、スレッドをJava仮想マシンのハンドルから分離させることで安全にスレッドを終了させることができる。
図5は、本発明の一実施形態における、スレッドをJava仮想マシンのハンドルから分離させる過程の例を示したフローチャートである。図5の段階510~520は、図4を参照しながら説明した段階430に含まれ、コンピュータ装置200によって実行されてよい。
段階510で、コンピュータ装置200は、確認されたスレッドの識別子を有する第1スレッドが終了するということを第1スレッドがJava仮想マシンに知らせて終了するように第1スレッドを制御する処理関数を登録してよい。このような処理関数は、図4および図5の段階を実行するようにコンピュータ装置200を制御するためのコンピュータプログラムに含まれてよく、コンピュータ装置200は、このようなコンピュータプログラムのコードによる制御命令にしたがい、コンピュータプログラムに含まれる処理関数をJava仮想マシンに登録してよい。
このような処理関数は、段階420で確認されたスレッド、言い換えれば、デバッグ規約に従って動作するスレッド(一例として、JDWPスレッド)が処理関数を実行するときに、JDWPスレッド自身が直ぐに終了するということをJava仮想マシンに知らせるようにするコードを含んでよく、このような知らせによってJDWPスレッドが正常に終了できるような環境が造成されてよく、Java仮想マシンのハンドルからJDWPスレッドが分離されてよい。また、処理関数は、JDWPスレッドが自身を終了させるようにするためのコードをさらに含んでよく、処理関数を実行するJDWPスレッドは自主的に終了してよい。
段階520で、コンピュータ装置200は、第1スレッドが処理関数を実行するように制御してよい。上述したように、第1スレッドが処理関数を実行することにより、第1スレッド自身が自主的に終了するということをJava仮想マシンに知らせた後、自らを終了させるように制御することができる。
このとき、第1スレッドが処理関数を実行するようにするために、コンピュータ装置200は、段階510で、スレッドそれぞれが処理関数を呼び出すように制御するユーザ定義シグナルをさらに登録してよく、段階520で、ユーザ定義シグナルを呼び出してスレッドが処理関数を呼び出すように制御してよい。より具体的な例として、ユニックス系列のオペレーティングシステムを使用するコンピュータ装置200の場合は、「sigaction()」のような関数を利用することで、ユーザ定義シグナル(シグナルの番号)とハンドラー(処理関数)をシステム(オペレーティングシステム)上に登録してよい。例えば、コンピュータ装置200は、コンピュータプログラムの制御にしたがって「sigaction()」関数を呼び出してよく、コンピュータプログラムが含むユーザ定義シグナルとハンドラーをコンピュータ装置200に登録してよい。この後、コンピュータプログラムの制御にしたがい、コンピュータ装置200が「kill()」関数を利用してシステムに登録されたユーザ定義シグナルを呼び出すことにより、Java仮想マシンが含むスレッドそれぞれが登録されたハンドラー(処理関数)を呼び出して実行するようになる。このとき、処理関数は、自身を呼び出したスレッドがJDWPスレッドであるかを確認する過程を経てよく、確認されたJDWPスレッド(第1スレッド)は、処理関数が含む機能を利用して自らを終了させるための過程を行ってよい。言い換えれば、コンピュータ装置200は、呼び出されたユーザ定義シグナルを処理するスレッドの識別子を段階420で確認されたJDWPスレッドの識別子と比較して該当のスレッドが確認されたJDWPスレッドと一致するかを確認してよく、該当のスレッドがJDWPスレッドである場合には、JDWPスレッドが処理関数を実行して自身が終了することをJava仮想マシンに知らせ、自身をJava仮想マシンから分離させて終了するように制御してよい。
上述したように、JDWPスレッドが終了する場合には、図3を参照しながら説明したデバッガ330のようなJavaデバッガがデバッグしようとするJavaアプリケーションと通信することができなくなるため、JavaデバッガをJavaアプリケーションから遮断することができる。既にJavaアプリケーションとアタッチしたJavaデバッガであったとしても、JDWPスレッドの終了により、JavaデバッガとJavaアプリケーションとはこれ以上の通信が不可能となるため、JavaデバッガはJavaアプリケーションからデタッチ(detach)して遮断される。
以上のように、本発明の実施形態によると、Javaアプリケーションとデバッガとの通信を定義するデバッグ規約に従って動作するスレッドを終了させることにより、Javaアプリケーションに対するデバッガの影響を遮断することができる。
上述したシステムまたは装置は、ハードウェア構成要素、ソフトウェア構成要素、またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現されてよい。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、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、フラッシュメモリなどのようなプログラム命令を記録して実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例には、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。
以上のように、実施形態を、限定された実施形態および図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能であろう。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、かつ/あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で結合されたりまたは組み合わされたり、他の構成要素または均等物によって対置されたり置換されたとしても、適切な結果を達成することができる。
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。

Claims (15)

  1. Javaデバッガ遮断方法をコンピュータに実行させるコンピュータプログラムであって、
    前記Javaデバッガ遮断方法は、
    前記コンピュータ上で現在実行中のJava仮想マシンのハンドルを取得する段階、
    前記コンピュータ上で現在実行中のスレッドのうちからJavaで予め定義されたデバッグ規約に従って動作するスレッドを確認する段階、および
    前記取得したJava仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる段階
    を含む、コンピュータプログラム。
  2. 前記デバッグ規約は、Javaアプリケーションとデバッガプロセスとの通信を定義するJDWPを含む、請求項1に記載のコンピュータプログラム。
  3. 前記スレッドを確認する段階は、
    前記スレッドのうちで名称がJDWPであるスレッドの識別子を確認する段階
    を含む、請求項1に記載のコンピュータプログラム。
  4. 前記スレッドを確認する段階は、
    前記スレッドのうちでJDWP機能を実行するスレッドの識別子を確認する段階
    を含む、請求項1に記載のコンピュータプログラム。
  5. 前記スレッドを確認する段階は、
    前記スレッドそれぞれのタスク情報に基づいてJDWPに対応するタスク情報を有するスレッドの識別子を確認する段階
    を含む、請求項1に記載のコンピュータプログラム。
  6. 前記確認されたスレッドを分離して終了させる段階は、
    前記確認されたスレッドの識別子を有する第1スレッドが終了するということを前記第1スレッドが前記Java仮想マシンに知らせて終了するように前記第1スレッドを制御する処理関数を登録する段階、および
    前記第1スレッドが前記処理関数を実行するように制御する段階
    を含み、
    前記第1スレッドが前記登録された処理関数を実行することにより、前記第1スレッドが前記Java仮想マシンから分離して終了する、請求項1に記載のコンピュータプログラム。
  7. 前記登録する段階は、
    前記スレッドそれぞれが前記処理関数を呼び出すように制御するユーザ定義シグナルをさらに登録し、
    前記制御する段階は、
    前記ユーザ定義シグナルを呼び出して前記スレッドが前記処理関数を呼び出すように制御する、請求項6に記載のコンピュータプログラム。
  8. コンピュータのプロセッサが実行するJavaデバッガ遮断方法であって、
    コンピュータ上で現在実行中のJava仮想マシンのハンドルを取得する段階、
    前記コンピュータ上で現在実行中のスレッドのうちからJavaで予め定義されたデバッグ規約に従って動作するスレッドを確認する段階、および
    前記取得したJava仮想マシンのハンドルから前記確認されたスレッドを分離して終了させる段階
    を含む、Javaデバッガ遮断方法。
  9. 前記デバッグ規約は、Javaアプリケーションとデバッガプロセスとの通信を定義するJDWPを含む、請求項8に記載のJavaデバッガ遮断方法。
  10. 前記スレッドを確認する段階は、
    前記スレッドのうちで名称がJDWPであるスレッドの識別子を確認する段階
    を含む、請求項8に記載のJavaデバッガ遮断方法。
  11. 前記スレッドを確認する段階は、
    前記スレッドのうちでJDWP機能を実行するスレッドの識別子を確認する段階
    を含む、請求項8に記載のJavaデバッガ遮断方法。
  12. 前記スレッドを確認する段階は、
    前記スレッドそれぞれのタスク情報に基づいてJDWPに対応するタスク情報を有するスレッドの識別子を確認する段階
    を含む、請求項8に記載のJavaデバッガ遮断方法。
  13. 前記確認されたスレッドを分離して終了させる段階は、
    前記確認されたスレッドの識別子を有する第1スレッドが終了するということを前記第1スレッドが前記Java仮想マシンに知らせて終了するように前記第1スレッドを制御する処理関数を登録する段階、および
    前記第1スレッドが前記処理関数を実行するように制御する段階
    を含み、
    前記第1スレッドが前記登録された処理関数を実行することにより、前記第1スレッドが前記Java仮想マシンから分離して終了する、請求項8に記載のJavaデバッガ遮断方法。
  14. 前記登録する段階は、
    前記スレッドそれぞれが前記処理関数を呼び出すように制御するユーザ定義シグナルをさらに登録し、
    前記制御する段階は、
    前記ユーザ定義シグナルを呼び出して前記スレッドが前記処理関数を呼び出すように制御する、請求項13に記載のJavaデバッガ遮断方法。
  15. 請求項1~7のうちのいずれか一項に記載のコンピュータプログラムが記録されている、コンピュータ読み取り可能な記録媒体。
JP2020566950A 2018-05-29 2018-05-29 プログラム保護のためのJavaデバッガ遮断方法およびシステム Active JP7076014B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/KR2018/006069 WO2019231000A1 (ko) 2018-05-29 2018-05-29 프로그램 보호를 위한 자바 디버거 차단 방법 및 시스템

Publications (2)

Publication Number Publication Date
JP2021530014A JP2021530014A (ja) 2021-11-04
JP7076014B2 true JP7076014B2 (ja) 2022-05-26

Family

ID=68697575

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020566950A Active JP7076014B2 (ja) 2018-05-29 2018-05-29 プログラム保護のためのJavaデバッガ遮断方法およびシステム

Country Status (2)

Country Link
JP (1) JP7076014B2 (ja)
WO (1) WO2019231000A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114186201A (zh) * 2021-11-30 2022-03-15 苏州瀚码智能技术有限公司 一种基于windows句柄技术的程序安全加固方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001159984A (ja) 1999-09-10 2001-06-12 Sun Microsyst Inc サービス妨害攻撃を阻止するための装置および方法
WO2014153680A1 (en) 2013-03-27 2014-10-02 Irdeto B.V. Protecting software application
KR101632152B1 (ko) 2015-08-11 2016-06-21 숭실대학교산학협력단 모바일 플랫폼 동적 분석 방지 장치 및 그 방법

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6237137B1 (en) * 1997-10-15 2001-05-22 Dell Usa, L.P. Method and system for preventing unauthorized access to a computer program
KR100781554B1 (ko) * 2004-11-29 2007-12-03 주식회사 안철수연구소 실시간 컴퓨터 프로그램의 디버깅 방지 방법 및 그 기록매체
GB2487575B (en) * 2011-01-28 2017-04-12 Advanced Risc Mach Ltd Controlling generation of debug exceptions
KR101519845B1 (ko) * 2013-11-14 2015-05-13 (주)잉카엔트웍스 안티디버깅 방법
KR101583545B1 (ko) * 2015-07-22 2016-01-08 주식회사 엔에스에이치씨 상호 디버깅 감시를 이용한 모바일 단말기의 어플리케이션의 보안을 향상시키는 보안 제공 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001159984A (ja) 1999-09-10 2001-06-12 Sun Microsyst Inc サービス妨害攻撃を阻止するための装置および方法
WO2014153680A1 (en) 2013-03-27 2014-10-02 Irdeto B.V. Protecting software application
KR101632152B1 (ko) 2015-08-11 2016-06-21 숭실대학교산학협력단 모바일 플랫폼 동적 분석 방지 장치 및 그 방법

Also Published As

Publication number Publication date
WO2019231000A1 (ko) 2019-12-05
JP2021530014A (ja) 2021-11-04

Similar Documents

Publication Publication Date Title
RU2691187C1 (ru) Система и способы аудита виртуальной машины
RU2679175C1 (ru) Способ поведенческого обнаружения вредоносных программ с использованием виртуальной машины-интерпретатора
US12524524B2 (en) Intelligent obfuscation of mobile applications
US10013553B2 (en) Protecting software application
US20220075647A1 (en) Methods and apparatus to protect open and closed operating systems
JP2017146966A (ja) パッケージファイルに対する機能拡張方法およびシステム
US10289397B2 (en) Silent installation of software with dependencies
CN107864676A (zh) 用于检测计算过程中未知漏洞的系统和方法
CN107004087A (zh) 用于自修复的代理存在
US9942268B1 (en) Systems and methods for thwarting unauthorized attempts to disable security managers within runtime environments
US20190102279A1 (en) Generating an instrumented software package and executing an instance thereof
US10078580B2 (en) Operations to avoid wrapped mobile application operational errors due to interference from wrapper logic components
US9552481B1 (en) Systems and methods for monitoring programs
US20180357079A1 (en) Rule-Based Monitoring Engine With Tracing Capabilities for Multi-Threaded Logging
CN108121650B (zh) 一种对于页面用户界面的测试方法及装置
JP2018152061A (ja) 安全なジャストインタイム(jit)コード生成
JP7076014B2 (ja) プログラム保護のためのJavaデバッガ遮断方法およびシステム
US8510719B2 (en) Real-time user configurable debugging framework
US9697018B2 (en) Synthesizing inputs to preserve functionality
US12131150B2 (en) System and methods for patch management
JP7744099B2 (ja) クラス分散およびシーケンシャルメモリ格納を利用したファイル保護方法およびシステム
CN106922191B (zh) 生成和执行受保护的软件项目
JP2021005375A (ja) 難読化解除方法および装置
KR102623022B1 (ko) 프로그램 보호를 위한 디버거 차단 방법 및 시스템
CN111740876B (zh) 一种应用装置、测试方法、存储介质及电子设备

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210510

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220419

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220516

R150 Certificate of patent or registration of utility model

Ref document number: 7076014

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250