(57)【要約】【課題】  コンピュータシステムにおけるプロセスの不正アクセスを防止する。【解決手段】  コンピュータシステムにおけるＡＰＩ処理ルーチンの実行を許可及び遮断するＡＰＩフックルーチンを設ける段階と；コンピュータシステムで実行中のプロセスが使用するＡＰＩをフック処理する段階と；フック処理したＡＰＩに対してＡＰＩフックルーチンを実行し，ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階と；ＡＰＩ処理ルーチンの実行を許可する場合には，ＡＰＩ処理ルーチンを実行する段階と；を含む不正アクセス防止方法を提供する。【選択図】    図１
2005166051.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムにおけるプロセスの不正アクセス防止方法であって：
前記コンピュータシステムにおけるＡＰＩ処理ルーチンの実行を許可及び遮断するＡＰＩフックルーチンを設ける段階と；
前記コンピュータシステムで実行中のプロセスが使用するＡＰＩをフック処理する段階と；
前記フック処理したＡＰＩに対して前記ＡＰＩフックルーチンを実行し，前記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階と；
前記ＡＰＩ処理ルーチンの実行を許可する場合には，前記ＡＰＩ処理ルーチンを実行する段階と；
を含むことを特徴とするプロセスの不正アクセス防止方法。
【請求項２】
前記コンピュータシステムで実行中のプロセスのメモリに前記ＡＰＩフックルーチンを挿入する段階を含むことを特徴とする請求項１に記載のプロセスの不正アクセス防止方法。
【請求項３】
前記ＡＰＩフックルーチンを挿入する段階は，
前記ＡＰＩフックルーチンを挿入する挿入対象プロセスのプロセスＩＤに基づいて，前記挿入対象プロセスを該プロセスに対する全ての権限を伴って開き，前記挿入対象プロセスのハンドルを格納する段階と；
前記挿入対象プロセスのハンドルに基づいて前記挿入対象プロセスにメモリを割り当てる段階と；
前記割り当てられたメモリに前記ＡＰＩフックルーチンを記録する段階と；
前記ＡＰＩフックルーチンの開始アドレスに基づいてスレッドを生成する段階と；
を含むことを特徴とする請求項２に記載のプロセスの不正アクセス防止方法。
【請求項４】
前記ＡＰＩフックルーチンを挿入する段階は，前記ＡＰＩ処理ルーチンの開始部分を保存した後，前記挿入されたＡＰＩフックルーチンへのジャンプ命令を前記ＡＰＩ処理ルーチンの開始部分に上書きすることにより行われることを特徴とする請求項３に記載のプロセスの不正アクセス防止方法。
【請求項５】
前記ＡＰＩフックルーチンを実行する段階は，
前記保存されたＡＰＩ処理ルーチンの開始部分の機械語コードを用いて命令語の長さを計算する段階と；
前記計算された命令語の長さに応じて，前記保存されたＡＰＩ処理ルーチンの開始部分の命令を実行した後，前記ＡＰＩ処理ルーチンにジャンプして残りの命令を実行する段階と；
を含むことを特徴とする請求項４に記載のプロセスの不正アクセス防止方法。
【請求項６】
前記ＡＰＩフックルーチンを実行する段階は，
前記フックしたＡＰＩを使用しようとするプロセスを検出する段階と；
前記プロセスの前記ＡＰＩ使用権限，前記ＡＰＩの対象プロセス及び前記ＡＰＩの処理の種類を把握する段階と；
前記プロセスの前記ＡＰＩ使用権限，前記ＡＰＩの対象プロセス及び前記ＡＰＩの処理の種類に応じて，前記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階と；
を含むことを特徴とする請求項１から５のいずれかに記載のプロセスの不正アクセス防止方法。
【請求項７】
前記プロセスの前記ＡＰＩ使用権限を把握する段階は，コンテキストのプロセスＩＤを抽出して前記プロセスを把握することを特徴とする請求項６に記載のプロセスの不正アクセス防止方法。
【請求項８】
前記ＡＰＩの対象プロセス及び前記ＡＰＩの処理の種類を把握する段階は，前記ＡＰＩの各パラメータを分析することによって行われることを特徴とする請求項６または７に記載のプロセスの不正アクセス防止方法。
【請求項９】
前記ＡＰＩが前記対象プロセスのハンドル情報のみを含む場合に，前記ＡＰＩの対象プロセスを把握する段階は，
前記プロセスのプロセスデータベースに格納されたハンドルテーブルを調査し，前記対象プロセスのハンドルが示すプロセスデータベースを取得する段階と；
前記取得したプロセスデータベースに予め定められている値を排他的論理和演算して前記対象プロセスのプロセスＩＤを得る段階と；
を含むことを特徴とする請求項８に記載のプロセスの不正アクセス防止方法。
【請求項１０】
前記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，
前記プロセスが前記ＡＰＩの使用権限を持つプロセスであれば，前記ＡＰＩ処理ルーチンの実行を許可することを特徴とする請求項６から９のいずれかに記載のプロセスの不正アクセス防止方法。
【請求項１１】
前記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，
前記プロセスが前記ＡＰＩの使用権限を持つプロセスであり，かつ，前記ＡＰＩの対象プロセスが該プロセスであれば，前記ＡＰＩ処理ルーチンの実行を遮断することを特徴とする請求項６から１０のいずれかに記載のプロセスの不正アクセス防止方法。
【請求項１２】
前記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，
前記プロセスが前記ＡＰＩの使用権限を持つプロセスでなく，かつ，前記ＡＰＩの対象プロセスがゲームプロセス又は保護プロセスでなければ，前記ＡＰＩ処理ルーチンの実行を許可することを特徴とする請求項６から１１のいずれかに記載のプロセスの不正アクセス防止方法。
【請求項１３】
前記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，
前記プロセスが前記ＡＰＩの使用権限を持つプロセスでなく，かつ，前記ＡＰＩ対象プロセスがゲームプロセス又は保護プロセスであり，かつ，前記ＡＰＩの処理の種類がメモリ操作及びメッセージ伝達でなければ，前記ＡＰＩ処理ルーチンの実行を許可することを特徴とする請求項６から１２のいずれかに記載のプロセスの不正アクセス防止方法。
【請求項１４】
前記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，
前記プロセスが前記ＡＰＩの使用権限を持つプロセスでなく，かつ，前記ＡＰＩの対象プロセスがゲームプロセス又は保護プロセスであり，かつ，前記ＡＰＩの処理の種類がメモリ操作又はメッセージ伝達であれば，前記ＡＰＩ処理ルーチンの実行を遮断することを特徴とする請求項６から１３のいずれかに記載のプロセスの不正アクセス防止方法。
【請求項１５】
コンピュータをして，
ＡＰＩ処理ルーチンの実行を許可又は遮断するＡＰＩフックルーチンを生成する段階と；
実行中のプロセスが使用するＡＰＩをフックする段階と；
前記フックしたＡＰＩに対して前記ＡＰＩフックルーチンを実行し，前記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階と；
前記ＡＰＩ処理ルーチンの実行が許可されると，前記ＡＰＩ処理ルーチンを実行する段階と；
を含むプロセスの不正アクセス防止方法を実行せしめるコンピュータプログラムを記録した，コンピュータで読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，コンピュータにおけるプロセスの不正アクセス防止方法に関し，より詳しくは，アプリケーションプログラミングインタフェース（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ，以下ＡＰＩと称する。）フック処理の技術を用いて，ハッキングツールがオンラインゲームへ不正にアクセスすることを防止する，オンラインゲーム保護のための，プロセスへの不正アクセス及び操作を遮断するための方法に関する。
【背景技術】
【０００２】
近年，超高速インターネットの普及に伴い，オンラインゲームのユーザ人口が急速に増加し，数多くのオンラインゲームが開発されたが，未だゲームのセキュリティに対する認識と概念が不足している。一般的なハッキング行為（以後，ハッキング行為を単にハッキングとも称する。）は，特定のコンピュータの管理者権限を取得することや特定のコンピュータに接続してデータを操作することなどを意味するが，ゲームにおけるハッキングは，特定ゲームクライアントのファイルやメモリなどを操作することを意味する。以後，ハッキングのためのプログラム，すなわち，ゲームクライアントのファイルやメモリなどを操作するプログラムを，ハックと称する。
【０００３】
ゲームにおけるハッキングは，ハックを用いて，ゲームを構成する各プロセスが使用するメモリを操作し，ゲームに関する特定データ（例えば，ゲームにおける主人公の能力値や体力など）を変えることである。パッケージゲームにおけるハックの使用は他人に被害を与えないが，オンラインゲームにおけるハックの使用は，ユーザ間のバランスの崩れやゲームサーバへの加重負荷などといった問題を引き起こす場合がある。換言すると，オンラインゲームにおいて一部のユーザが非正常的な方法で利得を得ながらゲームを行うと，他のユーザとの均衡が崩れてしまい，場合によってはオンラインゲーム全体のバランスが崩れ，ゲームサーバに過負荷が発生する。
【０００４】
したがって，オンラインゲームでハッキングができないようにセキュリティを強化してゲームを保護しなければならないが，オンラインゲームでのセキュリティは，他の場合とは異なり，ユーザが自らクラック（ｃｒａｃｋ）を望むため，ゲームの保護に難しさが伴う。すなわち，ユーザはオンラインゲームの保護機能を取り除いてハッキングを望むが，オンラインゲームにおけるセキュリティはこのようなユーザを対象として行わなければならない。これはまるでウィルスに感染したくてワクチンプログラムを終了させるか或いは除去しようとするユーザを対象としてコンピュータの保護を行わなければならないという状況と同様である。
【０００５】
このような場合，ゲーム開発会社でゲームクライアント自体に保護コードを含めさせることが理想的であるが，ゲーム会社が直接セキュリティにまで気を使うには多くの時間やコストがかかる。また，引き続きアップデートされる数多くのハックに対抗するために，毎回ゲームクライアントをアップデートすることも困難である。また，一部のクラッカーがゲームクライアントをリーバスエンジニアリング技術を用いて分析した後，クライアント内の保護コードをスキップするように操作すれば，ゲームクライントに含まれた保護コード自体が無駄になるおそれもある。
【０００６】
したがって，ハッキングからゲームを保護するためのセキュリティソリューションに対する必要性が増している。
【０００７】
従来のオンラインゲームのセキュリティソリューションとしては，本出願人によって開発されたファインドハックと，アンチョルス研究所（ＡｈｎＬａｂ，Ｉｎｃ．）によって開発されたＭＦＧＳがある。その両製品はいずれも，ウィルスワクチン（ａｎｔｉｖｉｒｕｓ）エンジンを用いて単にハッキングツールのパターンを追加し周期的にプロセスを検査して，登録されたハッキングパターンと一致するプログラム（ハック）があれば強制終了させる方法を採用している。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし，この種のゲーム保護方法は，次から次へと登場する数多くの新しいハッキングツールを全てパターンに追加しなければならないという問題点や，既存のハッキングツールもさらにコンパイルするか或いは実行ファイルを圧縮すればプログラムのパターンが変形されるため，それ以上検出できないという問題点などがある。
【０００９】
また，オンラインゲームの保護機能を停止させた後にハッキングツールを使用することができるため，ユーザはオンラインゲームの保護プログラムを強制終了させたり，保護機能を一時停止させたり，保護プログラム自体をメモリハッキングして無力化させたりもする。従来の方法は，このようなゲーム保護プログラム自身に対する保護が全く行われないという問題点がある。
【００１０】
そこで，本発明は，このような問題に鑑みてなされたもので，その目的とするところは，ＡＰＩフック処理技術を用いて，ハッキングツールによるゲームプロセスへの不正アクセス及び保護プログラムを無力化させるアクセスを遮断する，オンラインゲームクライアント保護のためのプロセスの不正アクセス防止方法を提供することにある。
【課題を解決するための手段】
【００１１】
上記課題を解決するために，本発明のある観点によれば，コンピュータシステムにおけるプロセスの不正アクセス防止方法であって：コンピュータシステムにおけるＡＰＩ処理ルーチンの実行を許可及び遮断するＡＰＩフックルーチンを設ける段階と；コンピュータシステムで実行中のプロセスが使用するＡＰＩをフック処理する段階と；フック処理したＡＰＩに対してＡＰＩフックルーチンを実行し，ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階と；ＡＰＩ処理ルーチンの実行を許可する場合には，ＡＰＩ処理ルーチンを実行する段階と；を含むことを特徴とするプロセスの不正アクセス防止方法が提供される。
【００１２】
上記プロセスの不正アクセス防止方法は，上記コンピュータシステムで実行中のプロセスのメモリにＡＰＩフックルーチンを挿入する段階を含んでもよい。
【００１３】
上記ＡＰＩフックルーチンを挿入する段階は，ＡＰＩフックルーチンを挿入する挿入対象プロセスのプロセスＩＤに基づいて，挿入対象プロセスを該プロセスに対する全ての権限を伴って開き，挿入対象プロセスのハンドルを格納する段階と；挿入対象プロセスのハンドルに基づいて挿入対象プロセスに読み取り／書き込み可能なメモリを割り当てる段階と；割り当てられたメモリにＡＰＩフックルーチンを記録する段階と；ＡＰＩフックルーチンの開始アドレスに基づいてスレッドを生成する段階と；を含んでもよい。
【００１４】
上記ＡＰＩフックルーチンを挿入する段階は，ＡＰＩ処理ルーチンの開始部分を保存した後，挿入されたＡＰＩフックルーチンへのジャンプ命令をＡＰＩ処理ルーチンの開始部分に上書きすることにより行われてもよい。なお，ＡＰＩ処理ルーチンの開始部分とは，ＡＰＩ処理ルーチンに含まれる最初の命令であってもよい。
【００１５】
上記ＡＰＩフックルーチンを実行する段階は，保存されたＡＰＩ処理ルーチンの開始部分の機械語コードを用いて命令語の長さを計算する段階と；計算された命令語の長さに応じて，保存されたＡＰＩ処理ルーチンの開始部分の命令を実行した後，ＡＰＩ処理ルーチンにジャンプして残りの命令を実行する段階と；を含でもよい。
【００１６】
上記ＡＰＩフックルーチンを実行する段階は，フックしたＡＰＩを使用しようとするプロセスを検出する段階と；プロセスのＡＰＩ使用権限，ＡＰＩの対象プロセス及びＡＰＩの処理の種類を把握する段階と；プロセスのＡＰＩ使用権限，ＡＰＩの対象プロセス及びＡＰＩの処理の種類に応じて，ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階と；を含んでもよい。
【００１７】
上記プロセスのＡＰＩ使用権限を把握する段階は，コンテキストのプロセスＩＤを抽出してプロセスを把握することを特徴としてもよい。
【００１８】
上記ＡＰＩの対象プロセス及びＡＰＩの処理の種類を把握する段階は，ＡＰＩの各パラメータを分析することによって行われてもよい。
【００１９】
上記ＡＰＩが対象プロセスのハンドル情報のみを含む場合に，上記ＡＰＩの対象プロセスを把握する段階は，プロセスのプロセスデータベースに格納されたハンドルテーブルを調査し，対象プロセスのハンドルが示すプロセスデータベースを取得する段階と；取得したプロセスデータベースに予め定められている値を排他的論理和演算して対象プロセスのプロセスＩＤを得る段階と；を含んでもよい。
【００２０】
上記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，プロセスがＡＰＩの使用権限を持つプロセスであれば，ＡＰＩ処理ルーチンの実行を許可するようにしてもよい。
【００２１】
上記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，プロセスがＡＰＩの使用権限を持つプロセスであり，かつ，ＡＰＩの対象プロセスが該プロセスであれば，ＡＰＩ処理ルーチンの実行を遮断するようにしてもよい。
【００２２】
上記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，プロセスがＡＰＩの使用権限を持つプロセスでなく，かつ，ＡＰＩの対象プロセスがゲームプロセス又は保護プロセスでなければ，ＡＰＩ処理ルーチンの実行を許可するようにしてもよい。
【００２３】
上記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，プロセスがＡＰＩの使用権限を持つプロセスでなく，かつ，ＡＰＩ対象プロセスがゲームプロセス又は保護プロセスであり，かつ，ＡＰＩの処理の種類がメモリ操作及びメッセージ伝達でなければ，ＡＰＩ処理ルーチンの実行を許可するようにしてもよい。
【００２４】
上記ＡＰＩ処理ルーチンの実行を許可するか否かを判断する段階は，プロセスがＡＰＩの使用権限を持つプロセスでなく，かつ，ＡＰＩの対象プロセスがゲームプロセス又は保護プロセスであり，かつ，ＡＰＩの処理の種類がメモリ操作又はメッセージ伝達であれば，ＡＰＩ処理ルーチンの実行を遮断するようにしてもよい。
【００２５】
また，コンピュータをして上記のプロセスの不正アクセス防止方法を実行せしめるコンピュータプログラムが記録された，コンピュータで読み取り可能な記録媒体も提供される。
【発明の効果】
【００２６】
以上説明したように本発明によれば，特定のＡＰＩを使用するハッキングツールに対する根本的な遮断が可能なので，オンラインゲームサーバを保護することができるという利点がある。また，オンラインゲーム内でユーザ間の正当なプレーと善意の競争を可能とし，究極的に健全なオンラインゲーム文化の造成に寄与することができるという利点がある。
【発明を実施するための最良の形態】
【００２７】
以下に添付図面を参照しながら，本発明の好適な実施の形態について詳細に説明する。なお，本明細書及び図面において，実質的に同一の機能構成を有する構成要素については，同一の符号を付することにより重複説明を省略する。
【００２８】
本発明の一実施形態を説明するに前に，本明細書で使用される用語について簡単に説明する。
【００２９】
ハック（Ｈａｃｋ）：特定のゲームクライアントのファイルやメモリなどを操作するプログラム。
【００３０】
パッチ（Ｐａｔｃｈ）：プログラムの特定部分の内容を他のものに変える処理。ハックがゲームクライアントの特定メモリ部分を変える処理を意味することもあるが，この際，ハックはコード又はデータを操作して，自分の所望の通りにゲームクライアントの実行を変えることができる。
【００３１】
リーバスエンジニアリング（Ｒｅｖｅｒｓｅ  Ｅｎｇｉｎｅｅｒｉｎｇ）：実行ファイル（例えばｅｘｅ，ｄｌｌ）を操作してプログラムの流れを変えること。リーバスエンジニアリング技術を用いると，実行ファイルの機械語コードをアセンブリに変えてコードを分析した後，必要な箇所を修正してさらに実行ファイルに作ることができる。
【００３２】
オートマウス：自動的にマウスの入力をゲームに伝達してユーザなしでも自動戦闘を可能とすることができる。
【００３３】
マクロ（Ｍａｃｒｏ）：オートマウスのより発展した形であって，プログラムを組むように所望のキーボード又はマウスの入力パターンを作成しておき，自動的にそのパターンによる入力をゲームに伝達して繰り返し行うようにすることができる。
【００３４】
ゲームハック：代表的なゲームハックは，主にゲームプロセスのメモリを操作して能力値や体力などの特定データを変える。ゲームハックは主にゲームプロセスのメモリを操作し，オートマウスはマウス又はキーボードイベントを発生させてゲームプロセスに伝達する形である。
【００３５】
このようなゲームハックに関わるメモリアクセス関連ＡＰＩとしては，ＲｅａｄＰｒｏｃｅｓｓＭｅｍｏｒｙ，ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙ，ＯｐｅｎＰｒｏｃｅｓｓなどがあり，オートマウスに関わるイベント発生ＡＰＩとしては，ＳｅｎｄＩｎｐｕｔ，ＳｅｎｄＭｅｓｓａｇｅ，ＰｏｓｔＭｅｓｓａｇｅ，ｋｅｙｂｄ＿ｅｖｅｎｔ，ｍｏｕｓｅ＿ｅｖｅｎｔなどがある。すなわち，ハッキングツールは，ＯｐｅｎＰｒｏｃｅｓｓ，ＲｅａｄＰｒｏｃｅｓｓＭｅｍｏｒｙ，ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙ，ＳｅｎｄＩｎｐｕｔ，ＳｅｎｄＭｅｓｓａｇｅ，ＰｏｓｔＭｅｓｓａｇｅ，Ｋｅｙｂｄ＿ｅｖｅｎｔ，ｍｏｕｓｅ＿ｅｖｅｎｔなどのＡＰＩを用いてゲームプロセスにアクセスしてゲームハックとオートマウス機能を実行する。
【００３６】
本実施形態では，ハッキングツールがゲームハック又はオートマウスを実行するためにゲームプロセスにアクセスするときに使用する上記ＡＰＩをフック（Ｈｏｏｋ）処理して，該当ＡＰＩの対象がゲームであるか否かと，不正アクセスであるか否かを判断し，該当ＡＰＩルーチンを実行させるか或いは実行できないように遮断する。ここで，ＡＰＩフック処理とは，プログラムの実行命令を，その実行命令が対象のプログラムに渡る前に取得して，使用されている命令語やパラメータを見たり操作したりする技術をいう。
【００３７】
このために，本出願人は，各オペレーションシステム（以下，ＯＳと称する。）別にＡＰＩフックエンジンを開発し，フックされた実行命令の引数（Ａｒｇｕｍｅｎｔ）又はパラメータ（ｐａｒａｍｅｔｅｒ）を分析して，該当実行命令がゲームプロセスへの不正アクセスであるか否かを判断する技術を開発した。
【００３８】
図１は，本発明の一実施形態に係るＷｉｎｄｏｗｓ（登録商標）ＯＳ環境でＡＰＩフックエンジンを適用した例を示すブロック図である。
【００３９】
ユーザがＯＳを駆動してアプリケーションプログラムを実行させると，該当アプリケーションプログラムを実行するためのプロセスがシステム１００で行われる。
【００４０】
本実施形態では，システム１００で実行されるプロセスの種類を，許可プロセス１１０と一般プロセス１２０に区分する。許可プロセス１１０は，ＡＰＩによる処理の実行が遮断された場合，コンピュータシステムが停止したり不安定になる恐れのあるプロセスであって，システムプロセス，ゲームプロセス，保護プロセスが含まれる。一般プロセス１２０は，許可プロセス１１０を除いた残りの全てのプロセスであって，ＡＰＩフックエンジン１３０が挿入されてＡＰＩフックエンジン１３０によって監視されるプロセスである。ＡＰＩフックエンジン１３０は，フックするＡＰＩ命令にそれぞれマッピングされたＡＰＩフックルーチンを含む。ゲームハッキングプロセスは一般プロセスとして区分されるため，ＡＰＩフックエンジンが挿入され，ゲームハッキングプロセスが実行されると，ＡＰＩフックエンジンによって監視される。
【００４１】
許可プロセス１１０がＡＰＩ命令を使用すると，システム１００は，該当ＡＰＩ命令に対するＡＰＩ処理ルーチンを含むシステムＤＬＬ（ｄｙｎａｍｉｃ  ｌｉｎｋｉｎｇ  ｌｉｂｒａｒｙ）１４０を呼び出し，そのＡＰＩ処理ルーチンの実行結果値を許可プロセス１１０に伝達する。一方，一般プロセス１１０がＡＰＩ命令を使用すると，ＡＰＩフックルーチン１３０が動作する。ＡＰＩフックルーチン１３０は，該当ＡＰＩ命令の対象プロセスとアクセス権限を判断して，該当ＡＰＩ命令を許可又は遮断する。システム１００は，ＡＰＩフックルーチン１３０で許可されたＡＰＩ命令に対してシステムＤＬＬ１４０を呼び出し，システムＤＬＬ１４０から入力される実行結果値を該当一般プロセス１２０に伝達する。
【００４２】
図２は本発明の一実施形態に係るプロセスの不正アクセス及び操作遮断方法を示す動作フローチャートである。
【００４３】
まず，システム１００は，ＡＰＩフックエンジンを入力されて（Ｓ２１０），実行中の許可プロセスを除いた一般プロセスにＡＰＩフックエンジンを挿入する（Ｓ２２０）。その後，一般プロセスがＡＰＩを使用すると，そのＡＰＩをフックして，ＡＰＩフックルーチンを実行する（Ｓ２３０）。ＡＰＩフックルーチンを実行した結果，該当ＡＰＩの処理が許可されると（Ｓ２４０），該当ＡＰＩ処理ルーチンを実行し（Ｓ２５０），ＡＰＩ処理結果を該当の一般プロセスに伝達する（Ｓ２６０）。ＡＰＩフックルーチンを実行した結果，該当ＡＰＩの処理が許可されなければ（Ｓ２４０），該当ＡＰＩ処理ルーチンを実行せずに，そのＡＰＩの処理結果を該当の一般プロセスに伝達する（Ｓ２６０）。
【００４４】
ここで，ＡＰＩフックエンジンがフック処理するＡＰＩには，上述したように，ゲームハックに使用されるＲｅａｄＰｒｏｃｅｓｓＭｅｍｏｒｙ，ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙと，オートマウスに使用されるｋｅｙｂｄ＿ｅｖｅｎｔ，ｍｏｕｓｅ＿ｅｖｅｎｔなどが含まれる。
【００４５】
次に，図２の各段階について詳細に説明する。段階Ｓ２１０で入力されたＡＰＩフックエンジンは，フックする各ＡＰＩに対するＡＰＩフックルーチンを有する。例えば，ＯｐｅｎＰｒｏｃｅｓｓ  ＡＰＩとマッピングされたＡＰＩフックルーチンがＨｏｏｋｅｄＯｐｅｎＰｒｏｃｅｓｓであると仮定するとき，プロセスがＯｐｅｎＰｒｏｃｅｓｓ  ＡＰＩを使用すると，該当ＯｐｅｎＰｒｏｃｅｓｓ  ＡＰＩが呼び出される前にＨｏｏｋｅｄＯｐｅｎＰｒｏｃｅｓｓが呼び出されるようにする。このＨｏｏｋｅｄＯｐｅｎＰｒｏｃｅｓｓは，各引数とパラメータ情報を分析して，該当ＡＰＩ処理ルーチンを実行するか遮断するかを判断する。
【００４６】
各ＡＰＩフックルーチンの実行過程は，段階Ｓ２３０についての説明で後述する。
【００４７】
段階Ｓ２２０は，実行中のプロセスの中でも，ＡＰＩフックエンジンを挿入すべき挿入対象プロセスにＡＰＩフックエンジンを挿入する段階である。図３はこのＡＰＩフックエンジン挿入サブルーチンを示す詳細な流れ図である。Ｗｉｎｄｏｗｓ（登録商標）ＯＳでは，各プロセスが自分に割り当てられたメモリ領域でのみコードを実行することができるため，挿入対象プロセスにＡＰＩフックエンジンを挿入する作業が必要である。ここで，挿入対象プロセスには，ＡＰＩフックエンジンが挿入されていない状態で実行中である一般プロセスが含まれる。
【００４８】
Ｗｉｎｄｏｗｓ（登録商標）９５／９８／ｍｅ系列では，全てのプロセスが共有するメモリにＡＰＩフックルーチンを挿入すると，全てのプロセスがアクセスできるため，一つの挿入対象プロセスの共有メモリ領域にのみＡＰＩフックエンジンを挿入する。Ｗｉｎｄｏｗｓ（登録商標）ＮＴ／２０００／ＸＰ系列では，全ての挿入対象プロセスにそれぞれＡＰＩフックルーチンを挿入しなければならないので，現在実行中の全ての挿入対象プロセスのプロセスＩＤ（Ｐｒｏｃｅｓｓ  ＩＤ，以後，ＰＩＤとも称する。）を取得した後，全ての挿入対象プロセスにＡＰＩフックルーチンを挿入する。
【００４９】
次に，図３を参照して，挿入対象プロセスにＡＰＩフックエンジンを挿入する過程を説明する。まず，挿入対象プロセスを開く（Ｓ２２１）。この際，ＯｐｅｎＰｒｏｃｅｓｓ命令を使用するが，挿入対象プロセスのＰＩＤに基づいて該当挿入対象プロセスを全ての権限をもってオープンし，この際，得られたプロセスハンドルｈＰｒｏｃｅｓｓを格納する。
【００５０】
その後，段階Ｓ２２１で取得したプロセスハンドルｈＰｒｏｃｅｓｓで，その挿入対象プロセスに対して読み取り／書き込み／実行が可能なメモリを割り当てる（Ｓ２２２）。そして，割り当てられたメモリアドレスを格納する。
【００５１】
次いで，段階Ｓ２２２で割り当てられたメモリにＡＰＩフックエンジンを記録する（Ｓ２２３）。この際，ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙ命令を使用するが，段階Ｓ２２１で得られたプロセスハンドルｈＰｒｏｃｅｓｓと，段階Ｓ２２２で割り当てられたメモリのアドレスと，ＡＰＩフックエンジンのアドレス及び大きさをパラメータとして，挿入対象プロセスの割り当てられたメモリにＡＰＩフックエンジンを記録する。
【００５２】
次に，フックを実行するスレッド（Ｔｈｒｅａｄ）を生成して実行させる（Ｓ２２４）。この際，ＣｒｅａｔｅＲｅｍｏｔｅＴｈｒｅａｄ命令を使用する。プロセスハンドルｈＰｒｏｃｅｓｓに記録されたＡＰＩフックエンジンの開始アドレスのスレッドを生成して実行させ，生成されたスレッドハンドルｈＴｈｒｅａｄとスレッドＩＤを格納する。段階Ｓ２２２で割り当てられたメモリ領域の最前部にはフックを実行するコードがあるので，生成されたスレッドによってＡＰＩフック処理が行われる。その後，挿入対象プロセスでフックされたＡＰＩは，ＡＰＩフックルーチンを経由する。
【００５３】
図４はＡＰＩフックエンジンが挿入されたプロセスのメモリを示す構造図である。図４において，（ａ）は段階Ｓ２２２で割り当てられたメモリの領域であり，（ｂ）と（ｃ）はＡＰＩフックエンジンであって，（ｂ）はＡＰＩフック実行コード，（ｃ）はＡＰＩフックルーチンを示す。すなわち，段階Ｓ２２２で割り当てられたメモリ領域にＡＰＩフックエンジンが挿入される。ＡＰＩフックエンジンは，ＡＰＩフック実行コードとＡＰＩフックルーチンから構成される。この際，フックスレッドの開始アドレスがＡＰＩフック実行コードなので，フックスレッドによってＡＰＩフック処理が行われる。
【００５４】
段階Ｓ２３０は，プロセスでＡＰＩをフックしてフックルーチンを実行する段階である。ＡＰＩフック方法はいろいろがあるが，本実施形態で使用した方法は，ＡＰＩ処理ルーチンの開始部分を保存した後，ＡＰＩフックルーチンへのジャンプ命令を上書き（ｏｖｅｒｗｒｉｔｅ）する方法である。すなわち，図４に示すように，システムＤＬＬ（ｄ）のＡＰＩ処理ルーチンにＡＰＩフックルーチンへのジャンプ命令を挿入し，ＡＰＩが使用されてＡＰＩ処理ルーチンが実行される際にＡＰＩフックルーチンが先に実行されるようにする。なお，ＡＰＩ処理ルーチンの開始部分とは，ＡＰＩ処理ルーチンに含まれる最初の命令である。
【００５５】
このような方法は，既に任意のプログラムが実行された状態でＡＰＩフックエンジンが挿入されても，該当プログラムがＡＰＩを呼び出すと，ＡＰＩ処理ルーチンが実行される前にＡＰＩフックルーチンが先に実行されるため，既に実行中のプログラムもＡＰＩフックの処理が可能となるという利点がある。したがって，本実施形態によれば，既に実行されているハッキングツールに対してもＡＰＩフックによる保護機能が実行されるという利点がある。
【００５６】
上記段階Ｓ２３０でＡＰＩフックルーチンが実行されると，フックされたＡＰＩを分析して，ＡＰＩ処理ルーチンを実行するか否かを判断するが，これに対する説明は後述する。
【００５７】
段階Ｓ２５０は，段階Ｓ２３０のＡＰＩフックルーチンを実行した結果，ＡＰＩの実行を許可した場合，元のＡＰＩ処理ルーチンを実行する段階であって，段階Ｓ２３０で保存されたＡＰＩ処理ルーチンの開始部分を用いて元のＡＰＩ処理ルーチンを呼び出す。保存されたＡＰＩ処理ルーチンの開始部分を機械語コードでアセンブリ（アセンブラによる電算機言語への翻訳）して命令語の長さを求め，求められた命令語の長さに応じて，保存された部分の命令語を実行する。一部のみが保存された命令の場合には，その命令の残り部分を元のＡＰＩ処理ルーチンから取得して実行する。そして，元のＡＰＩ処理ルーチンにジャンプする。
【００５８】
次に，ＡＰＩフックルーチンでＡＰＩの実行を許可するか否かを判断する過程について説明する。図５はＡＰＩフックルーチン実行サブルーチンを示す詳細なフローチャートである。
【００５９】
本実施形態に係るＡＰＩフックエンジンは，フックするＡＰＩとそれによるＡＰＩフックルーチンを連結する。すなわち，ＡＰＩフックルーチンが呼び出されると，どんなＡＰＩが呼び出されたかが分かる。したがって，ＯｐｅｎＰｒｏｃｅｓｓ，ＲｅａｄＰｒｏｃｅｓｓＭｅｍｏｒｙ，ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙなどのメモリ関連ＡＰＩが呼び出されると，それらを呼び出したプログラムはメモリを操作しようとするハッキングツールである可能性があるため，図５のＡＰＩフックルーチンを実行する。また，ＳｅｎｄＩｎｐｕｔ，ＳｅｎｄＭｅｓｓａｇｅ，ＰｏｓｔＭｅｓｓａｇｅ，ｍｏｕｓｅ＿ｅｖｅｎｔ，ｋｅｙｂｄ＿ｅｖｅｎｔなどのメッセージ関連ＡＰＩが呼び出されると，それらを呼び出したプログラムは，マウス又はキーボードメッセージを伝達しようとするオートマウス又はマクロプログラムである可能性があるため，図５のＡＰＩフックルーチンを実行する。
【００６０】
図５に示したように，まず，現在ＡＰＩを使用しようとしているプロセス，すなわちＡＰＩフックルーチンを呼び出した現在プロセス（ｃｕｒｒｅｎｔ  ｐｒｏｃｅｓｓ）の情報を得る（Ｓ２３１）。Ｗｉｎｄｏｗｓ（登録商標）では，プロセスコンテキスト（ｐｒｏｃｅｓｓ  ｃｏｎｔｅｘｔ）内でＡＰＩ呼び出しが発生する。したがって，ＧｅｔＣｕｒｒｅｎｔＰｒｏｃｅｓｓＩＤ（）命令を用いて現在のコンテキストのＰＩＤを得ることができる。このＰＩＤはＷｉｎｄｏｗｓ（登録商標）の環境内でプロセス毎に唯一の値が割り当てられる。よって，このＰＩＤが分かると，現在のプロセスを知ることができる。
【００６１】
現在プロセスが許可プロセス，すなわちゲームプロセス又は保護プロセスである場合（Ｓ２３２），該当ＡＰＩ処理を許可して実際にＡＰＩ処理ルーチンを呼び出す（Ｓ２３７）。但し，一部のハッキングツールの場合，ゲームプロセス内にハッキングツールのＤＬＬを挿入させてメモリ関連ＡＰＩを使用する場合もあるが，このような場合に備え，ゲームプロセスが自分自身のゲームプロセスを対象としてメモリ関連ＡＰＩを使用すると，該当ＡＰＩ処理を許可しないようにすることもできる。
【００６２】
一方，現在プロセスが許可プロセスでなければ（Ｓ２３２），ＡＰＩパラメータを分析して対象プロセスと処理の種類を調べる（Ｓ２３３）。対象プロセスがゲームプロセス又は保護プロセスであるか否かを判断し，対象プロセスがゲームプロセス又は保護プロセスでなければ（Ｓ２３４），該当ＡＰＩ処理を許可して実際にＡＰＩ処理ルーチンを呼び出す（Ｓ２３７）。段階Ｓ２３４で対象プロセスがゲームプロセス又は保護プロセスであれば，処理の種類を把握して，処理の種類がメモリ操作又はメッセージ伝達であれば（Ｓ２３５），該当ＡＰＩ処理を遮断する（Ｓ２３６）。一方，段階Ｓ２３５で処理の種類がメモリ操作又はメッセージ伝達でなければ（Ｓ２３５），該当ＡＰＩ処理を許可して実際にＡＰＩ処理ルーチンを呼び出す（Ｓ２３７）。すなわち，任意の一般プロセス（ハッキングツール）がゲームプロセス又は保護プロセスを対象としてメッセージ操作ＡＰＩ又はメッセージ伝達ＡＰＩを実行すると，これを不正なメッセージ操作又はメッセージ伝達と認知し，該当ＡＰＩ処理ルーチンの実行を遮断する。
【００６３】
一例として，ＯｐｅｎＰｒｏｃｅｓｓ，ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙ，ＳｅｎｄＭｅｓｓａｇｅ  ＡＰＩを分析して，不正アクセスであるか否かを判断する方法を以下に説明する。
【００６４】
ＯｐｅｎＰｒｏｃｅｓｓ  ＡＰＩには，どのような権限でプロセスを開くのかに関する情報と，開こうとする対象プロセスのＰＩＤ情報が含まれる。対象プロセスのＰＩＤがゲームプロセス又は保護プロセスのＰＩＤであれば，ゲームプロセス又は保護プロセスを開こうとする試みなので，該当ＡＰＩ処理ルーチンを遮断する。ところが，ウィルスワクチンやエクスプローラ（登録商標）などのハッキングツールではない他のプログラムにおいてもこの命令を用いて対象プロセスの情報を得ようとするため，対象プロセスをどのような権限で開くかをチェックする。すなわち，対象プロセスがゲームプロセス又は保護プロセスであっても，単にプロセスの名称又は経路情報を得ようとする場合には該当ＡＰＩ処理ルーチンの実行を許可し，そうでない場合には遮断する。
【００６５】
ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙ  ＡＰＩには，メモリに記録する対象プロセスのハンドル情報が含まれる。この対象プロセスのハンドル情報は，ＰＩＤとは異なり，プロセスを区別することが可能な唯一の値ではないので，この対象プロセスのハンドル情報をＰＩＤに変換しなければならない。
【００６６】
次に，対象プロセスのハンドル情報をＰＩＤに変換する方法を図６を参照して説明する。図６はプロセスのデータベースとハンドルのテーブルを示す構造図である。各プロセスが持っているプロセスデータベースＰＤＢ６１に格納されたハンドルテーブル（Ｈａｎｄｌｅ  Ｔａｂｌｅ）６２を調査し，対象プロセスのハンドルが指す対象プロセスのＰＤＢ６３を得る。この対象プロセスのＰＤＢ６３においてＷｉｎｄｏｗｓ（登録商標）のバージョン毎に定められた値を排他的論理和演算（ＸＯＲ）すると，その演算結果が対象プロセスのＰＩＤになる。このようにして対象プロセスのＰＩＤが得られると，対象プロセスのＰＩＤとゲームプロセス又は保護プロセスのＰＩＤとを比較して，同一であれば，該当ＡＰＩ処理ルーチンを遮断する。このようにすると，不正なメモリ操作をしようとするハッキングツールを根本的に遮断することができる。
【００６７】
また，ＳｅｎｄＭｅｓｓａｇｅ  ＡＰＩには，メッセージを伝達するウィンドウハンドル情報と，伝達しようとするメッセージの種類が含まれる。このウィンドウハンドル情報は，唯一の値なので，ゲームのウィンドウハンドルと比較して同一であれば，その対象がゲームなので遮断し，また，伝達しようとするメッセージの種類がマウス又はキーボードメッセージであれば遮断する。このようにすると，オートマウス又はマクロプログラムからゲームを根本的に保護することができる。
【００６８】
本実施形態では，本発明をＷｉｎｄｏｗｓ（登録商標）ＯＳに適用して説明したが，本発明はこれに限定されるものではない。すなわち，本発明は，いずれのＯＳにも適用可能であり，ＯＳによってはＡＰＩフックルーチンの挿入段階を省略してもよい。
【００６９】
以上，添付図面を参照しながら本発明の好適な実施形態について説明したが，本発明は係る例に限定されないことは言うまでもない。当業者であれば，特許請求の範囲に記載された範疇内において，各種の変更例または修正例に想到し得ることは明らかであり，それらについても当然に本発明の技術的範囲に属するものと了解される。
【産業上の利用可能性】
【００７０】
本発明は，コンピュータにおける不正アクセス防止方法に適用可能であり，特に，ハッキングツールがオンラインゲームへ不正にアクセスすることを防止する，オンラインゲームセキュリティのための，プロセスへの不正アクセスの防止に適用可能である。
【図面の簡単な説明】
【００７１】
【図１】本発明の実施形態に係るＷｉｎｄｏｗｓ（登録商標）ＯＳ環境でＡＰＩフックエンジンを適用した例を示すブロック図である。
【図２】同実施形態に係るプロセスの不正アクセス及び操作遮断方法を示すフローチャートである。
【図３】図２に示したＡＰＩフックエンジン挿入サブルーチンを示すフローチャートである。
【図４】ＡＰＩフックエンジンが挿入されたプロセスのメモリを示す図である。
【図５】図２に示したＡＰＩフックルーチン実行サブルーチンを示すフロ−チャートである。
【図６】プロセスデータベースとハンドルテーブルを示す構造図である。
【符号の説明】
【００７２】
１００      システム
１１０      許可プロセス
１２０      一般プロセス
１３０      ＡＰＩフックルーチン
１４０      システムＤＬＬ
【図１】
2005166051.tif 000003
【図２】
2005166051.tif 000004
【図３】
2005166051.tif 000005
【図４】
2005166051.tif 000006
【図５】
2005166051.tif 000007
【図６】
2005166051.tif 000008