(57)【要約】【課題】保護するためのルーチンの自動選択する装置、コンピュータ読取可能媒体、方法を提供すること。【解決手段】アプリケーションを保護する装置、コンピュータ読取可能媒体、方法。前記方法は、以下のステップを含む：    前記アプリケーションの複数の各ルーチンを評価し、前記アプリケーションの前記複数の各ルーチンの評価を生成することによって、前記アプリケーション用のセキュリティ・レベルを受け取ることに応答するステップ；    前記複数の各ルーチンの前記評価と及び前記受け取ったセキュリティ・レベルとに基づいて保護を行うための前記複数のルーチンの幾つかを選択するステップ；並びに    前記複数のルーチンのうち前記選択された幾つかを保護するステップ。【選択図】図１
2012221510.tif 000002
【特許請求の範囲】
【請求項１】
複数のルーチンを含むアプリケーションを保護する方法であって、以下のステップを含む前記方法：
前記アプリケーション用のセキュリティ・レベルを受け取ることに応答して、
前記アプリケーションの複数の各ルーチンを評価し、前記アプリケーションの前記複数の各ルーチンの評価を生成するステップ；
前記複数の各ルーチンの前記評価と及び前記受け取ったセキュリティ・レベルとに基づいて、保護対象の前記複数のルーチンの幾つかを選択するステップ；並びに
前記複数のルーチンのうち前記選択された幾つかを保護するステップ。
【請求項２】
請求項１に記載の方法であって：
保護するための前記複数のルーチンのうち少なくとも１つのルーチンを選択するステップをさらに含み；及び
前記アプリケーションの前記複数の各ルーチンの前記評価が、更に、前記選択された少なくとも１つのルーチン用のデコイとして前記複数の各ルーチンがどれだけ良好に作用するかに基づく方法。
【請求項３】
請求項１に記載の方法であって、前記セキュリティ・レベルは、保護する前記アプリケーションのパーセンテージである方法。
【請求項４】
請求項１に記載の方法であって、保護することが以下の保護を含む方法：
前記複数のルーチンのうち前記選択された幾つかを難読化することによって、前記被選択ルーチンを保護すること。
【請求項５】
請求項１に記載の方法であって、更に以下のステップを含む方法：
保護されていない複数のルーチンのうち前記選択された幾つかを用いて、前記アプリケーションの性能テストを実施して、保護されていないときの性能測定値を生成するステップ；
保護された複数のルーチンのうち前記選択された幾つかを用いて、前記アプリケーションの性能テストを実施して、保護されているときの性能測定値を生成するステップ；
前記保護されているときの性能測定値を前記保護されていないときの性能測定値と比較するステップ；及び
前記比較するステップにより、前記保護されているときの性能測定値が、予め決められた性能低下測定値を下回って前記保護されていないときの性能測定値よりも低下していることが示された場合、前記複数のルーチンの幾つかを選択するステップに戻るステップ。
【請求項６】
請求項１に記載の方法であって、以下のうちの少なくとも１つを計算して、前記複数の各ルーチンの前記評価を決定する、該方法：
前記ルーチンのサイズ、前記ルーチン内の分岐数に基づく前記ルーチンの複雑さ；
前記アプリケーションのコール・グラフ中の前記ルーチンの位置；
前記ルーチンに対するコールの数、前記ルーチン中のループの数、及び前記ループの境界条件に基づいて前記ルーチンのループが実行される回数についての上限。
【請求項７】
請求項１に記載の方法であって、サイズが小さいルーチンは、保護するための選択がなされない方法。
【請求項８】
アプリケーションを保護するためのシステムであって、前記システムは以下を備える：
アプリケーションのルーチンを評価して評価を生成するために設計された評価ルーチン；
前記評価とセキュリティ・レベルとに基づいてルーチンを選択するために設計された選択ルーチン；並びに
前記被選択ルーチンを保護するために設計された保護ルーチン。
【請求項９】
請求項８に記載のアプリケーションを保護するためのシステムであって、
前記複数のルーチンのうち少なくとも１つのルーチンが保護するために選択され；
前記複数のルーチンのうちの前記選択された少なくとも１つのルーチン用のデコイとして前記複数の各ルーチンがどれだけ良好に作用するかに基づいて、前記アプリケーションのルーチンを評価するために前記評価ルーチンが更に設計されたシステム。
【請求項１０】
請求項８に記載のアプリケーションを保護するためのシステムであって、前記セキュリティ・レベルが、保護する前記アプリケーションのパーセンテージであるシステム。
【請求項１１】
請求項８に記載のアプリケーションを保護するためのシステムであって、前記被選択ルーチンを難読化することによって前記被選択ルーチンを保護するために前記保護ルーチンが更に設計されたシステム。
【請求項１２】
請求項８に記載のアプリケーションを保護するためのシステムであって、以下の動作を行うために設計された性能テスターを更に備えるシステム：
前記保護されていない複数のルーチンのうち前記選択された幾つかを用いて、前記アプリケーションの性能テストを実施して、保護されていないときの性能測定値を生成すること；
前記保護された複数のルーチンのうち前記選択された幾つかを用いて、前記アプリケーションの性能テストを実施して、保護されているときの性能測定値を生成すること；
前記保護されているときの性能測定値を前記保護されていないときの性能測定値と比較すること；及び
前記比較することにより、前記保護されているときの性能測定値が、予め決められた性能低下測定値を下回って前記保護されていないときの性能測定値より低下していることが示された場合、前記複数のルーチンの幾つかを再選択すること。
【請求項１３】
請求項８に記載のアプリケーションを保護するためのシステムであって、以下のうちの少なくとも１つを計算して、前記複数の各ルーチンの前記評価を決定する、該システム：
前記ルーチンのサイズ、前記ルーチン内の分岐数に基づく前記ルーチンの複雑さ；
前記アプリケーションのコール・グラフ中の前記ルーチンの位置；
前記ルーチンに対するコールの数、前記ルーチン中のループの数、及び前記ループの境界条件に基づいて前記ルーチンのループが実行される回数についての上限。
【請求項１４】
請求項８に記載のアプリケーションを保護するためのシステムであって、サイズが小さいルーチンは、保護するための選択がなされないシステム。
【請求項１５】
非一時的なコンピュータ読取可能記録媒体であって、アプリケーションを保護するためにコンピュータを制御する方法を該媒体上で実行する媒体であり、前記方法が以下のステップ含む媒体：
前記アプリケーションの複数の各ルーチンを評価し、前記アプリケーションの前記複数の各ルーチンの評価を生成することによって前記アプリケーション用のセキュリティ・レベルを受け取ることに応答するステップ；
前記複数の各ルーチンの前記評価と及び前記受け取ったセキュリティ・レベルとに基づいて、保護対象の前記複数のルーチンのうち幾つかを選択するステップ；並びに
前記複数のルーチンのうち前記選択された幾つかを保護するステップ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、保護目的でアプリケーションの一部を自動的に選択するための方法、装置、コンピュータ読取可能媒体に関する。
【背景技術】
【０００２】
下記の背景技術の議論においては、特定の構造及び／又は方法について言及する。しかし、下記言及は、こうした構造及び／又は方法が従来技術を構成することを認めるものとして解釈するべきではない。出願人は、こうした構造及び／又は方法が従来技術としての資格がないことを主張する権利を明示的に留保するものとする。
【０００３】
アプリケーションの機能の一部は安全性を必要とする可能性がある。例えば、アプリケーションの違法コピーが行われることを防止するためのコピープロテクションを含むアプリケーションについては、違法コピーが行われることを防止するプログラムの一部が安全であることが必要となる可能性がある。
【０００４】
しかし、アプリケーションの機能を決定するためのアプリケーションのソースコードをリバース・エンジニアリングする際にハッカー側も腕を上げていく。しばしば、ハッカーは、実行可能なコードを採用し、ソースコードの作成を行うソフトウェア・ツールを用いることができ、又は、ハッカーは、実行中のアプリケーションの各指示をハッカーが見ることを可能にする別のソフトウェア・ツールを用いることができる。
【０００５】
アプリケーションのリバース・エンジニアリングをハッカーが行うことを更に困難にするための１つの方法として、ソースコードの難読化（ｏｂｆｕｓｃａｔｉｏｎ）と呼ばれる方法がある。難読化においては、アプリケーションのソースコードを取り出し、該ソースコードを意図的に更に複雑なものにする。しかし、難読化によって、アプリケーションの性能（パフォーマンス）を低下してしまい、その原因としては、難読化によって、アプリケーションに余分なソースコードが付加されるからである。ソースコードの難読化部分の実行については、ソースコードの非難読化部分と比べて２０倍も遅くなる可能性がある。難読化以外にルーチンを保護する方法が更にあるが、ソースコードを保護する大半の方法は、アプリケーションの実行速度を遅くするという共通の特徴を有している。
【０００６】
ソースコードの一部を保護することにより、ソースコードをリバース・エンジニアリングすることが更に困難なるものの、不可能になっているわけではない。従って、アプリケーションのどの部分をリバース・エンジニアリングするべきなのかがハッカーに分からないように、アプリケーションの重要な部分のみならず、更なる難読化が行われることがしばしばある。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
アプリケーションのこうしたデコイ部分の選択は、しばしば、冗長なプロセスとなり、高額な報酬が支払れるプロフェッショナルの貴重な時間が必要となる可能性がある。ルーチンは、アプリケーションの一部でありソースコード内に書かれるものであるが、しばしば、該ルーチンのリストがユーザーに提示され、該ユーザーは、リストのうちどれを保護すべきかを選択する。そして、選択されたルーチン（被選択ルーチン）が保護される。しかし、アプリケーションにおける更なる開発が行われると、新たなルーチンが付加される可能性があるため、ユーザーは、デコイとして用いるためのルーチンを再選択しなければならなくなる可能性がある。また、ユーザーが選択したルーチンにより、アプリケーションに著しい速度低下をもたらす可能性もあり、そして、広範なテストを行わなければ、被選択ルーチンがアプリケーションに著しい速度低下をもたらすかどうかについてユーザーが理解することが困難となる可能性がある。
【課題を解決するための手段】
【０００８】
従って、複数のルーチンを含むアプリケーションを保護する方法に関するニーズが当分野で存在する。本発明の方法は、以下のステップを含む：
前記アプリケーションの複数の各ルーチンを評価し、前記アプリケーションの前記複数の各ルーチンの評価を生成することによって、前記アプリケーション用のセキュリティ・レベルを受け取ることに応答するステップ；
前記複数の各ルーチンの前記評価と及び前記受け取ったセキュリティ・レベルとに基づいて、保護対象の前記複数のルーチンの幾つかを選択するステップ；並びに
前記複数のルーチンの前記選択された幾つかを保護するステップ。
【０００９】
前記方法は、保護するための前記複数のルーチンのうち少なくとも１つのルーチンを選択するステップを含むことができ；及び
前記アプリケーションの前記複数の各ルーチンの前記評価は、更に、前記選択された少なくとも１つのルーチン用のデコイとして前記複数の各ルーチンがどれだけ良好に作用するかに基づく。
【００１０】
前記セキュリティ・レベルは、保護する前記アプリケーションのパーセンテージであってもよい。
【００１１】
保護することは、前記複数のルーチンのうち前記選択された幾つかを難読化することによって、前記被選択ルーチンを保護することを含む。
【００１２】
前記方法は、以下のステップを含むことができる：
保護されていない複数のルーチンのうち前記選択された幾つかを用いて、前記アプリケーションの性能テストを実施して、保護されていないときの性能測定値を生成するステップ；
保護された複数のルーチンのうち前記選択された幾つかを用いて、前記アプリケーションの性能テストを実施して、保護されているときの性能測定値を生成するステップを生成するステップ；
前記保護されているときの性能測定値を前記保護されていないときの性能測定値と比較するステップ；及び
前記比較するステップにより、前記保護されているときの性能測定値が、予め決められた性能低下測定値を下回って前記保護されていないときの性能測定値よりも低下していることが示された場合、前記複数のルーチンの幾つかを選択するステップに戻るステップ。
【００１３】
前記複数の各ルーチンに関して、以下のメトリクスうちの少なくとも１つを計算することができる：
前記ルーチンのサイズ、前記ルーチン内の分岐数に基づく前記ルーチンの複雑さ；
前記アプリケーションのコール・グラフ中の前記ルーチンの位置；
前記ルーチンに対するコールの数、前記ルーチン中のループの数、及び前記ループの境界条件に基づいて前記ルーチンのループが実行される回数についての上限。
【００１４】
サイズが小さいルーチンについては、保護するための選択がなされる資格がないことを決定することできる。
【００１５】
アプリケーションを保護するためのシステムを公開する。
前記システムは以下を備える：
アプリケーションのルーチンを評価して評価を生成するために設計された評価ルーチン；
前記評価とセキュリティ・レベルとに基づいてルーチンを選択するために設計された選択ルーチン（選択するルーチン）；並びに
前記被選択ルーチン（選択されたルーチン）を保護するために設計された保護ルーチン（保護するルーチン）。
【００１６】
前記複数のルーチンのうち少なくとも１つのルーチンが保護するために選択されてもよい；
前記複数のルーチンのうちの前記選択された少なくとも１つのルーチン用のデコイとして前記複数の各ルーチンがどれだけ良好に作用するかに基づいて、前記アプリケーションのルーチンを評価するために、前記評価ルーチンは更に設計されてもよい。
【００１７】
前記セキュリティ・レベルは、保護する前記アプリケーションのパーセンテージであってもよい。
【００１８】
前記被選択ルーチンを難読化することによって前記被選択ルーチンを保護するために前記保護ルーチンが更に設計されてもよい。
【００１９】
前記システムは、以下の動作を行うために設計された性能テスターを備えることができる：
前記保護されていない複数のルーチンのうち前記選択された幾つかを用いて、前記アプリケーションの性能テストを実施して、保護されていないときの性能測定値を生成すること；
前記保護された複数のルーチンのうち前記選択された幾つかを用いて、前記アプリケーションの性能テストを実施して、保護されているときの性能測定値を生成すること；
前記保護されているときの性能測定値を前記保護されていないときの性能測定値と比較すること；及び
前記比較することにより、前記保護されているときの性能測定値が、予め決められた性能低下測定値を下回って前記保護されていないときの性能測定値より低下していることが示された場合、前記複数のルーチンの幾つかを再選択すること。
【００２０】
前記複数の各ルーチンに関して、以下のメトリクスうちの少なくとも１つを計算することができる：
前記ルーチンのサイズ、前記ルーチン内の分岐数に基づく前記ルーチンの複雑さ；
前記アプリケーションのコール・グラフ中の前記ルーチンの位置；
前記ルーチンに対するコールの数、前記ルーチン中のループの数、及び前記ループの境界条件に基づいて前記ルーチンのループが実行される回数についての上限。
【００２１】
サイズが小さいルーチンについては、保護するための選択がなされる資格がないことを決定することできる。
【００２２】
非一時的なコンピュータ読取可能記録媒体であって、アプリケーションを保護するためにコンピュータを制御する方法を該媒体上で実行する媒体について開示する。前記方法は以下のステップ含む：
前記アプリケーションの複数の各ルーチンを評価し、前記アプリケーションの前記複数の各ルーチンの評価を生成することによって前記アプリケーション用のセキュリティ・レベルを受け取ることに応答するステップ；
前記複数の各ルーチンの前記評価と及び前記受け取ったセキュリティ・レベルとに基づいて、保護対象の前記複数のルーチンのうち幾つかを選択するステップ；並びに
前記複数のルーチンのうち前記選択された幾つかを保護するステップ。
【００２３】
同一の番号は同一の要素を表している添付図面に関連して、以下の詳細な説明を参照することができ、該図面については下記の通りである：
【図面の簡単な説明】
【００２４】
【図１】本発明の実施形態に従ってアプリケーションを保護するためのシステムを表す。
【図２】図１の評価ルーチンの動作を表す。
【図３】図１の選択ルーチンの動作を表す。
【図４】図１の保護ルーチンの動作を表す。
【図５】図１の性能テスターの動作を表す。
【図６】本発明の実施形態に従ってアプリケーションを保護するための方法を表す。
【図７】コンピュータシステムを表す。
【発明を実施するための形態】
【００２５】
詳細な説明
図１は、アプリケーションを保護するためのシステム（１００）を表す。システム（１００）は、アプリケーション（２００）とセキュリティ・レベル（３００）とを受け取り、アプリケーション（２００）のルーチン（２２０）を選択し、そして、アプリケーション（２００）のルーチン（２２０）のうち幾つかを保護して、保護されたルーチン（２２４）を生成する。アプリケーションを保護するためのシステム（１００）は、以下のモジュールである、評価ルーチン（１１０）、選択ルーチン（１２０）、保護ルーチン（１３０）を含み、性能テスター（１４０）を含むことができる。
【００２６】
アプリケーション（２００）は、複数のルーチン（２２０）を含むことができる。前記ルーチン（２２０）のうちの幾つかは、予め選択されたルーチン（２２２）であってもよい。予め選択されたルーチン（２２０）の機能のハッカーからの安全性を確保するために、予め選択されたルーチン（２２２）を、保護してもよく、又は保護するために予め選択してもよい。どのルーチンについてリバース・エンジニアリングを試みるべきかをハッカーが分からないようにするために、システム（１００）は、デコイとして動作する更なるルーチン（２２０）を保護するために選択することができる。
【００２７】
ルーチン（２２０）がどれだけ保護するのに適しているかを決定するために、評価ルーチン（１１０）がルーチン（２２０）を評価する。一実施形態において、評価ルーチン（１１０）は、ルーチンのランキング（２６２）（図２参照）を生成し、該ランキングの最上位に最も保護に適したルーチン（２２０）を有する。ルーチン（２２０）が保護された場合にアプリケーション（２００）に対して発生する性能の低下についての見積もりに基づいて、評価ルーチン（２２０）は、ルーチン（２２０）が保護にどれだけ良好に適しているかについて評価することができる。評価ルーチン（１１０）については、また後で議論する。
【００２８】
評価ルーチン（１１０）によって生成されたルーチン（２２０）の評価とセキュリティ・レベル（３００）とに基づいて、選択ルーチン（１２０）は、ルーチン（２２０）を保護するために選択する。例えば、セキュリティ・レベル（３００）は、保護を追加するためのルーチン（２２０）のパーセンテージであってもよい。そして、評価ルーチン（１１０）によって生成されたランキングと保護を追加するためのルーチン（２２０）のパーセンテージとに基づいて、選択ルーチン（１２０）は、ルーチン（２２０）を保護するために選択することができる。従って、もし仮に、アプリケーション（２００）中に３００個のルーチン（２２０）があったとして、且つ、５パーセントのルーチン（２２０）が保護されるべきとセキュリティ・レベル（３００）が表明したとした場合、選択ルーチン（１２０）は、保護されたルーチン（２２４）となるべきルーチンを、ランキング中から上位５パーセント、又は上位１５個のルーチンを選択するであろう。選択ルーチン（１２０）については、また後で議論する。
【００２９】
保護ルーチン（１２０）は、ルーチン（２２０）を受け取り、ルーチン（２２０）を保護して、保護されたルーチン（２２４）を生成する。例えば、保護ルーチン（１２０）は、ルーチン（２２０）受け取って、ルーチン（２２０）を難読化することができる。幾つかの実施形態において、保護ルーチン（１２０）は、予め選択されたルーチン（２２２）を受け取り、そして、予め選択されたルーチン（２２２）を保護して、予め選択され且つ保護されたルーチン（２２３）を生成する。保護ルーチン（１２０）については、また後で議論する。
【００３０】
性能テスター（１４０）は、アプリケーション（２００）の性能をテストする。性能テスター（１４０）は、ルーチン（２２０）が保護される前と後とでアプリケーションを実行することができ、そして、保護されたルーチン（２２４）によりアプリケーション（２００）の性能をどれだけ低下するかについて決定することができる。幾つかの実施形態において、アプリケーション（２００）の性能の低下について、保護されたルーチン（２２４）によって過剰に低下してしまった旨の決定をシステム（１００）が行うことができる。過剰な低下を是正するため、システム（１００）は、異なるルーチン（２２０）を選択して保護することができる。これについては、アプリケーション（２００）の性能を許容できないほどに低下させることのないルーチン（２２０）を選択するための反復プロセスであってもよい。性能テスター（１４０）については、また後で議論する。
【００３１】
セキュリティ・レベル（３００）は、アプリケーション（２００）に対してどれだけのセキュリティを付加するかについての尺度である。セキュリティ・レベル（３００）は、ユーザー又は別のアプリケーションから受け取ることができる。セキュリティ・レベル（３００）は、異なる方法で表現することができる。セキュリティ・レベル（３００）をどのように表現できるかについて幾つか例を挙げると以下の例が挙げられる：保護するルーチン（２２０）のパーセンテージ、保護するアプリケーションのソースコードのパーセンテージ、及び予め選択され、保護するルーチン（２２２）の倍数。
【００３２】
図２は、評価ルーチン（１１０）の動作を表す。評価ルーチン（１１０）は、ルーチン（２２０）を受け取り、該ルーチン（２２０）を評価して、評価（２６０）を生成する。評価（２６０）は、前記ルーチン（２２０）がどれだけ保護に適しているかを表す数値であってもよい。ルーチン（２２０）の複数のメトリクスを計算することに基づいて、評価ルーチン（１１０）は、評価（２６０）を生成することができる。評価ルーチン（１１０）は、ルーチン（２２０）がどれだけ保護に適しているかに従って、ルーチン（２２０）をランク付けしたランキング（２６２）を生成することができる。
【００３３】
評価ルーチン（１１０）は、少なくとも以下に基づいてルーチン（２２０）を評価することができる：ルーチン（２２０）に対して保護を付加することによって引き起こされるアプリケーション（２００）の性能低下を見積もること；予め選択されたルーチン（複数可）（２２２）用のデコイルーチンとして、ルーチン（２２０）がどれだけ良好であるかを見積もること；及びルーチン（２２０）の機能を保護することがどれだけ重要であるかを見積もること。
【００３４】
ルーチン（２２０）に対して保護を付加することによって引き起こされるアプリケーション（２００）の性能低下を見積もるために、ルーチン（２２０）用の異なる多くのメトリクスを、評価ルーチン（１１０）は計算することができる。以下の述べるものは、メトリクスの幾つかである。評価ルーチン（１１０）は、ルーチンのサイズを計算することができ、該サイズは異なる多くの方法で計算することができ、ルーチンの実行可能なバージョンの中にある指示の数、又はルーチンのソースコードの行数を含む。評価ルーチン（１１０）は、ルーチンの複雑さを計算することができ、該複雑さは、ループ（２８２）の数、ループ（２８４）上の境界条件、他のルーチン（２８６）に対するコール、及びルーチン（２２０）内の分岐の数に基づくことができ、該分岐の数については、ルーチン（２２０）内の条件文の数をカウントすることによって計算できる。評価ルーチン（１１０）は、アプリケーション（２００）のコール・ツリー（２７０）を生成することができ、又は該ツリーを生成する別のルーチンを有することができる。前記コール・ツリー（２７０）は、どのルーチン（２２０）がどこでコールされるかを表す。前記コール・ツリー（２７０）は、ルーチン（２２０）が関与するであろうアプリケーション（２００）が実行される予想量を決定するのに役立つことができる。評価ルーチン（１１０）は、コール・ツリー（２７０）中でのルーチン（２２０）の位置と、及びコール・グラフ中でルーチン（２２０）が参照されている回数とを計算することができる。例えば、もしも、ルーチン（２２０）が、アプリケーション（２００）の実行の最初の段階でコールされるだけであり、そして、ルーチン（２２０）が、他のルーチン（２２０）に対してコールを行っていないことがコール・ツリー（２７０）によって示されている場合、ルーチン（２２０）はアプリケーション（２００）の実行について大きな比重を占めるものではなく、保護を付加するための良好な候補となる可能性があるとすることができる。上記の全ては、ルーチン（２２０）に保護を付加することによって引き起こされるアプリケーション（２００）の性能低下を見積もるために使用することができる。
【００３５】
ルーチン（２２０）がとることができる１以上の異なる形態に基づいて、評価ルーチン（１１０）は、任意のメトリクスを評価することができる。例えば、評価ルーチン（１１０）は、ルーチン（２２０）のソースコードを評価することができ、又はルーチン（２２０）から生成された生成物を評価することができ、例えば、ルーチン（２２０）のソースコードから生成することができる、リンクされた又はリンクされていない、Ｐコード又は実行可能なコードが挙げられる。
【００３６】
評価ルーチン（１１０）については、ルールを設けることができ、例えば、小さいルーチンについては保護しなくとも良いというルールを設けることができ、この理由としては、該ルーチンは隠すべきところがほとんど無いか、隠すべき機能が全く無く、また、該ルーチンは、その機能をハッカーが推測するのが容易い傾向にあるからである。更に、小さいルーチンは、アプリケーションの実行中に頻繁にコールされることがしばしばあり、その結果、小さいルーチンを保護することで、アプリケーション（２００）の性能が大幅に低下する可能性がある。
【００３７】
評価ルーチン（１１０）は、アプリケーション（２００）中のルーチン（２２０）のランキング（２６２）を生成することができ、該ランキングでは、保護されるべきルーチンの適性に基づいてランク付けが行われている。各ルーチン（２２０）用に生成された評価（２６０）でソートしたルーチン（２２０）の線形リストを構築することによって、評価ルーチン（１１０）はランキング（２６２）を生成することができる。
【００３８】
評価ルーチン（１１０）は、保護するためのルーチン（２２０）を評価するために、評価基準（２３６）を使用することができる。例えば、評価（２６０）は２つの数値を含むことができる：１つは、対応するルーチン（２２０）が保護された場合の、予想される性能低下についての数値である；もう１つの数値は、対応するルーチン（２２０）の機能を保護することがどれだけ望ましいかに対応する数値である。そして、評価ルーチン（１１０）は、保護するルーチン（２２０）を評価基準（２３６）に基づいて評価することができ、該基準において、ルーチンの保護の望ましさは、評価基準（２３６）の７０％をしめ、また、アプリケーションの予想される性能低下は、評価基準（２３６）の３０％をしめる。
【００３９】
図３は、選択ルーチン（１２０）の動作を表している。選択ルーチン（１２０）は、評価（２６０）と及びセキュリティ・レベル（３００）とを受け取り、ルーチン（２２０）を選択して、被選択ルーチン（２２６）を生成する。例えば、評価（２６０）に対応するルーチン（２２０）を保護する場合、評価（２６０）は、予想される性能低下を表す数値であってもよく、そして、セキュリティ・レベル（３００）は、保護するルーチン（２２０）のパーセントであってもよい。セキュリティ・レベル（３００）を満たすまで、選択ルーチン（１２０）は、予想される性能低下が最も低いルーチン（２２０）を選択することができる。幾つかの実施形態において、選択されたルーチン（２２０）の数値がセキュリティ・レベル（３００）の要求を満たすまで、選択ルーチン（１２０）は、最も高くランク付け（２６２）されたルーチンを選択することができる。
【００４０】
図４は、保護ルーチン（１３０）の動作を表している。保護ルーチン（１３０）はルーチン（２２０）を受け取り、ルーチン（２２０）を保護して保護されたルーチン（２２４）を生成する。一実施形態において、保護ルーチン（１３０）は、ルーチン（２２０）を難読化して、難読化され且つ保護されたルーチン（２２４）を生成する。難読化については、ルーチン（２２０）の機能をハッカーがリバース・エンジニアリングすることが困難となるようにルーチン（２２０）の機能を乱雑にするための方法として公知である。幾つかの実施形態において、保護ルーチン（１３０）は予め選択されたルーチン（２２２）を受け取り、予め選択されたルーチン（２２２）を保護し、保護され且つ予め選択されたルーチン（２２３）を生成する。一実施形態において、保護ルーチン（１３０）は予め選択されたルーチン（２２２）を難読化する。そして、難読化され、保護され、且つ予め選択されたルーチン（２２３）を生成する。幾つかの実施形態において、１以上の予め選択されたルーチン（複数可）（２２２）は、別のアプリケーションによって、又は手動で開発者によってのいずれかで保護される。そして、保護され且つ予め選択されたルーチン（２２３）を生成する。アプリケーションを保護するためのシステム（１００）が実行される前に、予め選択されたルーチン（複数可）（２２２）は既に保護されていても良い。
【００４１】
図５は、性能テスター（１４０）の動作を表している。性能テスター（１４０）は、保護されたルーチン（２２４）を有さないアプリケーション（２００）を受け取り、該アプリケーション（２００）について性能テストを実施し、保護されていないときの性能測定値（２５２）を生成する。そして、性能テスター（１４０）は、保護されたルーチン（２２４）を有するアプリケーション（２００）を受け取り、該アプリケーション（２００）について性能テストを実施し、保護されているときの性能測定値（２５４）を生成する。アプリケーションを保護するためのシステム（１００）は、保護されていないときの性能測定値（２５２）を保護されているときの性能測定値（２５４）と比べることができ、そして、もしも、セキュリティ・レベル（３００）を基準とすることができる予め決められた性能低下測定値を超えて、アプリケーションの性能が低下した場合には、システム（１００）は、保護する新たなルーチンを決定し、再度性能テストを実行することができる。幾つかの実施形態において、性能テスター（１４０）は、予め決められた量を超えてアプリケーション（２００）の性能を低下させたルーチン（２２０）を特定することができ、そして、これらのルーチンが、選択（２６０）及び／又はランキング（２６２）内に含まれないように排除することができ、その結果、選択ルーチン（１２０）は、これらのルーチンを保護対象として選択しなくなるだろう。
【００４２】
図６は、アプリケーションを保護するための方法を表している（６００）。以下の議論では、図１〜５についても参照する。前記方法は、６１０で開始され、アプリケーション用のセキュリティ・レベルを受け取ることに応答して、アプリケーションの複数の各ルーチンを評価し、アプリケーションの前記複数の各ルーチンに関する評価を生成する。例えば、アプリケーションを保護するためのシステム（１００）は、２０パーセントのルーチンを保護すべき旨を表すセキュリティ・レベル（３００）を受け取ることができる。評価ルーチン（１１０）は、アプリケーション（２００）のルーチン（２２０）を評価することができる。
【００４３】
続いて、前記方法は、６２０において、前記評価と、及び前記受け取ったセキュリティ・レベルとに基づいて、保護する前記複数のルーチンのうち幾つかを選択する。例えば、選択ルーチン（１２０）は、評価ルーチン（１１０）によって生成されたルーチンの評価に基づいて、及びセキュリティ・レベル（３００）に基づいて、保護するルーチンを選択することができる。例えば、選択されたルーチン（２２０）の幾つがセキュリティ・レベル（３００）の要求を満たすまで、選択ルーチン（１２０）は、最も高くランク付け（２６２）されたルーチンを選択することができる。
【００４４】
続いて、前記方法は、６３０において、前記複数のルーチンのうち選択された幾つかを保護する。例えば、保護ルーチン（１３０）は、各被選択ルーチン（２２６）を受け取ることができ、及び、保護されたルーチン（２２４）を生成するために被選択ルーチン（２２６）を難読化することができる。
【００４５】
前記方法は、終了又は任意で継続のいずれかを行うことができ、継続する場合には、６４０において、保護されていない前記複数のルーチンのうち前記選択された幾つかを用いてアプリケーションの性能テストを行い、保護されていないときの性能測定値を生成する。例えば、性能テスター（１４０）は、保護されたルーチン（２２４）を有さないアプリケーション（２００）の性能テストを行い、保護されていないときの性能測定値（２５２）を生成することができる。
【００４６】
続いて、前記方法は、６５０において、保護された前記複数のルーチンのうち前記選択された幾つかを用いてアプリケーションの性能テストを行い、保護されているときの性能測定値を生成することができる。例えば、性能テスター（１４０）は、保護されたルーチン（２２４）を有するアプリケーション（２００）の性能テストを行い、保護されているときの性能測定値（２５４）を生成することができる。
【００４７】
続いて、前記方法は、６７０において、保護されているときの性能測定値が、予め決められた性能低下測定値を下回って、保護されていないときの性能測定値よりも低下しているかどうかを、比較により示すことができる。例えば、アプリケーションを保護するためのシステム（１００）は、予め決められた性能低下測定値を下回って、保護されているときの性能測定値が保護されていないときの性能測定値よりも低下していることが、比較することにより示されているかどうかを決定することができ、この場合には、判定は「ＹＥＳ」となり、前記方法は、ステップ（６２０）へ戻り、ルーチンを再度選択する。評価を再実施するのは時間を消費する可能性があるため、前記方法は、ステップ（６１０）ではなくステップ（６２０）に戻ってもよい。もしも、判定が「ＮＯ」、即ち、予め決められた性能低下を下回って、保護されているときの性能測定値が保護されていないときの性能測定値よりも低下しないことが、前記比較により示された場合には、前記方法を終了することができる。
【００４８】
図７は、コンピュータシステム（７００）を表しており、該システムは、「ファブリック」通信による通信内に、プロセッサ（７０２）、メモリ・システム（７０４）、及び１以上の入力／出力（Ｉ／Ｏ）装置（７０６）を含む。通信ファブリックは、種々の方法で実装することができ、図７に示すように、１以上のコンピュータバス（７０８，７１０）及び／又はブリッジデバイス（７１２）を含むことができる。Ｉ／Ｏ装置（７０６）は、ネットワーク・アダプタ及び／又はマス・ストレージ・デバイスを含むことができる。図１及び図７を参照されたい。コンピュータシステム（７００）は、前記アプリケーションを保護するためのシステム（１００）に従った方法を実行することができ、Ｉ／Ｏ装置（７０６）を介してセキュリティ・レベル（３００）を受け取ることができる。例えば、ユーザーは、コンピュータ・キーボードからセキュリティ・レベル（３００）を入力することができる。前記アプリケーションを保護するためのシステム（２００）は、複数のモジュール及び／又はルーチンを含むことができ、これらは、通信ファブリックを介してアクセス可能なメモリ・システム（７０４）又はマス・ストレージ・デバイス（７０６）上に、ローカル又はリモートで存在することができる。例えば、前記モジュール及び／又はルーチンは、プロセッサ（７０２）と同一の空間内にハードディスクがあるように、ローカルであってもよく、或いは、ハードディスクがサービスセンター内にリモートに位置しているように、メモリ・システム内等にリモートで位置してもよい。アプリケーション（２００）は、メモリ・システム（７０４）又はマス・ストレージ・デバイス（７０６）内に記憶することができ、これらについてもローカル又はリモートのいずれかであってもよい。アプリケーションを保護するためのシステム（２００）は、ユーザーからの入力を受け取ることができ、Ｉ／Ｏ装置（７０６）上に出力を表示することができ、該デバイスとしては、キーボード、マウス、ディスプレイ等を含めることができる。通信ファブリックは、インターネット及びＬＡＮを含む数多くのネットワークと通信されてもよい。
【００４９】
本明細書に開示した実施形態に関連して記載されたモジュール又はルーチンは、異なる数のモジュール又はルーチンを用いて実装することができ、本明細書に記載された機能については、更に多くの又は更に少ないモジュール又はルーチンの間で分割される。更に言えば、前記モジュール又はルーチンは、ローカル又はリモートいずれかに存在してもよく、上述の機能を実装するために、リモート又はローカルいずれかでのコールを行うことができる。
【００５０】
本明細書に開示した実施形態に関連して記載された、様々な例示的ルーチン又は例示的モジュール、及び例示的回路については、以下の物を用いて実装又は実行することができる：汎用目的プロセッサ、デジタル・シグナル・プロセッサ（ＤＳＰ）、特定用途向けＩＣ（ＡＳＩＣ）、現場でプログラム可能なゲートアレイ（ＦＰＧＡ）、若しくは他のプログラム制御可能な論理デバイス、ディスクリート・ゲート（ｄｉｓｃｒｅｔｅ  ｇａｔｅ）、若しくはトランジスター・ロジック（ｔｒａｎｓｉｓｔｏｒ  ｌｏｇｉｃ）、ディスクリート・ハードウェア・コンポーネント、又は、本明細書に記載した機能を実行するために設計されたこれらの任意の組合せ。汎用目的プロセッサは、マイクロプロセッサであってもよいが、別の形態では、前記プロセッサは、任意の従来のプロセッサ、コントローラー、マイクロコントローラー、又はステート・マシンであってもよい。また、プロセッサは、コンピューティングデバイスの組合せとして実装することができ、例えば、１つのＤＳＰ及び１つのマイクロプロセッサの組合せ、複数のマイクロプロセッサの組合せ、ＤＳＰコアと接続された１以上のマイクロプロセッサの組合せ、又は任意の他のこうした設計の組合せであってもよい。
【００５１】
更に、本明細書に開示した態様に関連して記載された方法又はアルゴリズムのステップ及び／又は動作は、ハードウェア内、プロセッサによって実行されるソフトウェアモジュール内、又はこれら２つの組み合せ内で直接実施することができる。ソフトウェアモジュールは、以下の物の中に存在することができる：ＲＡＭメモリ、フラッシュ・メモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブル・ディスク、ＣＤ−ＲＯＭ、又は公知の記憶媒体の任意の他の形態。例示的な記憶媒体は、プロセッサと連結することができ、プロセッサは、該記憶媒体から情報を読み取ることができ、そして、該記憶媒体へ情報を書き込むことができる。或いは、記憶媒体は、プロセッサに組み込まれても良い。更に、幾つかの態様において、プロセッサ及び記憶媒体は、ＡＳＩＣ内に存在してもよい。更に言えば、ＡＳＩＣは、ユーザー端末内に存在しても良い。或いは、プロセッサ及び記憶媒体は、ユーザー端末内にある個別のコンポーネントとして存在しても良い。更に言えば、幾つかの態様において、方法又はアルゴリズムのステップ及び／又は動作は、機械読取可能媒体及び／又はコンピュータ読取可能媒体上での単一の指示、又は任意の組合せの指示、又は一組の指示として存在してもよく、該媒体は物理的な形態であってもよい。
【００５２】
本発明の好ましい実施形態に関連して記述してきたが、添付した特許請求の範囲で規定されるように本発明の思想及び発明の範囲から逸脱することなく、具体的に記載されていない付加、削除、改変、及び置換を行うことができることを当業者は理解するであろう。
【図１】
2012221510.tif 000003
【図２】
2012221510.tif 000004
【図３】
2012221510.tif 000005
【図４】
2012221510.tif 000006
【図５】
2012221510.tif 000007
【図６】
2012221510.tif 000008
【図７】
2012221510.tif 000009
【外国語明細書】
2012221510000001.pdf