1. 代码逆向分析中,钩取是一种截取信息、更改程序执行流向、添加新功能的技术。
  • 使用反汇编器/调试器把我程序的结构与工作原理。
  • 开发需要的钩子代码,拥有修改Bug、改善程序功能。
  • 灵活操作可执行文件与进程内存,设置钩子代码
  1. 钩取技术多种多样,其中钩取Win32 API的技术被称为API钩取,它与消息钩取共同广泛应用于用户模式。

API

  1. API(Application Programming Interface,应用程序编程接口)。
  2. Windows OS中,用户程序要使用系统资源(内存、文件、网络、视频、音频等)时无法直接访问,这些资源都是由Windows OS直接管理的,出于多种考虑(稳定性、安全、效率等),Windows OS禁止用户程序直接访问它们,用户需要使用这些资源时,必须向系统内核申请,若没有API函数,则不能创建出任何有意义的应用程序。
  3. 为运行实际的应用程序代码,需要加载许多系统库(DLL),所有进程都会默认加载kernel32.dll库,kernel32.dll又会加载ntdlld.dll库。
    在这里插入图片描述
  4. 用户模式中的应用程序代码要访问系统资源时,向ntdll.dll向内核模式提出访问申请。
  5. 假设notepad.exe要打开c:\abc.txt文件,首先再程序代码中调用msvcrt!fopen() API,然后引发一系列的API调用,如下所示:
msvcrt!fopen()
	kernel32!CreateFileW()
		ntdll!ZwCreateFile()
			SYSENTER
				->进入内核模式
  1. 使用常规系统资源的API会经由kernel32.dll与ntdll.dll不断向下调用,最后通过SYSENTER命令进入内核模式。

API钩取

  1. 通过API钩取技术可以实现对某些Win32 API调用过程的拦截,并获得相应的控制权限,使用API钩取技术优势如下:
  • 在API调用前/后运行用户的”钩子“代码。
  • 查看或操作传递给API的参数或API函数的返回值。
  • 取消对API的调用,或更改执行流,运行用户代码。
  1. 正常调用API
  • 在应用程序代码区域中调用CreateFile() API,由于CreateFile() API是kernel32.dll的导出函数,所以,kernel32.dll区域中的CreateFile() API会被调用执行并正常返回。
    在这里插入图片描述
  1. 钩取API调用
  • 用户首先使用DLL注入技术将hook.dll注入目标进程的内存空间,然后用hook!MyCreateFile()钩取对kernel32!CreateFile()的调用,这样,每当目标进程要调用kernel32!CreateFile() API时都会先调用hook!MyCreateFile()。
    在这里插入图片描述

技术图表

在这里插入图片描述

  1. 方法对象
  • 根据针对的对象不同,API钩取方法大致可以分为静态方法与动态方法。
  • 静态方法针对的是文件,而动态方法针对的是进程内存。
    在这里插入图片描述
  1. 位置
  • API钩取时应该操作哪部分。
  • IAT:IAT将其内部的API地址更改为钩取函数地址,该方法的优点是实现起来非常简单,缺点是无法钩取不再IAT而在程序中使用的API。
  • 代码:系统库映射到进程内存时,从中查找API的实际地址,并直接修改代码,通过有如下几种选择:
    使用JMP指令修改起始代码。
    覆写函数局部。
    仅更改必须部分的局部。
  • EAT:将记录在DLL的EAT的API起始地址更改为钩取函数地址,也可以实现API钩取。
  1. 技术
  • 调试
    调试器拥有被调试进程的所有权限(执行控制、内存访问等),所以可以向被调试进程的内存任意设置钩取函数。
    在用户编写的程序中使用调试API附加到目标进程,然后设置钩取函数,这样,重启运行就能完全实现API钩取了。
  • 注入
    DLL注入:使用DLL注入技术可以驱使目标进程加载用户指定的DLL文件,使用该技术时,现在要注入的DLL中创建钩取代码与设置代码,然后再DllMain()中调用设置代码,注入的同时即可完成API钩取。
    代码注入:代码注入技术实现起来要略复杂一些,他不像DLL注入技术那样针对的是完整的PE映像,而是在执行代码与数据被注入的状态下直接获取自身所需API地址来使用,访问代码中的内存地址时必须十分小心,防止访问到错误地址。
  1. API
  • 给出具体实现过程中要使用的API。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐