當前位置:首頁 » 操作系統 » 易語言hook源碼

易語言hook源碼

發布時間: 2023-04-14 14:09:34

A. 易語言截取鍵盤信息的代碼怎麼寫

MS VC++ 的 c 程序可以實現。
方法嘩嘩:
(1)用鍵盤按鍵程序模擬法,把圖像發送到clipboard
(2)把clipboard圖像存入.bmp 圖像文件(或別的格式)。

編譯
cl simu_keyboard.c user32.lib Gdi32.lib
特殊頭文件:
#include <Windows.h>
#include <Winuser.h>
#include <memory.h>

提示:
(1)按鍵程序模擬子程序:
void snapscreen_2_clipboard()
{
keybd_event(VK_SNAPSHOT,0x2C,0,0);
keybd_event(VK_SNAPSHOT,0x2C,KEYEVENTF_KEYUP,0);
}
(2)clipboard圖像存入.bmp 圖像亂桐行文件
FILE *fout;
/* --------------------------------------------------------------
* dib
int GetBytesPerPixel(int depth);
int GetBytesPerRow(int width, int depth);
int GetBitmapBytes(int width, int height, int depth);
* --------------------------------------------------------------*/
int GetBytesPerPixel(int depth)
{ return (depth==32 ? 4 : 3);
}

int GetBytesPerRow(int width, int depth)
{
int bytesPerPixel = GetBytesPerPixel(depth);
int bytesPerRow = ((width * bytesPerPixel + 3) & ~3);
return bytesPerRow;
}

// bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight, bmi.bmiHeader.biBitCount
int GetBitmapBytes(int width, int height, int depth)
{
return height * GetBytesPerRow(width, depth);
}

void save_clipboard_img_to_bmp()
{
char nameout[80];
HANDLE h_bitmap,h_dib;
BITMAPINFO bmi;
HDC hDC;
int imageBytes;
BITMAPFILEHEADER hdr;
int scanLineCount;
unsigned char *img;
if (!OpenClipboard(NULL)) {
printf("Can not open clipboard\n");
exit(0);
};
if (DEBUG ==1) printf("pass open clipboard\n");
// HANDLE GetClipboardData(UINT uFormat);
h_bitmap = GetClipboardData(CF_BITMAP);
h_dib = GetClipboardData(CF_DIB);
if (h_bitmap ==NULL || h_dib ==NULL){
printf("I got NULL bitmap: ");
} else { printf("I got bitmap: ");};
memcpy(&bmi,h_dib,sizeof(bmi));
printf("%d x %d \n",bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight);
hDC = CreateCompatibleDC(NULL); //輪棗 Gdi32.lib.
CloseClipboard();

bmi.bmiHeader.biCompression = BI_RGB;
// possible to use part of imgage with img_w,img_h
imageBytes = GetBitmapBytes(bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight, bmi.bmiHeader.biBitCount);
printf("pass GetBitmapBytes=%d \n",imageBytes);
img = (char *) malloc(imageBytes);
if (!img) {
printf("No enought memory for img !\n"); exit(0);
}

// BITMAPFILEHEADER hdr;
hdr.bfType = ((WORD) ('M' << 8) | 'B'); // is always "BM"
hdr.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
+ (bmi.bmiHeader.biClrUsed * sizeof(RGBQUAD)) + bmi.bmiHeader.biSizeImage;
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
+ (bmi.bmiHeader.biClrUsed * sizeof(RGBQUAD));
scanLineCount = GetDIBits(hDC,h_bitmap,0,bmi.bmiHeader.biHeight, img, &bmi, DIB_RGB_COLORS);
strcpy(nameout,"keyb_tmp.bmp");
if ( (fout = fopen(nameout,"wb") ) == NULL ) {
printf("\007Cann't open output file: %s ", nameout);exit(1);
};
fwrite( &hdr, sizeof(BITMAPFILEHEADER ), 1, fout );
fwrite( &bmi, sizeof(BITMAPINFO), 1, fout );
fwrite( img, sizeof(unsigned char),imageBytes, fout );
fclose(fout);
printf("Output in %s\n",nameout);
}
/* -------end dib and bmp ----- */

B. 求助,易語言反HOOK源碼,防止其他程序DLL注入

騰訊電腦管家可以幫助修復
a進入管家的首頁後,點擊右上角的「工具箱」芹宴按鈕,點擊「電腦診所」
b進入「電腦診所」找到「軟體硬體」點擊「丟失dll文件判拿」最後「一鍵修復」界面
可以根據自己彈出的對話框中顯示的無法啟動程序是丟掘首搭失的何種dll文件,找到對應的後,滑鼠輕輕放在該項上,當出現了「立即修復」按鈕後點擊「立即修復」按鈕。
完成以上步驟後,系統便自行修復了dll文件丟失的故障了,完成了修復

C. 易語言進程反注入源碼

進程是否存在 (「dnf.exe」) .如果真 (bool) 輸入法.激活 (取句柄2 (輸入法.清除注入 (取特定目錄 (10) +「\\Sougoo.ime」) 輸入法.卸載 (

D. 易語言Hook攔截某進程所有信息

准備編寫防火牆嗎?據我所知,易語言可以實現檢測網路是否連接,檢測某並脊個進程是否存在,就比如關機猛蔽拿事件,可以有運行dos命令,bat命令等多枝搭種方式,我認為實現你說的只是部分,bug會很大。

E. 求易語言鉤子注入dll及home呼出源碼

易語言鉤子DLL注入源碼及源碼說明2010-04-06 13:52[所有要使用到的API]

.版本 2

.DLL命令 LoadLibraryA, 整數型,"kernel32.dll","LoadLibraryA"
.參數 lpLibFileName, 文本型

.DLL命令 SetWindowsHookExA, 整數型, "user32.dll", "SetWindowsHookExA", 公開, SetWindowsHookEx
.參數 鉤子類型, 整數型, , idHook
.參數 回調函數地址, 整數型, , lpfn
.參數 實例句柄, 整數型, , hmod
.參數 線程ID, 整數型, , dwThreadId

.DLL命令 FreeLibrary, 整數型, "kernel32.dll", "FreeLibrary", , 釋放指定的動態鏈接庫,它們早先是用LoadLibrary ;API函數裝載的 非零表示成功,零表示失敗。會設置GetLastError
.參數 庫句柄, 整數型, , hLibMole,要釋放的一個庫句柄,在VB里使用只能用這個函數釋放那些由應用程序明確裝載的DLL。對LoadLibrary的每一次調用都應該有一個對應的FreeLibrary調用;

.DLL命令 UnhookWindowsHookEx, 整數型, "user32.dll", "UnhookWindowsHookEx", , UnhookWindowsHookEx
.參數 鉤子句柄, 整數型, , hHook

.DLL命令 CallNextHookEx, 整數型, "user32.dll", "CallNextHookEx", 公開, CallNextHookEx
.參數 鉤子句柄, 整數型, , hHook
.參數 代碼值, 整數型, , ncode
.參數 附加參數1, 整數型, , wParam
.參數 附加參數2, 整數型, 傳址, lParam

.DLL命令 GetProcAddress, 整數型, "kernel32.dll", "GetProcAddress", , 取進程路徑
.參數 模塊句柄, 整數型, , hMole
.參數 進程名稱, 文本型, , lpProcName

.DLL命令 GetCurrentThreadId, 整數型, "kernel32.dll", "GetCurrentThreadId"

.DLL命令 獲取特別文件夾位置_, 整數型, "shell32.dll", "SHGetSpecialFolderLocation"
.參數 窗口句柄, 整數型, , hwndOwner
.參數 文件夾位置, 整數型, , nFolder
.參數 結構, 項目標識符列表_, 傳址, pIdl

.DLL命令 從列表id取路徑_, 整數型, "shell32.dll", "SHGetPathFromIDListA", , $(b)
.參數 結構指針, 整數型, , pIdl
.參數 路徑, 文本型, 傳址, pszPath

.DLL命令 CallWindowProcA, 整數型, "user32.dll", "CallWindowProcA"
.參數 動態調用代碼, 位元組集, , 一定要用本人編寫的
.參數 子程序, 子程序指針, , 子程序指針
.參數 參數, 整數型, 數組, 為整數數組,參數1為成員1…類推;文本型和位元組集型(自定義結構)為指針
.參數 參數數目, 整數型, , 一定要和參數數組相符,不然會出錯
.參數 是否C調用, 整數型, , 真為cdecl調用方式,假為stdcall調用方式(即標准WINAPI方式)

[這里函數所有代碼和一個自定義類型,API代碼在左邊]

.版本 2

.程序集 程序集1
.程序集變數 臨時呼出熱鍵, 整數型
.程序集變數 臨時載入窗口, 窗口
.程序集變數 鉤子模塊句柄, 整數型, , "1000"
.程序集變數 鉤子句柄, 整數型, , "1000"
.程序集變數 鉤子IDx, 整數型
.程序集變數 x, 整數型
.程序集變數 鉤子句柄1, 整數型
.程序集變數 temp目錄, 文本型
.程序集變數 xxx, 整數型
.程序集變數 熱鍵鉤子句柄, 整數型
.程序集變數 第一次, 邏輯型

.子程序 調用_調用子程序, 整數型, 公開, 呼叫某個函數 可以傳入無限個參數 返回函數返回值
.參數 子程序指針, 子程序指針, , 指定函數
.參數 參數, 整數型, 可空 數組, 指定參數 可以不寫, 參數為數組 格式為 參數[1]=xxx 參數[2]=xxx 文本型或位元組集請用 轉換指針 格式2 加入成員(參數,xxx)
.局部變數 動態調用代碼, 位元組集

動態調用代碼 = { 85, 139, 236, 86, 139, 117, 16, 141, 78, 255, 133, 201, 124, 21, 139, 69, 12, 141, 4, 136, 65, 139, 16, 137, 85, 16, 255, 117, 16, 131, 232, 4, 73, 117, 242, 255, 85, 8, 137, 69, 12, 139, 69, 20, 133, 192, 116, 13, 141, 4, 181, 0, 0, 0, 0, 137, 69, 16, 3, 101, 16, 139, 69, 12, 94, 93, 194, 16, 0 }
返回 (CallWindowProcA (動態調用代碼, 子程序指針, 參數, 取數組成員數 (參數), 0))

.子程序 操作_取特定目錄, 文本型, 公開, 取特定的目錄(返回所要取的指定目錄名 無效返回空)
.參數 欲獲取目錄類型, 整數型, 可空, 0我的桌面 1臨時目錄 5我的文檔 6我的收藏夾 7我的啟動 11我的開始菜單 20系統字體 36Windows安裝目錄 37系統目錄 [99更多]
.局部變數 路徑, 文本型
.局部變數 標示結構, 項目標識符列表_
.局部變數 目錄類型, 整數型

.如果真 (欲獲取目錄類型 = 99)
輸出調試文本 (「0我的桌面 2我的程序 5我的文檔 6我的收藏夾 7我的啟動 8我最近的文檔 9我的發送到 11我的開始菜單 13我的音樂 14我的視頻 16我的桌面 20系統字體 22開始菜單組 23程序組 24啟動組 25桌面 31收藏夾 32我的瀏覽器臨時目錄 33我的Cookies 34我的歷史記錄 36Windows安裝目錄 37系統目錄 38文件安裝目錄 39我的圖片 40用戶目錄 41系統目錄 46文檔 47管理工具 48我的管理工具 53音樂 54圖片 55視頻」)
.如果真結束
.如果 (欲獲取目錄類型 = 1)
目錄類型 = 34
.否則
目錄類型 = 欲獲取目錄類型
.如果結束
獲取特別文件夾位置_ (0, 目錄類型, 標示結構)
路徑 = 取空白文本 (255)
從列表id取路徑_ (標示結構.結構大小, 路徑)
.如果真 (路徑 = 「」)
返回 (「」)
.如果真結束
.如果真 (欲獲取目錄類型 = 1)
路徑 = 子文本替換 (路徑, 「History」, 「Temp」, , , 真)
.如果真結束
返回 (路徑 + 「\」)

.子程序 注入_安裝鉤子DLL, 整數型, 公開, DLL注入 返回0=失敗 整數型 DLL介面(代碼值,參數1,參數2)
.參數 線程ID, 整數型, , -1 全局鉤子
.參數 DLL全名, 文本型, , DLL全名
.參數 DLL介面, 文本型, 可空, 默認 整數型 鉤子介面(代碼值,參數1,參數2)
.局部變數 臨時變數, 整數型
.局部變數 目錄, 文本型
.局部變數 窗口句柄, 整數型

.如果真 (是否為空 (DLL介面) = 真)
DLL介面 = 「鉤子介面」
.如果真結束
.如果真 (線程ID = 0)
返回 (0)
.如果真結束
.如果真 (線程ID = -1)
線程ID = 0
.如果真結束
鉤子IDx = 鉤子IDx + 1
鉤子模塊句柄 [鉤子IDx] = LoadLibraryA (DLL全名)
鉤子句柄 [鉤子IDx] = SetWindowsHookExA (3, GetProcAddress (鉤子模塊句柄 [鉤子IDx], DLL介面), 鉤子模塊句柄 [鉤子IDx], 線程ID)
目錄 = 操作_取特定目錄 (1)
寫配置項 (目錄 + 「ada.ini」, 「ada」, 「鉤子句柄」, 到文本 (鉤子句柄 [鉤子IDx]))
輸出調試文本 (鉤子IDx, 鉤子模塊句柄 [鉤子IDx], 鉤子句柄 [鉤子IDx])
返回 (鉤子IDx)

.版本 2

.子程序 注入_卸載鉤子DLL, 邏輯型, 公開
.參數 鉤子ID, 整數型, 可空, 卸載所有時無效
.參數 卸載所有, 邏輯型, 可空
.局部變數 xx, 整數型

.如果真 (卸載所有)
.如果真 (鉤子IDx > 0)
.計次循環首 (鉤子IDx, xx)
.如果真 (鉤子模塊句柄 [xx] ≠ 0)
FreeLibrary (鉤子模塊句柄 [xx])
UnhookWindowsHookEx (鉤子句柄 [xx])
.如果真結束

.計次循環尾 ()
.如果真結束
返回 (真)
.如果真結束
.如果真 (鉤子ID > 0)
.如果真 (鉤子模塊句柄 [鉤子ID] ≠ 0)
FreeLibrary (鉤子模塊句柄 [鉤子ID])
UnhookWindowsHookEx (鉤子句柄 [鉤子ID])
返回 (真)
.如果真結束

.如果真結束
返回 (假)

.子程序 注入_初始化鉤子DLL, 整數型, 公開, DLL用.
.參數 代碼值, 整數型
.參數 參數1, 整數型
.參數 參數2, 整數型
.參數 初始, 子程序指針
.局部變數 xxxx, 整數型

.如果真 (鉤子句柄1 = 0)
temp目錄 =操作_取特定目錄 (1)
鉤子句柄1 = 到整數 (讀配置項 (temp目錄 + 「ada.ini」, 「ada」, 「鉤子句柄」, ))
.如果真結束
.如果真 (第一次 = 假)
第一次 = 真
調用_調用子程序 (初始)
.如果真結束
返回 (CallNextHookEx (鉤子句柄1, 代碼值, 參數1, 參數2))

.子程序 注入_設置呼出窗口, 邏輯型, 公開
.參數 設置熱鍵, 整數型
.參數 呼出窗口, 窗口

臨時呼出熱鍵 = 設置熱鍵
臨時載入窗口 = 呼出窗口
熱鍵鉤子句柄 = SetWindowsHookExA (2, 到整數 (&呼出鍵介面), 0, GetCurrentThreadId ())
.如果真 (熱鍵鉤子句柄 > 0)
返回 (真)
.如果真結束
返回 (假)

.子程序 呼出鍵介面, 整數型
.參數 一, 整數型
.參數 二, 整數型
.參數 三, 整數型

.如果真 (一 = 0 且 二 = 臨時呼出熱鍵 且 三 > 0)
.如果 (是否已創建 (臨時載入窗口))
.如果 (臨時載入窗口.可視)
臨時載入窗口.可視= 假
.否則
臨時載入窗口.可視= 真
.如果結束

.否則
載入 (臨時載入窗口, , 假)
臨時載入窗口.Esc鍵關閉= 假
臨時載入窗口.最小化按鈕= 真
.如果結束

.如果真結束
返回 (CallNextHookEx (熱鍵鉤子句柄, 一, 二, 三))

.版本 2

.數據類型 項目標識符列表_, , ITEMIDLIST
.成員 結構大小, 整數型, , , cb
.成員 標識符長度, 位元組型, , "255", abID

此函數是用來調用指針函數的.就是CALL

取目錄用這個我就不解釋了
下面是源碼主要函數
函數解釋:

本函數參數1為要HOOK的線程ID,參數2為要注入的DLL名,參數3[可空]為DLL介面名字空則為"鉤子介面".
下面解釋是如何實現的:

1.首先使用LoadLibraryA獲取DLL模塊地址.
2.然後設置SetWindowsHookExA

參數一為HOOK類型,使用WH_GETMESSAGE(3) Hook來監視從GetMessage or PeekMessage函數返回息。

參數二為介面地址,就是說把消息返回轉接到的位置,當然我們這里所使用的是我們DLL所公開的那個函數

參數三為介面模塊的句柄即DLL的句柄(地址)

參數四為將要被HOOK的線程ID(0為全局HOOK,不推薦使用全局HOOK)

3.設置完後將鉤子句柄寫配置項到臨時目錄(後面將要使用).

說白了其實這個才是真正的介面(DLL里的介面只是在做轉接而已),

我先講這個函數是如何實現的(上面已經說了這才是真正的介面).

1,鉤子句柄是一個程序集變數,先判斷這個變數是否為0,如果等於0那麼就是說這個函數第一次被使用,

第一次使用將讀去上個函數寫在臨時目錄的鉤子句柄.

2.用一個邏輯變數(程序集變數或全局變數),來判斷這個消息鉤子是否第一次運行(為了防止後面調用

子程序被多次調用),是的話調用一個子程序(自己設置)

3.使用CallNextHookEx(呼叫下一個鉤子)把當前HOOK的信息在傳送回被HOOK的鉤子里,那個鉤子我們

就不用管了.

下來說下到底如何使用

首先在你的EXE程序里寫這個(我就不多說這是干嗎的了).

然後在DLL里寫上這個代碼(有人可能覺得眼熟,好像在什麼地方見過,對了這個代碼和

外掛作坊的鉤子注入差不多)

下來說明下按鍵呼出窗口的函數

用變數把當前參數存起來(主要方便介面調用)

1.為當前運行線程設置一個鍵盤鉤子

2.[介面]設置按鍵判斷,如果按下我們設置的鍵將呼出窗口,如果這個窗口沒創建將判斷創建,

如果已經創建再次按下則會隱藏,

載入後的窗口把用ESC關閉的屬性弄成假,不需要ESC關閉

3.最後就是再呼叫下以前的鉤子.

最後就是卸載鉤子DLL了.

判斷是否要卸載全部的鉤子,如果是就循環將現有鉤子DLL全部卸載.

不是就按著ID來卸載

卸載方法:

1.FreeLibrary就是卸載一個載入的DLL

2.UnhookWindowsHookEx乃是卸載這個HOOK

-.-OK了這就是 鉤子DLL注入,謝謝大家閱讀,如果看不明白,

F. 易語言怎麼hook關機命令

(信息框(「是仿備否關閉計算機」,0,「提示」) 然後判定返回值按下了哪個鍵 或者要密碼的話做備畝毀個帶密碼的窗口,載入那個窗口,如果真(編輯框1.內容=「123」 且 編輯框2.內容=「456」) 則執行關閉系統() 求耐蘆採納!!

G. 易語言如何發送封包

易語言自帶的有客戶端,而且是可以發送的,還需要一個網截,E上面帶的都有!

H. 易語言教程

IT9網路學院vip之零基礎學習易語言教程(完整打包)

《易語言遠程式控制制技術教程》

一切從零開始易語言輔助教程 薦

世寶易語言教程 薦

世恆易語言教程

中華隱士易語言全套高清課程【全套20課】完美收藏版

之乎者也易語言POST系列教程合集

倉庫管理系統製作系列教程【全套1-11課】-全套打包下載易語言實戰教程

華中紅客基地易語言系列教程

天都吧易語言全套課程【共50課時】-史上最經典的易語言入門到精通課程【解壓密碼k9z6a3.b51..k】

技術海VIP課程易語言零基礎到精通,特別好的最新教程!共2.27G!強烈推薦(1)

時光論壇易語言全套教程【易語言零基礎+易語言抓包+易語言填表】完整版

易語言3D游戲開發視頻教程+全套源碼

易語言Hook從入門到精通

易語言VIP教程45課

易語言WEB QQ協議分析教程,實現各種QQ軟體應用操作很不錯的教程【共15課】 載很好的教程

易語言外掛初級【1-15】CE教程大全

易語言所有支持庫 非靜態庫186個,靜態庫107個

易語言極品優秀源碼

易語言正則表達式教程【精易論壇出品共12課時】-高清高速

易語言源碼

易語言編程系統pdf 含詳細目錄

易語言網路編程

星緣正則表達式系列教程

甲殼蟲vip之易語言培訓班

精易論壇VIP-POST填表全套全套教程

覓風易語言教程

道德網安-易語言基本教程(共4章節)

集中營易語言百集學習視頻(1·80集)

驅動級的一個應用實例(易語言,C++)語音教程

魔鬼作坊易語言外掛教程

黑手安全網VIP之易語言系列教程(打包)

黑貓論壇易語教程【共32課時】-很不錯的HK易語言教程

黑鷹易語言教程 - -

獨立團--VIP工具包.rar


易友編程助手源碼.rar 2.86 MB

易語言2D游戲開發引擎最終版.rar 1.75 MB

易語言3D射擊游戲源碼.rar 28.95 MB

易語言DNF源碼.rar 4.52 MB 2013-07-21

易語言nes模擬器源碼.rar 211.11 KB

易語言Win8界面風格源碼.rar 1.43 MB

易語言XP虛擬操作系統.rar 8.09 MB

易語言下載自繪界面.rar 833.22 KB

易語言仿iPhone4s源碼.rar 2.32 MB

易語言天龍八部Flash窗口.rar 2.25 MB

易語言情人節禮物源碼.rar 10.02 MB

易語言拳皇格鬥游戲源碼.rar 227.34 KB

易語言桌面版酷狗音樂.rar 383.84 KB

易語言夢想逍遙游整套源碼.rar 38.15 MB

易語言模仿QQ2013登陸.rar 826.76 K

易語言炫彩界面庫.rar 7.04 MB

易語言簡單網路游戲.rar 1.22 MB

易語言綠盾殺毒軟體源碼.rar 1.66 MB

易語言網路游戲源碼.zip 3.47 MB

易語言超酷啟動界面.rar 4.47 MB

易語言酷炫界面引擎.rar 1.28 MB

易語言金山毒霸界面源碼.rar 1.44 MB

易語言黑客記事本.rar

..............................

I. 易語言 HOOK API 教程 要詳細的說明

#include#include "APIHook.h" extern CAPIHook g_OpenProcess; // 自定義OpenProcess函數 #pragma data_seg("YCIShared") HHOOK g_hHook = NULL; DWORD dwCurrentProcessId=0; #pragma data_seg() HANDLE WINAPI Hook_OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId) { typedef HANDLE (WINAPI *PFNTERMINATEPROCESS)(DWORD, BOOL,DWORD); if(dwProcessId != dwCurrentProcessId) { return ((PFNTERMINATEPROCESS)(PROC)g_OpenProcess)(dwDesiredAccess,bInheritHandle,dwProcessId); } return 0; } // 掛鉤OpenProcess函數 CAPIHook g_OpenProcess("kernel32.dll", "OpenProcess", (PROC)Hook_OpenProcess); ////static HMODULE MoleFromAddress(PVOID pv) { MEMORY_BASIC_INFORMATION mbi; if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0) { return (HMODULE)mbi.AllocationBase; } else { return NULL; } } static LRESULT WINAPI GetMsgProc(int code, WPARAM wParam, LPARAM lParam) { return ::CallNextHookEx(g_hHook, code, wParam, lParam); } BOOL WINAPI SetSysHook(BOOL bInstall, DWORD dwThreadId) { BOOL bOk; dwCurrentProcessId=dwThreadId; if(bInstall) { g_hHook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, MoleFromAddress(GetMsgProc), 0); bOk = (g_hHook != NULL); } else { bOk = ::UnhookWindowsHookEx(g_hHook); g_hHook = NULL; } return bOk; } API 通過HOOK OpenProcess() 實現進程防殺2007-07-04 14:41在WINDOWS操作系統下,當我們無法結束或者不知道怎樣結束一個程序的時候,或者是懶得去找「退出」按鈕的時候,通常會按「CTRL+ALT+DEL」呼出任務管理器,找到想結束的程序,點一下「結束任務」就了事了,呵呵,雖然有點粗魯,但大多數情況下都很有效,不是嗎? 設想一下,如果有這么一種軟體,它所要做的工作就是對某個使用者在某台電腦上的活動作一定的限制,而喚培又不能被使用者通過「和歷唯結束任務」這種方式輕易地解除限制,那該怎麼做?無非有這么三種方法:1.屏蔽「CTRL+ALT+DEL」這個熱鍵的組合;2.讓程序不出現在任務管理器的列表之中;3.讓任務管理器無法殺掉這個任務。對於第一種方法,這樣未免也太殘酷了,用慣了「結束任務」這種方法的人會很不習慣的;對於第二種方法,在WINDOWS 9X下可以很輕易地使用注冊服務進程的方法實現,爛或但是對於WINDOWS NT架構的操作系統沒有這個方法了,進程很難藏身,雖然仍然可以實現隱藏,但實現機制較為復雜;對於第三種方法,實現起來比較簡單,我的作品:IPGate網址過濾器 就是採用的這種方式防殺的,接下來我就來介紹這種方法。 任務管理器的「結束任務」實際上就是強制終止進程,它所使用的殺手鐧是一個叫做TerminateProcess()的Win32 API函數,我們來看看它的定義: BOOL TerminateProcess( HANDLE hProcess; // 將被結束進程的句柄 UINT uExitCode; // 指定進程的退出碼 ); 看到這里,是不是覺得不必往下看都知道接下來要做什麼:Hook TerminateProcess()函數,每次TerminateProcess()被調用的時候先判斷企圖結束的進程是否是我的進程,如果是的話就簡單地返回一個錯誤碼就可以了。真的是這么簡單嗎?先提出一個問題,如何根據hProcess判斷它是否是我的進程的句柄?答案是:在我的進程當中先獲得我的進程的句柄,然後通過進程間通訊機制傳遞給鉤子函數,與hProcess進行比較不就行了?錯!因為句柄是一個進程相關的值,不同進程中得到的我的進程的句柄的值在進程間進行比較是無意義的。 怎麼辦?我們來考察一下我的hProcess它是如何得到的。一個進程只有它的進程ID是獨一無二的,操作系統通過進程ID來標識一個進程,當某個程序要對這個進程進行訪問的話,它首先得用OpenProcess這個函數並傳入要訪問的進程ID來獲得進程的句柄,來看看它的參數: HANDLE OpenProcess( DWORD dwDesiredAccess, // 希望獲得的訪問許可權 BOOL bInheritHandle, // 指明是否希望所獲得的句柄可以繼承 DWORD dwProcessId // 要訪問的進程ID ); 脈絡漸漸顯現:在調用TerminateProcess()之前,必先調用OpenProcess(),而OpenProcess()的參數表中的dwProcessId是在系統范圍內唯一確定的。得出結論:要Hook的函數不是TerminateProcess()而是OpenProcess(),在每次調用OpenProcess()的時候,我們先檢查dwProcessId是否為我的進程的ID(利用進程間通訊機制),如果是的話就簡單地返回一個錯誤碼就可以了,任務管理器拿不到我的進程的句柄,它如何結束我的進程呢? 至此,疑團全部揭開了。由Hook TerminateProcess()到Hook OpenProcess()的這個過程,體現了一個逆向思維的思想。其實我當初鑽進了TerminateProcess()的死胡同里半天出也不來,但最終還是蹦出了靈感的火花,注意力轉移到了OpenProcess()上面,實現了進程防殺。喜悅之餘,將這心得體會拿出來與大家分享。參考資料: http://hi..com/wlw7758/blog/item/9d109322816032f1d7cae2d7.html版權所有,謝絕抄襲!!!!!!

J. 易語言 如何通過 hook 獲取控制台(類比為cmd)顯示內容

可以參考C語言的成功案例。然後請求大神吧C語言的代碼翻譯過來;。。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:335
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:943
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:739
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:802
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:510
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:371