日本語
中文(简体)
中文(繁体)
한국어
日本語
English
Português
Español
Русский
العربية
Indonesia
Deutsch
Français
ภาษาไทย
ホーム
ソースコードダウンロード
プログラミング関連
ウェブサイト作成リソース
書籍とチュートリアル
ウェブデザインチュートリアル
ネットワークプログラミングチュートリアル
モバイルゲーム
モバイルソフトウェア
記事
ホーム
>
プログラミング関連
>
C++ビルダー(BCB)
フックプログラムの例
C++ビルダー(BCB)
v1.0
リソースがありません
完全なフック プログラムのキーワードの例: フック、ブロッキング、サービス
これは、私が仕事に応募したときに受け取った、xx 社の「シニア Windows プログラム アナリスト」の試験問題です。具体的な要件 (つまり、プログラムの説明) は次のとおりです。
1. クライアント プログラムの名前は Client です。システムの動作を監視して、システム内に「メモ帳」プロセス (notepad.exe) または「電卓」プロセス (calc.exe) が存在することを発見した場合は、直ちにプロセスを強制終了し、イベントをデータベースに書き込みます。定期的に 1 分ごとにデータベースをチェックし、まだサーバーにアップロードされていないイベント レコードをアップロードします。
1. 対象動作環境は Windows 2000 オペレーティング システムです。
2. システムを提供するプログラムを設計してください。
3. プログラムには、削除防止、プロセスの強制終了耐性などの攻撃防止機能が備わっている必要があります。
(1) プログラムを継続的に実行し続け、他のプログラムが現在のプログラムの実行を強制的に終了しないようにします。
(2) イベントデータベースおよびメイン実行ファイルが削除されないように保護します。
(3) 異常が見つかった場合 (プロセスの終了、ファイルの削除など)、直ちにプログラムを強制的に再ロード/実行します。
(4) 異常が 3 回連続して検出された場合、デーモン プロセスはオペレーティング システムを強制的に再起動します。システムを再起動した後、プログラムが正常にロードされて実行されることを確認します。
(A) 上記の機能を実現するために、プログラムはEXE形式に限定されるものではなく、必要に応じて実装形式を自ら決定することができます。
(B) 上記機能はすべて Windows 2000 の通常の動作環境および管理者権限で実装されており、Windows のセキュリティモードや権限などを考慮する必要はありません。
4. Access、xBase、その他のファイル データベースなどの単純なデスクトップ データベースを使用してください。
5. 生成された各イベントには、イベント発生時刻とイベント処理オブジェクトという少なくとも 2 つの情報が含まれます。
イベント データは、データベースのテーブル tEvent に保存されます。 tEvent テーブルには少なくとも 2 つのフィールドが含まれています。
(1) EventTime フィールド: 時刻/日付型。イベントが発生した時刻を記録します。
(2) EventTarget フィールド: 文字タイプ。イベントで殺害されたオブジェクトを記録します。考慮すべきオブジェクトは、メモ帳プロセスと電卓プロセスです。
他のテーブルやフィールドが必要な場合は、必要に応じて追加できます。
6. ネットワークデータ送信形式がカスタマイズされます。具体的な送信内容や送信形式については、お客様のニーズに合わせてご判断ください。特に規定はございません。クライアント ネットワークはサーバー ネットワークと連携して動作する必要があります。
7. 使用する開発言語と統合開発環境に制限はなく、自分で選択できます。
8. データベース接続方法は、ニーズに応じて選択してください。
2. サーバー側プログラムの名前は「Server」です。ネットワークを監視し、クライアントがデータをアップロードすると、イベント情報がすぐに抽出され、ユーザー インターフェイスのリストに表示されます。
1. 対象動作環境は Windows 2000 オペレーティング システムです。
2. プログラムは通常の Windows 2000 GUI アプリケーションとして設計する必要があります。ユーザー インターフェイスには、イベント発生時刻、イベント処理オブジェクト、およびイベント ソースの少なくとも 3 つの情報を含むイベント情報リストが少なくとも 1 つ含まれている必要があります。
(1) イベント発生時刻:クライアントイベントの発生時刻と同じです。
(2) イベント処理オブジェクト:クライアントイベント処理オブジェクトと同じ。
(3) イベント ソース: 現在のイベントをアップロードしたクライアント マシンの IP アドレス。
3. ネットワーク データ送信形式はクライアントと連動してカスタマイズされます。
4. 使用する開発言語と統合開発環境に制限はなく、自分で選択できます。
プログラムの実行手順:
client.ini はドライブ C のルート ディレクトリに配置する必要があります。他のファイルはどこにでも配置できますが、survival.exe と client.exe は同じフォルダに配置する必要があります。survival.exe を起動する前に、サーバー IP (interval_server. client.ini に) を追加し、ADServer.exe を起動します。
ソースコードの説明 1. サーバー ADServer.exe
サーバー側は簡単なので、最初にサーバー側について話しましょう:)
サーバーの仕事は、ネットワークからデータを受信し、送信をブロックする TServerSocket を使用することです。 TServerSocket はクライアントから接続要求を受け取るたびに、TServerClientThread スレッドを生成し、クライアント データの読み取りと書き込みを行うためにこのスレッド内に新しい TWinSocketStream を作成する必要があります。メイン コードは、このスレッドの ClientExecute 部分に記述されます。
TWinSocketStream がクライアントにデータを書き込む場合には問題ありませんが、クライアントからのデータの読み取り (read メソッドを使用) は、WaitForData を使用した場合でも、読み取りが完了する前に返されることがよくあります。そこで、データが読み取られるのを待つ waitDateComplete 関数を作成しました。
2. クライアント クライアントは少し面倒です。 Client.exe はサービスであり、survival.exe はアプリケーションです。一方がシャットダウンすると、他方が再起動します。フックには、hookDll.dll が使用されます。グローバル フックは、独立した DLL モジュールに記述する必要があります (いくつかのフックを除き、この記事を参照してください: http://www.pconline.com.cn/pcedu/empolder/gj/vc/)。 0403/340480.html)。
Client.exe には数行のコードはありませんが、主に CreateProcess を使用してプロセスを開始します。このプログラムによって開始されるhookdll.dllで使用されるフックなど、サービスがWindowsシェルに関連することを実行したい場合は、ServiceTypeをstWin32に設定し、TService::Interactiveプロパティをtrueに設定する必要があることに注意してください。
Survival.exe は、サービスの開始、hookdll.dll のロード、およびサーバーへのイベントの報告に使用されます。
1. サービスの開始には 3 つのプロセスが必要です。まず、管理ツールの「サービス」のバックエンドであるサービス コントローラーを開き、OpenSCManager を使用してサービス マネージャー ハンドルを取得し、次に OpenService (サービス マネージャー ハンドル、サービス名) を使用します。 、SERVICE_START | SERVICE_QUERY_STATUS) を使用して指定したサービスのハンドルを取得し、最後に StartService(...) を使用してサービスを開くことができます。少なくとも 2 つの権限 (SERVICE_START および SERVICE_QUERY_STATUS) を取得する必要があることに注意してください。
2.hookdll.dll のロードに関して、このプログラムは暗黙的なリンクを使用します。つまり、BCB の projectAdd to Project を使用して dll の lib ファイルをインポートします。インポート後、コード内で DLL の関数が呼び出されないと、DLL はロードされません。このプログラムは beginTrace(HWND ホスト) 関数を呼び出して、survival.exe のウィンドウ ハンドルを渡し、DLL はこのハンドルを通じていくつかのメッセージを Survival.exe に送信します。
3. サーバーへのイベントの報告に関しては、TMSocketClient クラスが特別に作成され、主にメッセージの送信 -> メッセージ受信の処理を担当します。メイン コードは TMSocketClient::Command (….) にあります。 ADServer.exe のコードは非常に簡単です。さまざまなコマンド定数を #define することにより、このモジュールはさまざまな種類の送信タスクを完了できます。実際、このモジュールは私が以前 TNMFTP をシミュレートするために作成したクラスで、多くの #define を削除して簡素化し、仮想 LAN 内でファイルを転送するために使用しました (TNMFTP は仮想 LAN では動作しません)。
3.フックDll.dll
コードは非常に単純ですが、1 つの点に注意してください。N 個のプロセスが同じ DLL を呼び出す場合、この DLL は N 回コピーされることになります。一般的に、これらの N 個の DLL の異なるコピーにはそれぞれ独自のデータ セグメントがあります。つまり、各コピーの同じ変数の値は異なり、相互に干渉しません。しかし実際には、Windows は、DLL 内でそのような変数を宣言し、プロセス空間を超えるポインターであるかのように、DLL の N 個のインスタンス間でデータの一貫性を保つことを可能にするメカニズムを残しています。このような変数を宣言するには、まず DLL と同じ名前の .def ファイルを作成し、そのファイルに次のように記述します。
セクション
SHSEG 読み取り書き込み共有
次に、プロセス間で共有する DLL 変数をグローバル変数として宣言し、これらの変数を初期化します。共有する場合と共有しない場合の違いは、初期化されているかどうかであることに注意してください。
このプログラムは、CCRun の「フックのアプリケーション: プログラム実行監視」を参照しています。作者の Victor Chen に感謝します。
OK、説明することは基本的にこれだけのようです。また、プログラムには不要な変数がいくつかありますが、それらをクリーンアップする時間がありません。ご容赦ください。
拡大する
追加情報
バージョン
v1.0
タイプ
C++ビルダー(BCB)
更新時間
2023-04-18
サイズ
443392
言語
簡体字中国語
関連アプリ
NFT デジタル アート デジタル コレクション APP H5 ソース コード ソース コード
2024-02-13
化学 Web サイトの ASP ソース コード ソース コード グリーン スタイル エンタープライズ ソース コード
2022-08-20
ASP300のソースコード
2022-07-01
入札ネットワークのソースコード
2012-08-22
Tingshu.com のソースコード
2011-12-29
TCGCMS ソースコード
2010-01-20
おすすめ
Google Chrome
ホームページの閲覧
3.0.190.0 build 18892 绿色多语版_Google Chrome浏览器
Google Chrome
ホームページの閲覧
3.0.182.3 Dev 多国语言官方安装版
Google Chrome
ホームページの閲覧
3.0.182.3 Dev 多国语言绿色便携版
KML ファイル形式の詳細な紹介
XML チュートリアル
JDK 6.0 中国語版ヘルプドキュメント(検索機能付き、chm形式)
JSP チュートリアル
ビデオを傍受し、mpeg4 形式でオンライン送信するプログラム
VC/VC++
PHP中国語版マニュアル(拡張CHM形式)
PHP チュートリアル
動画Flv形式のオンライン変換ソースコード
その他のカテゴリー
簡体字中国語グリーン無料版
ビデオ変換
V1.90 简体中文绿色免费版
関連情報
すべて
プラネットリスタートフロストフォグソースコードマッチング
2024-04-23
Planet Restart エリダヌスのソース コードの推奨事項と問題解決
2024-03-25
ベストの11人のラインナップをどのように組み合わせるか? ——ソースソースコードネットワーク
2024-03-25
モバイル ゲーム Everrunning Calamity は Android でプレイできますか? Source Code.com の編集者からの回答
2024-03-24
『バック・トゥ・ザ・フューチャー』の戦闘効率を素早く向上させるにはどうすればよいですか? Source Code Networkの編集者が戦略を教えます
2024-03-20
Planet Restart Solar Wind のソースコードの選び方
2024-03-18
ミニワールドソースコードスパイラルマウントスキル属性
2024-03-12
Planet Restart 海東慶ソース コード マッチングの詳細
2023-12-21
Planet Reboot: Rude Fear のソースコードのリスト
2023-12-14
Planet Reboot のソースコードを一致させるにはどうすればよいですか?
2023-12-14
控えめなインターネット マーケティング戦略 4: ソース コード マーケティング
2011-02-24
Web サイトのソースコードと SEO の関係についての簡単な説明
2011-02-15
ユーザーコメント