api hook完全手册

api hook完全手册

ID:1354790

大小:28.02 KB

页数:22页

时间:2017-11-10

api hook完全手册_第1页
api hook完全手册_第2页
api hook完全手册_第3页
api hook完全手册_第4页
api hook完全手册_第5页
资源描述:

《api hook完全手册》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、http://blog.csdn.net/ATField/archive/2007/02/10/1507122.aspxAPIHook完全手册收藏2007年02月10日19:20:00注:本文是根据我两年前写的一个系统行为监测程序写成(参考了一些书籍和文章)。最近在论坛上看到有不少人在问关于APIHook的问题,便写成此文,希望能对朋友们在写APIHook代码的时候能够有所帮助。1基本原理APIHook是什么我就不多说了,直接进入正题。APIHook技术主要有下面的技术难点:1.如何将自己的的代码Inje

2、ct到其他进程2.如何Hook到API1.1代码的Injection常用的方法有:1.使用注册表HKLMSoftwareMicrosoftWindowsNTCurrentVersionWindowsAppInit_DLLs这种方法可以指定多个DLL,用空格隔开。这些DLL会被任何用到User32.dll的所有程序自动加载。当User32.dll加载的时候,User32.dll的DllMain会收到一个DLL_PROCESS_ATTACH通知,User32在这个时候读取注册表项中的值,调用Loa

3、dLibrary加载各个DLL。显然使用这种方法要求设置注册表之后立刻重起系统,不过一般情况下这不是大问题。这种方法的主要问题在于,只有用到User32.dll的应用程序才会被Inject。所有的GUI和少部分CUI程序会用到User32.dll,所以如果你的APIHook程序不打算监视CUI程序的话,那么可能问题并不太大。但是如果你的APIHook程序需要监视系统中所有进程的话,这种方法的限制将是非常致命的。2.调用SetWindowsHookEx(WH_GETMESSAGE,…,0)可以使用SetWi

4、ndowsHookEx(WH_GETMESSAGE,…,0)设置全局的消息钩子,虽然可能你的程序并不用到消息钩子,但是钩子的一个副作用是会将对应的DLL加载到所有的GUI线程之中。类似的,只有用到GUI的进程才会被挂接。虽然有这种限制,这种方法仍然是最常用的挂接进程的方法。3.使用CreateRemoteThread函数在目标进程中创建远程线程这种方法可以在任意的目标进程中创建一个远程线程,远程线程中可以执行任意代码,这样便可以做到把我们的代码Inject到目标进程中。这种方法具有最大的灵活性,但是难度也

5、最高:a)远程线程代码必须可以自重定位b)要能够监视进程的启动和结束,这样才可以挂接到所有进程这两个问题都是可以解决的,在本文中我将重点讲述如何创建远程线程和解决这两个问题。4.如果你只是要挂接某个特定进程的并且情况允许你自己来创建此进程,你可以调用CreateProcess(…,CREATE_SUSPENDED)创建子进程并暂停运行,然后修改入口代码使之调用LoadLibrary加载自己的DLL。该方法在不同CPU之间显然是无法移植的。1.2HookAPI常用的方法有:1.找到API函数在内存中的地址,

6、改写函数头几个字节为JMP指令跳转到自己的代码,执行完毕再执行API开头几个字节的内容再跳回原地址。这种方法对CPU有较大的依赖性,而且在多线程环境下可能出问题,当改写函数代码的时候有可能此函数正在被执行,这样做可能导致程序出错。2.修改PE文件的IAT(ImportAddressTable),使之指向自己的代码,这样EXE/DLL在调用系统API的时候便会调用你自己的函数2PE文件结构和输入函数Windows9x、WindowsNT、Windows2000/XP/2003等操作系统中所使用的可执行文件格

7、式是纯32位PE(PortableExecutable)文件格式,大致如下:文件中数据被分为不同的节(Section)。代码(.code)、初始化的数据(.idata),未初化的数据(.bss)等被按照属性被分类放到不同的节中,每个节的属性和位置等信息用一个IMAGE_SECTION_HEADER结构来描述。所有的这些IMAGE_SECTION_HEADER结构组成一个节表(SectionTable),这个表被放在所有节数据的前面。由于数据按照属性被放在不同的节中,那么不同用途但是属性相同的数据可能被放在

8、同一个节中,因此PE文件中还使用IMAGE_DATA_DIRECTORY数据目录结构来指明这些数据的位置。数据目录和其他描述文件属性的数据和在一起称为PE文件头。PE文件头被放在节和节表的前面。PE文件中的数据位置使用RVA(RelativeVirtualAddress)来表示。RVA指的是相对虚拟地址,也就是一个偏移量。当PE文件被装入内存中的时候,Windows把PE文件装入到某个特定的位置,称为映像基址(ImageBas

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。