毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 计算机论文 >> 正文

DLL注入和API拦截Windows操作系统下进程隐藏技术研究 第4页

更新时间:2016-11-14:  来源:毕业论文
.软件的关键技术
5.1DLL注入
在Windows系统中,每个进程都有自己的私有地址空间,进程不能创建属于另一个进程的内存指针。也就是说,Windows下应用程序有自己的地址空间,它们只能调用自己地址空间中的函数,所以在挂钩API之前,必须将一个可以代替API执行的函数的执行代码注入到目标进程,然后再将目标进程对该API函数的调用改为对注入到目标进程自定义的函数的调用。
而远程线程技术正是通过特殊的内核编程手段,打破进程界限来访问另一进程的地址空间,以达到对自身进行隐藏的目的。远程线程注入DLL技术指的是通过在某进程中创建远程线程的方法进入该进程的内存空间,然后在其内存空间中加载启动DLL程序。
 可以使用Windows钩子技术的把DLL注入到目标进程中,注入方法一般是安装WH_GetMessaage钩子。Windows下的应用程序大部分都需要调用GetMessage或PeekMessage函数从消息队列中获取消息,所以它们都会加载钩子函数所在DLL。安装WH_GetMessage钩子的目的是让其他进程加载钩子函数所在的DLL,所以一般仅在钩子函数中调用CallNextHookEx函数,不做什么有用的工作。代码如下示:
 LRESULTW INAP I GetMsgProc(int code,WPARAM wParam,LPARAM lParam)
{ return::CallNextHookEx(g_hook,code,wParam,lParam);}
 如果要将DLL注入到特定进程中,一般是将该进程中主线程的线程ID传递给SetWindowsHookEx函数;而如果要将DLL注入到所有进程中,安装一个系统范围内的钩子即可(即将0作为线程ID传递给SetWindowsHookEx函数)。常用的注入DLL的方法还包括使用注册表注入DLL和使用远程线程注入DLL。
5.2API拦截
(1)通过改写代码拦截API。有许多拦截的方法是基于可执行代码的改写,第一种方法是改变在Call指令中使用的函数地址。它的基本思路是检索出目标进程需要拦截的API的Call指令,然后把原先的地址改成为我们在钩子驱动器中提供的函数地址。第二种方法就是常用的JMP XXX的方法。主要的实现步骤是先找到原先的API函数的地址,然后把该函数的开始的几个字节用JMP指令代替,从而使得对该API函数的调用能够转向我们自定义的函数调用。
(2)通过修改输出地址表(IAT)拦截API.32位Windows可执行文件和DLL都采用了PE文件格式,修改输出地址表(IAT)技术就是基于这个事实。它是在Windows 下拦截API函数的常用的技术。再者,API函数全部都是导入函数,它们的实现代码在Kernel32.dll,User32.dll等Win32子系统模块中。
PE文件以64字节的DOS文件头本文来自辣\文/论~文?网,毕业论文 www.751com.cn 加7位QQ324~9114找原文(IMA GE_DOS_HEADER结构)开始,之后是一小段DOS程序,然后是248字节的NT文件头(IMA GE_NT_HEADERS结构)。NT文件头的偏移地址由IMA GE_DOS_HEADER结构E_lfanew 成员给出。应用程序启动时,载入器根据PE文件导入表记录的DLL名(Name域)加载相应DLL模块,再根据导入表的hint/name 表(OriginalFirst Thunk指向的数组)记录的函数名,取得函数的地址,将这些地址保存到导入表的IAT(First Thunk指向的数组)中。
应用程序在调用导入表函数时,要先到导入表的IAT中找到这个函数的地址,然后再调用。根据这个原理,定位导入表之后,即可定位导入地址表,然后,自定义函数的地址覆盖导入地址中真实的API函数地址。

上一页  [1] [2] [3] [4] [5] 下一页

DLL注入和API拦截Windows操作系统下进程隐藏技术研究 第4页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。