hookdll源碼
系統結構:Hook,new_ChangeDisplaySettingsA,HOOKAPI,ReadApi,api_CallNextHookEx,取程序或DLL句柄,取DLL函數地址,返回虛擬信息,修改虛擬保護,寫內存字節,取當前進程偽句柄,api_ExitWindowsEx,錯誤提示管理_,開始窗口化_,調整屏幕分辨率,獲取屏幕分辨率,停止,安裝全局鉤子,停止鉤子_,刷新進程信息,修改API首地址,還原API,GetWindowLongA,SetWindowLongA,SetWindowPos,ShowWindow,GetForegroundWindow,ChangeDisplaySettings,EnumDisplaySettings,取程序或DLL句柄,取DLL函數地址,取當前進程偽句柄,載入動態鏈接庫_,取DLL函數地址_,設置系統鉤子,關閉全局鉤子,釋放動態鏈接庫_,創建進程快照,開始進程快照,繼續進程快照,修改虛擬保護,返回虛擬信息,寫內存字節,API_GetWindowThreadProcessId,API_尋找頂級窗口,
======程序集1
| |
| |------ _啟動子程序
| |
| |------ _臨時子程序
| |
| |------ Hook
| |
| |------ new_ChangeDisplaySettingsA
| |
| |------ HOOKAPI
| |
| |------ ReadApi
| |
| |
======調用的Dll
| |
| |---[dll]------ api_CallNextHookEx
| |
| |---[dll]------ 取程序或DLL句柄
| |
| |---[dll]------ 取DLL函數地址
| |
| |---[dll]------ 返回虛擬信息
| |
| |---[dll]------ 修改虛擬保護
| |
| |---[dll]------ 寫內存字節
| |
| |---[dll]------ 取當前進程偽句柄
| |
| |---[dll]------ api_ExitWindowsEx
======主窗口程序集
| |
| |------ _啟動子程序
| |
| |------ _窗口_主窗口_創建完畢
| |
| |------ 錯誤提示管理_
| |
| |------ 開始窗口化_
| |
| |------ 調整屏幕分辨率
| |
| |------ 獲取屏幕分辨率
| |
| |------ 停止
| |
| |------ 安裝全局鉤子
| |
| |------ _窗口_主窗口_可否被關閉
| |
| |------ 停止鉤子_
| |
| |
======接口程序集
| |
| |------ 刷新進程信息
| |
| |------ 修改API首地址
| |
| |------ 還原API
| |
| |
======調用的Dll
| |
| |---[dll]------ GetWindowLongA
| |
| |---[dll]------ SetWindowLongA
| |
| |---[dll]------ SetWindowPos
| |
| |---[dll]------ ShowWindow
| |
| |---[dll]------ GetForegroundWindow
| |
| |---[dll]------ ChangeDisplaySettings
| |
| |---[dll]------ EnumDisplaySettings
| |
| |---[dll]------ 取程序或DLL句柄
| |
| |---[dll]------ 取DLL函數地址
| |
| |---[dll]------ 取當前進程偽句柄
| |
| |---[dll]------ 載入動態鏈接庫_
| |
| |---[dll]------ 取DLL函數地址_
| |
| |---[dll]------ 設置系統鉤子
| |
| |---[dll]------ 關閉全局鉤子
| |
| |---[dll]------ 釋放動態鏈接庫_
| |
| |---[dll]------ 創建進程快照
| |
| |---[dll]------ 開始進程快照
| |
| |---[dll]------ 繼續進程快照
| |
| |---[dll]------ 修改虛擬保護
| |
| |---[dll]------ 返回虛擬信息
| |
| |---[dll]------ 寫內存字節
| |
| |---[dll]------ API_GetWindowThreadProcessId
| |
| |---[dll]------ API_尋找頂級窗口
調用的DLL命令:
.DLL命令 api_CallNextHookEx, 整數型, , "CallNextHookEx"
.參數 hhook, 整數型
.參數 nCode, 整數型
.參數 wParam, 整數型
.參數 lParam, 整數型
.DLL命令 取程序或DLL句柄, 整數型, "kernel32", "GetModuleHandleA", , 獲取一個應用程序或動態鏈接庫的模塊句柄 如執行成功成功,則返回模塊句柄。零表示失敗。會設置GetLastError
.參數 模塊名, 文本型, , 指定模塊名,這通常是與模塊的文件名相同的一個名字。例如,NOTEPAD.EXE程序的模塊文件名就叫作NOTEPAD;
.DLL命令 取DLL函數地址, 整數型, "kernel32", "GetProcAddress", , 返回函數地址 成功返回DLL庫模塊內函數地址
.參數 DLL句柄, 整數型, , DLL庫模塊的句柄,可以調用 LoadLibrary 函數返回。
.參數 DLL庫模塊內函數名, 文本型, , DLL庫模塊內函數名
.DLL命令 返回虛擬信息, 整數型, "kernel32", "VirtualQueryEx"
.參數 hProcess, 整數型, , 對象的進程句柄,可以使用函數 OpenProcess() 返回。
.參數 lpAddress, 整數型, , 對象指針地址
.參數 lpBuffer, 虛擬信息, , 返回的虛擬信息
.參數 dwLength, 整數型, , 信息長度,已知 28
.DLL命令 修改虛擬保護, 邏輯型, "kernel32", "VirtualProtectEx"
.參數 hProcess, 整數型, , 對象的進程句柄,可以使用函數 OpenProcess() 返回。
.參數 lpAddress, 整數型, , 虛擬信息.BaseAddress
.參數 dwSize, 整數型, , 虛擬信息.RegionSize
.參數 flNewProtect, 整數型, , 修改類型,#PAGE_EXECUTE_READWRITE 64為可讀寫模式
.參數 lpflOldProtect, 整數型, 傳址, 虛擬信息.Protect
.DLL命令 寫內存字節, 邏輯型, "kernel32", "WriteProcessMemory", , 在指定進程中寫內存
.參數 hProcess, 整數型, , 對象的進程句柄,可以使用函數 OpenProcess() 返回。
.參數 起始寫入地址, 整數型, , 起始寫入地址
.參數 要寫入的內容, 字節集, , 本參數的類型也能是“字節”型。
.參數 寫入長度, 整數型, , 寫入的數據長度。
.參數 實際寫入長度, 整數型, , 實際寫入的數據長度,為0則忽略。
.DLL命令 取當前進程偽句柄, 整數型, "kernel32", "GetCurrentProcess"
.DLL命令 api_ExitWindowsEx, 整數型, "user32.dll", "ExitWindowsEx", , 退出windows,并用特定的選項重新啟動
.參數 標志, 整數型, , 0.注銷; 1.關機; 2.重啟; 3.待機
.參數 保留值, 整數型, , dwReserved,保留,設為零
調用的DLL命令:
.DLL命令 GetWindowLongA, 整數型, "user32", "GetWindowLongA", , 取窗口特征_,函數功能:該函數獲得有關指定窗口的信息,函數也獲得在額外窗口內存中指定偏移位地址的32位度整型值。從指定窗口的結構中取得信息 由nIndex決定.零表示出錯
.參數 窗口句柄, 整數型, , 欲為其獲取信息的窗口的句柄窗口句柄及間接給出的窗口所屬的窗口類。
.參數 屬性, 整數型, , 欲取回的信息可以是下述任何一個常數:;GWL_EXSTYLE:擴展窗口樣式;GWL_STYLE:窗口樣式;GWL_WNDPROC:該窗口的窗口函數的地址;GWL_HINSTANCE:擁有窗口的實例的句柄;GWL_HWNDPARENT:該窗口之父的句柄.不要用SetWindowWord來改變這個值;GWL_ID:對話框中一個子窗口的標識符;GWL_USERDATA:含義由應用程序規定;DWL_DLGPROC:這個窗口的對話框函數地址;DWL_MSGRESULT:在對話框函數中處理的一條消息返回的值;DWL_USER:含義由應用程序規定;nlndex:指定要獲得值的大于等于0的值的偏移量。有效值的范圍從0到額外窗口內存空間的字節數一4例如,若指定了12位或多于12位的額外類存儲空間,則應設為第三個32位整數的索引位8。要獲得任意其他值,指定下列值之一: GWL_EXSTYLE;獲得擴展窗日風格。
.DLL命令 SetWindowLongA, 整數型, "user32", "SetWindowLongA", , 置窗口特征_,函數功能:該函數改變指定窗口的屬性。函數也將在指定偏移地址的一個32位值存入窗口的額外窗口存。在窗口結構中為指定的窗口設置信息指定數據的前一個值—— 返回值:如果函數成功,返回值為給定的32位整數的原來的值。如果函數失敗,返回值為0。若想獲得更多錯誤信息,請調用GetLastError函數。備注:如果由hWnd參數指定的窗口與調用線程不屬于同一進程,將導致SetWindowLong函數失敗。 指定的窗口數據是在緩存中保存的,因此在調用SetWindowLong之后再調用SetWindowPos函數才O SetWindowLong函數所作的改變生效。 如果使用帶GWL_WNDPROC索引值的SetWindowLong函數替換窗口過程,則該窗日過程必須WindowProc回調函數說明部分指定的指導行一致。如果使用帶DWL_MSGRESULT索引值的SetWlndowLong函數來設置由一個對話框處理的消息的和值,應在此后立即返回TRUE。否則,如果又調用了其他函數而使對話框過程接收到一個窗口消息,套的窗口可能消息可能改寫使用DWL_MSGRESULT設定的返回值。 可以使用帶GWL_WNDPROC索引值的SetWindowLohg函數創建一個窗口類的子類,該窗口類是用于創建該窗口的類。一個應用程序可以一個系統類為子類,但是不能以一個其他進程產生的窗口類為于類。SetWindowLong函數通過改變與一個特殊的窗口類相聯系的窗口過程來創建窗口子類。從而使系統調用新的窗口過程而不是以前定義的窗口過程。應用程序必須通過調用CallWindowProc函數向前窗口傳遞未被新窗口處理的消息。允許應用程序創建一個窗口過程鏈??梢酝ㄟ^對RegisterClassEx函數中使用的WNDCLASSEX結構的chWndExtra單元指定一個非零值來保留額外窗口內存。不能通過調用帶GWL_HWNDPARENT索引值的SetWindowLong的函數來改變子窗口的父窗口。應使用SetParent函數。WindowsCE:nlndex參數必須是4個字節的倍數;不支持Unaligned access。
.參數 窗口句柄, 整數型, , hwnd欲為其取得信息的窗口的句柄窗口句柄,及間接聲明的該窗口所屬的類。
.參數 窗口信息值, 整數型, , nIndex給出了要設置的值的零起點的偏移地址。有效值為從0到額外窗口存儲空間的字節數一4。例如
.參數 窗口信息新值, 整數型, , dwNewLong由nIndex指定的窗口信息的新值
.DLL命令 SetWindowPos, 整數型, "user32.dll", "SetWindowPos", , 設置窗口位置_,函數功能:該函數改變一個子窗口,彈出式窗口式頂層窗口的尺寸,位置和Z序。子窗口,彈出式窗口,及頂層窗口根據它們在屏幕上出現的順序排序、頂層窗口設置的級別最高,并且被設置為Z序的第一個窗口。這個函數能為窗口指定一個新位置和狀態.它也可改變窗口在內部窗口列表中的位置.該函數與DeferWindowPos函數相似只是它的作用是立即表現出來的(在vb里使用:針對vb窗體如它們在win32下屏蔽或最小化則需重設最頂部狀態.如有必要請用一個子類處理模塊來重設最頂部狀態——返回值:如果函數成功,返回值為非零;如果函數失敗,返回值為零。若想獲得更多錯誤消息,請調用GetLastError函數。 備注:如果設置了SWP_SHOWWINDOW和SWP_HIDEWINDOW標志,則窗口不能被移動和改變大小。如果使用SetWindowLoog改變了窗口的某些數據,則必須調用函數SetWindowPos來作真正的改變。使用下列的組合標志:SWP_NOMOVEISWP_NOSIZEISWP_FRAMECHANGED。 有兩種方法將窗口設為最頂層窗口:一種是將參數hWndlnsertAfter設置為HWND_TOPMOST并確保沒有設置SWP_NOZORDER標志;另一種是設置窗口在Z序中的位置以使其在其他存在的窗口之上.當一個窗口被置為最頂層窗口時屬于它的所有窗口均為最頂層窗口而它的所有者的z序并不改變.如果HWND_TOPMOST和HWND_NOTOPMOST標志均未指定,即應用程序要求窗口在激活的同時改變其在Z序中的位置時,在參數hWndinsertAfter中指定的值只有在下列條件中才使用:
.參數 窗口句柄, 整數型, , Long欲定位的窗口
.參數 定位類型, 整數型, , hWndInsertAfter Long窗口句柄.在窗口列表中窗口hwnd會置于這個窗口句柄的后面.也可能選用下述值之一:
.參數 窗口新橫坐標, 整數型, , Long窗口新的x坐標.如hwnd是一個子窗口則x用父窗口的客戶區坐標表示
.參數 窗口新縱坐標, 整數型, , Long窗口新的y坐標.如hwnd是一個子窗口則y用父窗口的客戶區坐標表示
.參數 窗口新寬度, 整數型, , Long指定新的窗口寬度
.參數 窗口新高度, 整數型, , Long指定新的窗口高度
.參數 顯示方式, 整數型, , wFlags 窗口尺寸和定位的標志。該參數可以是下列值的組合:
.DLL命令 ShowWindow, 整數型, "user32", "ShowWindow", , 置窗口狀態_,控制窗口的可見性(在vb里使用:針對vb窗體及控件請使用對應的vb屬性) 如窗口之前是可見的則返回TRUE(非零)否則返回FALSE(零)請用下述常數
.參數 窗口句柄, 整數型, , 窗口句柄要向這個窗口應用由nCmdShow指定的命令
.參數 窗口狀態, 整數型, , 為窗口指定可視性方面的一個命令.請用下述任何一個常數;0隱藏窗口活動狀態給令一個窗口;1與9相同;2最小化窗口并將其激活;3最大化窗口并將其激活;4用最近的大小和位置顯示一個窗口同時不改變活動窗口;5用當前的大小和位置顯示一個窗口同時令其進入活動狀態;6最小化窗口活動狀態給令一個窗口;7最小化一個窗口同時不改變活動窗口;8用當前的大小和位置顯示一個窗口不改變活動窗口;9用原來的大小和位置顯示一個窗口同時令其進入活動狀態;nCmdShow Long為窗口指定可視性方面的一個命令.
.DLL命令 GetForegroundWindow, 整數型, "user32", "GetForegroundWindow", , 取前臺窗口句柄_,函數功能:該函數返回前臺窗口(用戶當前工作的窗口)。系統分配給產生前臺窗口的線程一個稍高一點的優先級。 獲得前臺窗口的句柄.這里的“前臺窗口”是指前臺應用程序的活動窗口windows nt支持多個桌面它們相互間是獨立的.每個桌面都有自己的前臺窗口
.DLL命令 ChangeDisplaySettings, 整數型, , "ChangeDisplaySettingsA"
.參數 lpDevMode, 短整數型, 傳址
.參數 dwFlags, 整數型
.DLL命令 EnumDisplaySettings, 整數型, , "EnumDisplaySettingsA"
.參數 lpszDeviceName, 整數型
.參數 iModeNum, 整數型
.參數 lpDevMode, 短整數型, 傳址
.DLL命令 取程序或DLL句柄, 整數型, "kernel32", "GetModuleHandleA", , 獲取一個應用程序或動態鏈接庫的模塊句柄 如執行成功成功,則返回模塊句柄。零表示失敗。會設置GetLastError
.參數 模塊名, 文本型, , 指定模塊名,這通常是與模塊的文件名相同的一個名字。例如,NOTEPAD.EXE程序的模塊文件名就叫作NOTEPAD;
.DLL命令 取DLL函數地址, 整數型, "kernel32", "GetProcAddress", , 返回函數地址 成功返回DLL庫模塊內函數地址
.參數 DLL句柄, 整數型, , DLL庫模塊的句柄,可以調用 LoadLibrary 函數返回。
.參數 DLL庫模塊內函數名, 文本型, , DLL庫模塊內函數名
.DLL命令 取當前進程偽句柄, 整數型, "kernel32", "GetCurrentProcess"
.DLL命令 載入動態鏈接庫_, 整數型, , "LoadLibraryA"
.參數 lpFileName, 文本型
.DLL命令 取DLL函數地址_, 子程序指針, , "GetProcAddress"
.參數 hMod, 整數型
.參數 lpFileName, 文本型
.DLL命令 設置系統鉤子, 整數型, , "SetWindowsHookExA"
.參數 idHook, 整數型
.參數 lpfn, 子程序指針
.參數 nMod, 整數型
.參數 dwThreadID, 整數型
.DLL命令 關閉全局鉤子, 邏輯型, , "UnhookWindowsHookEx"
.參數 hhook, 整數型
.DLL命令 釋放動態鏈接庫_, 整數型, "kernel32.dll", "FreeLibrary"
.參數 庫句柄, 整數型, , hLibModule,要釋放的一個庫句柄
.DLL命令 創建進程快照, 整數型, , "CreateToolhelp32Snapshot"
.參數 快照類型, 整數型
.參數 進程標識, 整數型
.DLL命令 開始進程快照, 整數型, , "Process32First"
.參數 快照句柄, 整數型
.參數 線程信息輸出變量, 進程信息輸出
.DLL命令 繼續進程快照, 整數型, , "Process32Next"
.參數 快照句柄, 整數型
.參數 線程信息輸出變量, 進程信息輸出
.DLL命令 修改虛擬保護, 邏輯型, "kernel32", "VirtualProtectEx"
.參數 hProcess, 整數型, , 對象的進程句柄,可以使用函數 OpenProcess() 返回。
.參數 lpAddress, 整數型, , 虛擬信息.BaseAddress
.參數 dwSize, 整數型, , 虛擬信息.RegionSize
.參數 flNewProtect, 整數型, , 修改類型,#PAGE_EXECUTE_READWRITE 64為可讀寫模式
.參數 lpflOldProtect, 整數型, 傳址, 虛擬信息.Protect
.DLL命令 返回虛擬信息, 整數型, "kernel32", "VirtualQueryEx"
.參數 hProcess, 整數型, , 對象的進程句柄,可以使用函數 OpenProcess() 返回。
.參數 lpAddress, 整數型, , 對象指針地址
.參數 lpBuffer, 虛擬信息, , 返回的虛擬信息
.參數 dwLength, 整數型, , 信息長度,已知 28
.DLL命令 寫內存字節, 邏輯型, "kernel32", "WriteProcessMemory", , 在指定進程中寫內存
.參數 hProcess, 整數型, , 對象的進程句柄,可以使用函數 OpenProcess() 返回。
.參數 起始寫入地址, 整數型, , 起始寫入地址
.參數 要寫入的內容, 字節集, , 本參數的類型也能是“字節”型。
.參數 寫入長度, 整數型, , 寫入的數據長度。
.參數 實際寫入長度, 整數型, , 實際寫入的數據長度,為0則忽略。
.DLL命令 API_GetWindowThreadProcessId, 整數型, "user32", "GetWindowThreadProcessId", , ; 獲取與指定窗口關聯在一起的一個進程和線程標識符 擁有窗口的線程的標識符
.參數 hwnd, 整數型, , 指定一個變量,用于裝載擁有那個窗口的一個進程的標識符
.參數 lpdwProcessId, 整數型, 傳址, 指定窗口句柄;
.DLL命令 API_尋找頂級窗口, 整數型, "user32", "FindWindowA", , 尋找窗口列表中第一個符合指定條件的頂級窗口(在vb里使用:FindWindow最常見的一個用途是獲得ThunderRTMain類的隱藏窗口的句柄;該類是所有運行中vb執行程序的一部分。獲得句柄后,可用api函數GetWindowText取得這個窗口的名稱;該名也是應用程序的標題) 找到窗口的句柄。如未找到相符窗口,則返回零。會設置GetLastError
.參數 窗口類名, 文本型, , 指向包含了窗口類名的空中止(C語言)字串的指針;或設為零,表示接收任何類
.參數 窗口文本, 文本型, , 指向包含了窗口文本(或標簽)的空中止(C語言)字串的指針;或設為零,表示接收任何窗口標題 示例Dim hw&, cnt&Dim rttitle As * 256hw& = FindWindow("ThunderRT5Main", vbNullString) ' ThunderRTMain under VB4cnt = GetWindowText(hw&, rttitle, 255)MsgBox Left, 0, "RTMain title";
易語言簡單的程序防爆暗樁功能源碼,錯誤提示管理_,FF25_,子程序1,子程序2,CallWindowProcA,lstrcpyn...
易語言簡單游戲資源打包例程寫游戲體會源碼,繪制網格頁面,檢測鍵盤控制,繪制預備頁面,取運行時間_...
易語言私服登錄器制作例程之游戲商城源碼,初始化,管理商城,管理元寶,管理充值卡,子程序_刷新列表,子程序_刷新充值卡列表...
易語言破天一劍登錄器支持多區商城充值卡賬號管理源碼,取MD5,API_CryptAcquireContext,API_CryptCreateHash,API_CryptReleaseContext,API_CryptHashData,API_CryptDestroyHash,API_CryptGetHashParam,DLL命令1,子程序_創建快捷...
易語言根據兲訫ve的修改的暗樁處理源碼,錯誤提示管理_,FF25_,子程序1,子程序2,驗證注冊碼,CallWindowProcA,lstrcpyn...
易語言樹型框配合數據庫例程源碼,子程序_初始支出,子程序_讀入支出,子程序_日常管理表頭,子程序_樹形框_首級菜單,子程序_是否有子項,子程序_列出當月支出,子程序_列出支出,子程序...
易語言圖片浮雕效果字形窗口源碼,輸出字形窗口,啟動路徑分支_,設置背景模式_,文本繪圖_,結束路徑分支_,PathToRegion,設置窗口區域_,選入設備場景_,用指定屬性創建邏輯字體_,刪除對象_,取...
易語言點點通訊錄源碼,刷新,顯示,清空資料,得到焦點,失去焦點,改變背景色,讀出資料...
易語言api截圖位圖源碼,創建內存場景_,創建GDI對象_,取位圖二進制位_,置位圖到設備場景_,選入設備場景_,刪除設備場景_,刪除對象_,復制場景位圖_,取設備場景_...