當前位置:編程學習大全網 - 源碼下載 - 求易語言鉤子註入dll及home呼出源碼

求易語言鉤子註入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

.參數 庫句柄, 整數型, , hLibModule,要釋放的壹個庫句柄,在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", , 取進程路徑

.參數 模塊句柄, 整數型, , hModule

.參數 進程名稱, 文本型, , 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註入,謝謝大家閱讀,如果看不明白,

  • 上一篇:星際爭霸裏人族、蟲族、神族各種兵的名字
  • 下一篇:使用curl被返回400怎麽破解
  • copyright 2024編程學習大全網