首页 > 其他分享 >Detours 的使用

Detours 的使用

时间:2024-02-19 11:23:52浏览次数:21  
标签:WriteProcessMemory DLL API 64 Detours 使用 bit

Detours 是一个用于在 ARM, ARM64, X86, X64 和 IA64 机器上拦截二进制函数的库。 Detours 最常用来拦截应用程序中的 win32 api 调用,比如添加调试工具。 拦截代码在运行时动态应用。

Detours 将目标函数的前几个指令替换为无条件跳转到用户提供的 detour 函数

它与 WriteProcessMemory 有所不同

区别:

  • WriteProcessMemory 是 Windows API 中的一个函数,用于将数据写入到指定进程的内存空间中。通常情况下,这个函数被用于与进程间通信,比如注入 DLL、修改其他进程的内存内容等。这个函数能够在一定程度上用于修改其他进程的行为,因此在一些涉及软件修改的场景中被使用。
  • Detours 是 Microsoft Research 开发的一种库,用于在 Windows 平台上修改函数调用的行为。它允许开发者截获特定函数的调用,并将其重定向到自定义的函数中,从而实现对目标函数的修改、监视和扩展。Detours 在软件开发中被广泛用于实现各种目的,包括代码注入、API hooking、性能分析等。

结合使用:

  • 在某些情况下,可以将 WriteProcessMemory 和 Detours 结合使用,以实现对其他进程的函数调用的修改和扩展。例如,可以使用 WriteProcessMemory 在目标进程中注入 DLL,然后使用 Detours 修改目标进程的某些函数调用,以实现一些特定的行为,比如游戏作弊、反作弊等。
  • 通常情况下,Detours 会更适合用于修改目标进程内的函数调用,而不是直接修改其内存内容。因此,结合 WriteProcessMemory 和 Detours 使用时,可能会将 Detours 用于修改函数调用,而使用 WriteProcessMemory 用于注入所需的代码或 DLL。

项目上我们将其用于 hook 播放器声音,利用 UDP 将数据传回给我们的软件用于播放和传输

主要用到 DetourCreateProcessWithDllEx

功能:Create a new process and load a DLL into it. Chooses the appropriate 32-bit or 64-bit DLL based on the target process.

它可以根据目标进程自动加载 32-bit DLL 或者 64-bit DLL

方法:

To support both 32-bit and 64-bit applications on a single system, you must create two DLLs. One DLL must contain 32-bit code, the other DLL must contain 64-bit code. The DLLs must reside in the same directory and must have identical names except that the name of the 32-bit DLL should end with "32" and the name of the 64-bit DLL should end with "64". For example, matching DLLs would be named foo32.dll and foo64.dll.

You should use the DetourCreateProcessWithDllEx or DetourCreateProcessWithDlls API to start a process with your DLL. Furthermore, your DLLs must:

Export the DetourFinishHelperProcess API as export ordinal 1.

Call the DetourIsHelperProcess API in your DllMain function. Immediately return TRUE if DetourIsHelperProcess return TRUE.

Call the DetourCreateProcessWithDllEx or DetourCreateProcessWithDlls API instead of DetourCreateProcessWithDll to create new target processes.

文档参考:https://github.com/microsoft/detours/wiki/OverviewHelpers

demo 参考:https://github.com/microsoft/Detours/blob/main/samples/withdll/withdll.cpp

 

标签:WriteProcessMemory,DLL,API,64,Detours,使用,bit
From: https://www.cnblogs.com/strive-sun/p/18020699

相关文章

  • 免费xshell和xftp下载使用
    背景:最近xshell老是跳出提示说要更新,于是最终没忍住,就更新了,下班后关了机,今天一点进去的时候,不能用了!网上搜了搜,有说提供xshell激活秘钥的,有提供百度网盘地址让我下载的,折腾一通下来,我的C盘不知道咋就红了,还时不时冒出来一些游戏的页面。忍住,忍住没去找师父,然后找到了师父之前......
  • 多线程系列(二) -Thread类使用详解
    一、简介在之前的文章中,我们简单的介绍了线程诞生的意义和基本概念,采用多线程的编程方式,能充分利用CPU资源,显著的提升程序的执行效率。其中java.lang.Thread是Java实现多线程编程最核心的类,学习Thread类中的方法,是学习多线程的第一步。下面我们就一起来看看,创建线程的几种......
  • 熟练使用有棱有角的内存
    内存IC中邮电源,地址信号,数据信号,控制信号等用于输入输出的大量引脚(IC的引脚),通过为其指定地址(address),来进行数据的读写。现在大家使用的计算机至少有512M的内存。这就相当于512000个(512MB÷1KB=512K)1KB的内存IC。当然一台计算机中不大可能放入如此多的内存IC。通常情况下计算机......
  • 熟练使用有棱有角的内存
       内存是一种名为内存IC的电子元件,它有多种形式,从外部来看基本机制都一样,其中有电源、地址信号、数据信号、控制信号等用于输入输出的大量引脚,通过其指定地址进行数据读写。下图的例子是内存IC的一种——RAM:其中VCC和GND是电源,A0~A9是地址信号的引脚,D0~D7是数据信号的引脚,R......
  • Linux下tar命令简单使用
    简单使用tar-cfabc.tar/abc#创建归档文件tar-xfabc.tar#解包归档文件tar-czfabc.tar.gz/abc#创建压缩归档文件tar-xzfabc.tar.gz#解压文件tar-zxzfabc.tar.gz#解压文件并显示执行过程unzipabc.zip#解压文件unzip-da......
  • 使用Redis的ZSet集合实现接口限流
    背景一般在设计后端接口的时候,一般都会预估接口能承受的最大流量是多少。那么如果瞬时流量超过了接口的承载力,我们就需要考虑接口做限流处理了。限流实际上是指限制系统的输入流量和输出流量已保持系统的稳定性,防止极端条件下系统因为突然的请求激增而造成的崩溃。思考我们知......
  • 《程序是怎样跑起来的》第四章:熟练使用有棱有角的内存
    第四章深入探讨了计算机内存的奥秘。在此之前,我对内存的理解仅限于其作为数据存储的媒介,而这一章却让我看到了内存的多面性。内存,如同计算机的仓库,负责存储程序运行所需的数据和指令。但这个仓库并非毫无规则,而是有着严格的组织和结构。矢泽久雄以其独特的见解和深入浅出的方式,揭......
  • 第4章熟练使用有棱有角的内存
    内存:一种IC电子元件,常见DRAM(需要经常刷新保存数据)、SRAM(不需要刷新电路既可以保存数据),可以读取与写入,ROM(只能用来读取的内存)等形式内存物理组成:电源、地址信号、数据信号、控制信号,用来输入输出的IC引脚地址信号引脚数决定了内存能够表示的地址范围:表示地址范围=2^地址信号引脚......
  • 第四章 熟练使用有棱有角的内存 笔记
    在第四章中,我深入理解了内存的工作原理和优化使用的技巧。内存作为计算机的临时存储设备,对程序运行的效率和稳定性具有重要影响。书中详细解释了内存的管理机制,包括操作系统如何分配和回收内存空间,以及如何防止内存泄漏和溢出等问题。这些内容让我意识到,合理使用内存是提高程序性......
  • Python教程(27)——如何使用Python中的上下文管理器
    当我们在编写代码时,经常会遇到需要管理资源的情况,比如打开和关闭文件,如果遇到了一些异常情况,我们需要关闭资源,不然会导致资源泄露,虽然我们可以通过手动的方式来关闭,但如果有多个异常情况需要考虑的话,万一不小心漏了一处,就芭比Q了。所以,如果有一种更加优雅的方式来处理资源泄露的问......