中文(繁体)
中文(简体)
中文(繁体)
한국어
日本語
English
Português
Español
Русский
العربية
Indonesia
Deutsch
Français
ภาษาไทย
網站地圖大全
最新更新
首頁
源碼下載
編程相關
建站資源
網頁設計教程
網絡編程教程
首頁
>
編程相關
>
C++Builder(BCB)
Hook程式的例子
C++Builder(BCB)
v1.0
暫無資源
一個完整的hook程式的範例關鍵字:hook,blocking,service
這是我求職時收到的xx公司「資深Windows程式分析員」的測試題目,具體要求(也就是我這個程式的說明)是:
一、客戶端程式命名為Client。監視系統的運行,如發現系統中有「記事本」進程(notepad.exe)或「計算器」進程(calc.exe),立即殺死(kill)該進程,並將該事件寫入資料庫;定期進行檢查,每間隔1分鐘,檢查資料庫,將尚未上傳的事件記錄上傳至伺服器端。
1.目標運行環境為Windows 2000作業系統。
2、程序請設計為系統服務。
3.程序需具備抗攻擊能力,包括反刪除、對抗強制終止程序等功能。
(1)保持程式的持續運行,防止其他程式強行終止目前程式的運作;
(2)保護事件資料庫和主執行檔不被刪除;
(3)如發現異常(進程被終止、檔案被刪除等),立即強制重新載入/運行程式;
(4)如連續3次發現異常,守護程式強制重新啟動作業系統;重啟系統後保證程式正常載入並運作。
(A)為實現以上功能,程式不限於以EXE形式實現,可依需求自行決定實現形式。
(B)以上功能皆在Windows 2000正常運作環境、Administrator權限下實現,無需考慮Windows安全模式或權限等問題。
4.請使用簡單桌面資料庫,如Access、xBase等文件型資料庫。
5.每次產生的事件至少包含2部分資訊:事件發生時間和事件處理對象。
資料庫中以表tEvent儲存事件資料。 tEvent表至少包含兩個欄位:
(1)EventTime欄位:時間/日期類型。記錄事件發生的時間。
(2)EventTarget欄位:字元類型。記錄事件中所Kill的物件。需要考慮的物件有記事本進程和計算器進程。
如果需要其他表格或字段,可根據需要自行新增。
6.網路資料傳輸格式自訂。傳輸的具體內容和格式請依需求自行決定,不做具體要求。客戶端網路需與伺服器端網路配合工作。
7.所用開發語言與整合開發環境不限,可自行選擇。
8.資料庫連線方式,請依需求自行選擇。
二、伺服器端程式命名為Server。監聽網絡,一旦有客戶端上傳數據,立即從中提取事件訊息,並在用戶介面中以列表方式加以顯示。
1.目標運行環境為Windows 2000作業系統。
2、程式請設計為普通Windows 2000 GUI應用程式。在使用者介面中至少需包含一個事件資訊列表,該列表中至少包含3部分資訊:事件發生時間、事件處理物件和事件來源。
(1)事件發生時間:同客戶端事件發生時間。
(2)事件處理對象:同客戶端事件處理對象。
(3)事件來源:上傳目前事件的客戶端機器的IP位址。
3.網路資料傳輸格式自定;與客戶端配合工作。
4.所用開發語言與整合開發環境不限,可自行選擇。
運行程式的說明:
client.ini必須放在C盤根目錄下,其它檔案可以任意放置,但survival.exe與client.exe必須放置在同一個資料夾下啟動survival.exe前請先設定client.ini中伺服器ip(interval_server ),然後啟動ADServer.exe
來源碼說明一、服務端ADServer.exe
因為服務端簡單,所以先說服務端了:)
服務端的工作就是網路上接收從數據,採用TServerSocket阻塞式(blocking)傳輸。 TServerSocket每收到一個客戶端的連線請求,就產生一個TServerClientThread線程, 你應該在這個線程中new一個TWinSocketStream來進行客戶端資料的讀取和寫入。主要程式碼就寫在這個執行緒的ClientExecute部分。
TWinSocketStream寫入資料到客戶端沒什麼問題,但從客戶端讀取資料(用read方法),常常沒讀完就回傳了,即使使用了WaitForData。所以我又特別寫了個waitDateComplete函數來等待讀完資料。
二、客戶端客戶端麻煩一點。 Client.exe是一個服務,survival.exe是一個應用程序,這兩個東東相互監視,一個被關閉了,另一個就把它重新啟動。 hookDll.dll是掛鉤用的,全域鉤子必須寫在獨立的dll模組中(有幾中鉤子除外,請參考這篇文章:http://www.pconline.com.cn/pcedu/empolder/gj/ vc/0403/340480.html)。
Client.exe沒有幾行程式碼,主要就是使用CreateProcess啟動進程。注意,如果服務要做與windows shell相關事,例如本程式啟動的hookdll.dll中使用了鉤子,就必須把ServiceType設定為stWin32,把TService::Interactive屬性設為true。
survival.exe用來啟動服務,載入hookdll.dll,向服務端報告事件。
1、啟動服務需要三個過程,一是開啟服務控制器,也就是管理工具裡「服務」的後台,用OpenSCManager取得服務管理器句柄,然後就可以用OpenService(服務管理器句柄, 服務名, SERVICE_START | SERVICE_QUERY_STATUS) 來取得指定服務的句柄,最後就可以用StartService(…) 來開啟服務了。注意最低必須取得SERVICE_START 、SERVICE_QUERY_STATUS這兩個權限。
2、載入hookdll.dll方面,本程式使用了隱式鏈接,就是用BCB的projectAdd to Project導入該dll的lib檔。導入以後,如果程式碼中不呼叫dll的函數,dll其實還是不被載入的。本程式呼叫了beginTrace(HWND host)函數,把survival.exe的視窗句柄傳過去,dll透過這個句柄向survival.exe發送一些訊息。
3、向服務端報告事件方面,專門寫了個TMSocketClient類,主要是發送訊息->接收訊息回執這樣一個過程,主要程式碼在TMSocketClient::Command(….)中,對照ADServer.exe中的程式碼很容易讀懂。透過#define不同的command常數,這個模組可以完成許多類型的傳輸任務。實際上這個模組就是我過去寫的一個模擬TNMFTP的類,刪掉N多#define簡化來的,用來在虛擬區域網路中做檔案傳輸(TNMFTP在虛擬區域網路中無法運作)。
三、hookDll.dll
程式碼很簡單,只注意一點,就是N個行程呼叫同一個dll,這個dll就會被複製N次,一般來說,這N個dll的不同copy各有各的資料段。就是說,他們的同一個變量,在每個copy中的值是不一樣的,互不干擾。但實際上,windows留下了這樣的機制,讓我們能夠在dll中聲明這樣的變量,它的dll的N個實例中保持數據一致,就像它是一個超越進程空間的指針一樣。要宣告這樣的變量,先建立一個與dll同名的.def文件,在文件中寫:
SECTIONS
SHSEG READ WRITE SHARED
然後,把你要在進程間共享的dll變數宣告為全域變量,並且初始化這些變數。注意共享與不共享的差別就是是否初始化!
本程式參考了CCRun上《鉤子的應用: 程式運行監視》感謝作者Victor Chen。
OK,好像要說明的基本就這麼多了。另外程式中有些廢變量,我沒時間清理了,大家多包涵:)謝謝觀賞!
展開
附加信息
版本
v1.0
類型
C++Builder(BCB)
更新時間
2023-04-18
大小
433KB
相關應用
NFT數位藝術數位收藏APP H5源碼源碼源碼
2024-02-13
化工網站asp源碼源碼綠色風格企業源碼
2022-08-20
ASP300源碼
2022-07-01
招標網源碼
2012-08-22
聽書網源碼
2011-12-29
TCGCMS原始碼
2010-01-20
爲您推薦
chat.petals.dev
其他源碼
1.0.0
GPT Prompt Templates
其他源碼
1.0.0
GPTyped
其他源碼
GPTyped 1.0.5
celestial component library
C++Builder(BCB)
1.0.0
guessnumber cppbuilder
C++Builder(BCB)
1.0.2
paserver launcher
C++Builder(BCB)
1.0.0
waymo open dataset
其他源碼
December 2023 Update
wp functions
其他類別
1.0.0
slugify
其他類別
Version 4.6.0 (10 September 2024)
相關資訊
全部
使用Java實現系統托盤功能的介紹(附源碼以及截圖)
2024-11-23
星球重啟霜霧源碼搭配
2024-04-23
星球重啟波江座源碼推薦與問題解決
2024-03-25
最佳11人最強陣容怎麼搭配? ——來源源碼網
2024-03-25
永劫無間手遊安卓可以玩嗎源碼網小編的解答
2024-03-24
在重返未來中如何快速提升戰鬥力?源碼網小編告訴你攻略
2024-03-20
星球重啟太陽風源碼怎麼選
2024-03-18
迷你世界源碼螺旋坐騎技能屬性
2024-03-12
星球重啟海東青源碼搭配詳情
2023-12-21
星球重啟無禮恐懼源碼搭配一覽
2023-12-14
星球重啟雀鯛式源碼怎麼搭配
2023-12-14
輕描淡寫網路行銷策略之四:源碼行銷
2011-02-24