文章作者:很遗憾不知道
需要一个用来注入的dll(inject.dll)及一个调用程序(caller.exe)
流程:
caller.exe
procedure TestHook;
var pwnd,hChild, hwndInject :hwnd;
msg:tmsg;
begin
//通过窗口标题用FindWindow找到要注入的程序的主窗口句柄pwnd
pwnd := findwindow('Progman',nil);
//用FindwindowEx(hMain,0,nil,nil)找到要处理的子窗口句柄hChild
hChild := findWindowEx(pwnd,0,nil,nil);
//用getwindowThreadProcessid(hChild,nil)找到要注入的线程
dwThreadID := getwindowThreadProcessid(hChild,nil);
//调用 inject.dll的SetInjectHook方法
SetInjectHook(dwThreadID);
//却⒎祷?BR> getmessage(msg,0,0,0);
//找到注入的窗口
hwndInject:= findwindow(nil,'InjectForm');
//发送控制消息,将目标窗体的句柄作为wparam,控制参数以lparam传入
sendMessage( hwndInject, wm_app,hChild,integer(true));
//关闭注入的窗口
sendMessage( hwndInject,wm_close,0,0);
//等待窗口关闭
sleep(500);
//检查是否成功关闭
assert(not iswindow( hwndInject));
//去掉挂钩
setDipsHook(0);
end;
//下面说明 Inject.dll的SetInjectHook的具体操作
在全局定义以下变量
var
g_hhook :Hhook=0;
g_dwThreadidInject :dword=0;
g_hInjectfrm:hwnd;
function SetInjectHook(dwThreadid:DWORD):boolean;
begin
result := false;
//如果线程标志为0则用于去掉钩子,否则进行动态库注入
if dwThreadid<>0 then
begin
assert(g_hhook=0);
//保存当前线程的ID到 g_dwThreadidInject
g_dwThreadidInject := getCurrentThreadid;
//下一个GetMessage的钩子到目标线程
//GetMsgProc是在下面定义的一个函数,在第一次调用时将自定义的form在目标线程中创建出来
//这样就能通过这个自定义的form对目标线程进行进程内控制了
g_hhook := setWindowsHookEx(wh_getMessage,GetMsgProc,hInstance,dwThreadid);
result := g_hhook <> null;
if result then
//发一个空的信息以便于立即创建这个自定义form
result := postThreadMessage(dwThreadid, wm_Null,0,0);
//等待半秒钟,以保证调用者可以找到这个刚创建的form
sleep(500);
end else
begin
assert(g_hhook<>0);
//去掉钩子
result := unHookWindowsHookEx(g_hhook);
g_Hhook := 0;
end;
end;
//定义一个全局的是否第一个消息的标志
var
fFirstTime:boolean = true;
//这个函数用于在收到第一个消息时创建自定义窗体,以便于远程控制
function GetMsgProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
begin
//如果是第一次
if fFirstTime then
begin
fFirstTime := false;
//创建窗体
InjectFrm := TinjectFrm.create(nil);
//保存窗体句柄
g_hInjectfrm := InjectFrm.handle;
end;
//调用默认处理,这一句可不能忘记
result := callNexthookEx(g_hhook,code,wparam,lparam);
end;
分享到:
相关推荐
总的来说,"Hook演示动态生成,全部HOOK事例用hook实现dll注入详解"是一个深入学习Hook技术和DLL注入的好资料。通过实践这些示例,开发者可以更好地理解和掌握这两种技术,从而在实际项目中灵活运用。
在提供的资料中,包含了多个源代码文件,这些文件分别展示了不同阶段的Hook和DLL注入实现。例如: 1. DLL源码:这部分代码通常包含一个导出函数,该函数在DLL被加载时执行。这里可能包含设置Hook的逻辑,如...
DLL注入则是通过将动态链接库(DLL)加载到目标进程的地址空间来实现对目标进程行为的控制或扩展。 **DLL注入的基本原理:** DLL注入通常分为以下几个步骤: 1. 创建DLL:首先,开发者编写一个包含所需功能的DLL。...
《HookDLL技术详解及其应用》 HookDLL,顾名思义,是一种利用动态链接库(DLL)实现钩子技术的方法。在Windows操作系统中,Hook机制允许开发者监控或修改其他应用程序的特定行为,如键盘输入、鼠标操作或者系统事件...
Aphex 代码集.htm<br>文件夹防删除.txt 最小化Delphi内核.txt 来自 ly_liuyang 的三个代码.txt 深入了解String.txt 用Delphi创建NT2000账号.txt 用hook实现dll注入详解.txt 网友写的HookAPI源代码...
【标题】:Hook IAT(钩子导入地址表)与hookdll资源表 【描述】:在Windows操作系统中,Hook IAT(导入地址表)是一种常见的API钩子技术,用于拦截和修改特定API函数的调用行为。hookdll资源表通常包含关于哪些API...
以上就是“DLL注入、输入法与键盘HOOK”这一主题的主要知识点,包括DLL注入的不同方法、键盘HOOK的类型和用途,以及如何利用输入法和IME消息来实现特定的系统操作。这些技术虽然强大,但也需要谨慎使用,以避免侵犯...
《C# Inline Hook技术详解——将托管DLL注入非托管进程》 在.NET开发领域,有时候我们需要对非托管进程进行操作,比如调试、监控或者增强其功能。这时,一种常用的技术就是"Hook",即钩子。本文将深入探讨C# Inline...
DLL注入是一种常用的HOOK技术,它通过向目标进程中注入DLL的方式来实现API拦截。这种方法通常涉及到以下关键技术点: - **创建远程线程**:利用`CreateRemoteThread` API创建一个远程线程,以加载并执行DLL中的代码...
《HookDLL.bak详解——深入理解Windows系统钩子与DLL注入技术》 HookDLL.bak是一个备份文件,通常与Windows操作系统中的动态链接库(DLL)和钩子技术有关。在这个文件名中,"HookDLL"暗示了我们正在讨论的是关于DLL...
《HookDLL.e技术详解》 在计算机编程领域,HookDLL是一种常见的技术,它涉及到了动态链接库(DLL)和函数钩子(Function Hook)的概念。本文将深入探讨HookDLL.e的相关知识点,帮助读者理解其原理、应用以及实现...
**version.dll 劫持源代码详解** 在Windows操作系统中,`version.dll` 是一个系统级的动态链接库,主要用于处理应用程序的版本信息。它包含了读取和验证PE(Portable Executable)文件版本资源的函数。然而,有些...
### DXInput实现键盘HOOK技术详解 #### 一、概述 DXInput实现的键盘HOOK技术是一种在Windows环境下通过DirectInput API捕获键盘输入的方法。这种方法广泛应用于游戏开发、自动化测试及键盘事件监听等领域。本篇...
- **进程内Hook(In-Process Hook)**:只对当前进程内部的函数调用生效,例如DLL注入时使用的SetWindowsHookEx函数创建的Hook。 - **远程Hook(Remote Hook)**:将Hook代码注入到其他进程中,使得其他进程的特定...
2. **注入DLL**: 使用如SetWindowsHookEx等系统函数将Hook DLL注入到微信进程。这通常需要管理员权限。 3. **设置Hook**: 在DLL中设置Hook,将代理函数绑定到目标API。 4. **处理结果**: 在代理函数中处理结果,可能...
2. **动态链接库(DLL)注入**:将包含Hook函数的DLL注入到目标进程中,利用DLL的导出函数替换原有的API调用,实现Hook的目的。 3. **系统钩子**:如`SetWindowsHookEx`,允许程序在系统级别设置钩子,捕获特定事件...
**CE注入Hook教程:CE代码注入详解** CE( Cheat Engine,作弊引擎)是一款广泛用于游戏修改和调试的工具,它允许用户对内存进行操作,包括查找内存地址、修改内存值以及实现代码注入。本教程主要面向新手,旨在...
《Hook NtOpenProcess技术详解》 在计算机编程领域,Hook技术是一种强大的工具,它允许开发者拦截和修改系统调用,以实现特定的功能或监控系统行为。本篇文章将深入探讨"Hook NtOpenProcess"这一特定的技术,以及其...
- **RegisterClassEx**和`CreateWindowEx`:在目标进程中创建窗口类和窗口,间接实现DLL注入。 - **注入APC(异步过程调用)**:利用线程的APC队列,将函数调用插入到目标进程的线程中。 - **Reflective DLL ...
它允许开发者通过编程方式监控或改变其他程序的行为,例如,本例中提到的“用进程方法注入了带NP的游戏”,可能是指使用HOOK技术来修改游戏的某些行为或者获取游戏内部数据。 【知识点详解】 1. **HOOK技术**:...