`
yydy1983
  • 浏览: 47712 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

用hook实现dll注入详解

 
阅读更多
 文章作者:很遗憾不知道

需要一个用来注入的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演示动态生成,全部HOOK事例用hook实现dll注入详解"是一个深入学习Hook技术和DLL注入的好资料。通过实践这些示例,开发者可以更好地理解和掌握这两种技术,从而在实际项目中灵活运用。

    VC 窗口Hook 注入 DLL源码等相关资料.rar

    在提供的资料中,包含了多个源代码文件,这些文件分别展示了不同阶段的Hook和DLL注入实现。例如: 1. DLL源码:这部分代码通常包含一个导出函数,该函数在DLL被加载时执行。这里可能包含设置Hook的逻辑,如...

    SetWindowsHookEx进程dll注入

    DLL注入则是通过将动态链接库(DLL)加载到目标进程的地址空间来实现对目标进程行为的控制或扩展。 **DLL注入的基本原理:** DLL注入通常分为以下几个步骤: 1. 创建DLL:首先,开发者编写一个包含所需功能的DLL。...

    HookDLL.rar

    《HookDLL技术详解及其应用》 HookDLL,顾名思义,是一种利用动态链接库(DLL)实现钩子技术的方法。在Windows操作系统中,Hook机制允许开发者监控或修改其他应用程序的特定行为,如键盘输入、鼠标操作或者系统事件...

    delphi超级实例偏hacker

    Aphex 代码集.htm&lt;br&gt;文件夹防删除.txt 最小化Delphi内核.txt 来自 ly_liuyang 的三个代码.txt 深入了解String.txt 用Delphi创建NT2000账号.txt 用hook实现dll注入详解.txt 网友写的HookAPI源代码...

    Hook IAT hookdll资源表

    【标题】:Hook IAT(钩子导入地址表)与hookdll资源表 【描述】:在Windows操作系统中,Hook IAT(导入地址表)是一种常见的API钩子技术,用于拦截和修改特定API函数的调用行为。hookdll资源表通常包含关于哪些API...

    DLL注入、输入法与键盘HOOK

    以上就是“DLL注入、输入法与键盘HOOK”这一主题的主要知识点,包括DLL注入的不同方法、键盘HOOK的类型和用途,以及如何利用输入法和IME消息来实现特定的系统操作。这些技术虽然强大,但也需要谨慎使用,以避免侵犯...

    dotnet-csharpInlineHook是一个可以将托管dll注入到非托管进程hook

    《C# Inline Hook技术详解——将托管DLL注入非托管进程》 在.NET开发领域,有时候我们需要对非托管进程进行操作,比如调试、监控或者增强其功能。这时,一种常用的技术就是"Hook",即钩子。本文将深入探讨C# Inline...

    HOOK原理详解

    DLL注入是一种常用的HOOK技术,它通过向目标进程中注入DLL的方式来实现API拦截。这种方法通常涉及到以下关键技术点: - **创建远程线程**:利用`CreateRemoteThread` API创建一个远程线程,以加载并执行DLL中的代码...

    HookDLL.bak.rar

    《HookDLL.bak详解——深入理解Windows系统钩子与DLL注入技术》 HookDLL.bak是一个备份文件,通常与Windows操作系统中的动态链接库(DLL)和钩子技术有关。在这个文件名中,"HookDLL"暗示了我们正在讨论的是关于DLL...

    HookDLL.e.rar

    《HookDLL.e技术详解》 在计算机编程领域,HookDLL是一种常见的技术,它涉及到了动态链接库(DLL)和函数钩子(Function Hook)的概念。本文将深入探讨HookDLL.e的相关知识点,帮助读者理解其原理、应用以及实现...

    version.dll 劫持源代码

    **version.dll 劫持源代码详解** 在Windows操作系统中,`version.dll` 是一个系统级的动态链接库,主要用于处理应用程序的版本信息。它包含了读取和验证PE(Portable Executable)文件版本资源的函数。然而,有些...

    DXInput来做的键盘HOOK的软件源码

    ### DXInput实现键盘HOOK技术详解 #### 一、概述 DXInput实现的键盘HOOK技术是一种在Windows环境下通过DirectInput API捕获键盘输入的方法。这种方法广泛应用于游戏开发、自动化测试及键盘事件监听等领域。本篇...

    hook 钩子技术

    - **进程内Hook(In-Process Hook)**:只对当前进程内部的函数调用生效,例如DLL注入时使用的SetWindowsHookEx函数创建的Hook。 - **远程Hook(Remote Hook)**:将Hook代码注入到其他进程中,使得其他进程的特定...

    微信pc hook

    2. **注入DLL**: 使用如SetWindowsHookEx等系统函数将Hook DLL注入到微信进程。这通常需要管理员权限。 3. **设置Hook**: 在DLL中设置Hook,将代理函数绑定到目标API。 4. **处理结果**: 在代理函数中处理结果,可能...

    api hook原理

    2. **动态链接库(DLL)注入**:将包含Hook函数的DLL注入到目标进程中,利用DLL的导出函数替换原有的API调用,实现Hook的目的。 3. **系统钩子**:如`SetWindowsHookEx`,允许程序在系统级别设置钩子,捕获特定事件...

    xx.rar_CE注入hook教程_ce代码注入

    **CE注入Hook教程:CE代码注入详解** CE( Cheat Engine,作弊引擎)是一款广泛用于游戏修改和调试的工具,它允许用户对内存进行操作,包括查找内存地址、修改内存值以及实现代码注入。本教程主要面向新手,旨在...

    Hook NtOpenProcess

    《Hook NtOpenProcess技术详解》 在计算机编程领域,Hook技术是一种强大的工具,它允许开发者拦截和修改系统调用,以实现特定的功能或监控系统行为。本篇文章将深入探讨"Hook NtOpenProcess"这一特定的技术,以及其...

    注入的10种方法百度

    - **RegisterClassEx**和`CreateWindowEx`:在目标进程中创建窗口类和窗口,间接实现DLL注入。 - **注入APC(异步过程调用)**:利用线程的APC队列,将函数调用插入到目标进程的线程中。 - **Reflective DLL ...

    HOOK小工具(进程、窗口、全局)

    它允许开发者通过编程方式监控或改变其他程序的行为,例如,本例中提到的“用进程方法注入了带NP的游戏”,可能是指使用HOOK技术来修改游戏的某些行为或者获取游戏内部数据。 【知识点详解】 1. **HOOK技术**:...

Global site tag (gtag.js) - Google Analytics