欢迎来到天天文库
浏览记录
ID:17424418
大小:39.53 KB
页数:33页
时间:2018-08-31
《dll注入进程的学习笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、DLL注入进程的学习笔记DLL注入进程的学习笔记以下说写的是我看学习《Delphi下深入Windows编程》中关于进程的学习笔记问题:如何实现自己的进程代码在系统中运行,而在任务管理器和服务管理中找不到?程序实现思想:在写好一个程序后,当运行这个程序的时候,系统会自动分配一个4G大的虚拟地址私有空间供这个进程运行并给这个进程一个进程ID(PID),以便能对这个进程的一些操作这个写好的程序,使它能在windows多任务环境中运行,并在任务管理器中添加这个进程的名字和其他进程运行的信息。如果这个是个服务进程,则在服务管理中也能看到这个进程。那问题是我们有没有办法使我们的进程不在其中显示呢?答案是肯
2、定的。=====================================================================================方法是什么呢?方法就是:(DLL)动态链接库由于进程在运行时,都有各自的私有空间,如果一个进程要到另一个进程中去,方法很多(其他的我不太清楚)然而DLL的运行一般是作为进程的一个模块(当然也可以是一个进程)所以我们可以考虑,把自己写的这个程序写到一个DLL文件中,并把它注入到系统正在运行的某进程的地址空间中。---------------------------------------------------问题又来了,
3、要怎么注入到某进程的地址中呢?当进程在调用某一个DLL中函数的时候,系统会强制把这个DLL完全映射到这个进程的地址中,供这个进程来使用这个DLL中的函数,并使这个DLL成为进程的一部分,进程模块。---------------------------------------------------------------------------------------问题又来了,要怎样才能使系统中运行的进程,来调用自己写的这个DLL呢?这里涉及到一个难点,就是:钩子函数。(HOOK)钩子的概念和方法等等.....参看第二章钩子和SDK、MSDN等(其他什么参考);在这里,就问题来说一下钩子:钩
4、子有局部和全局之分,这里要注入DLL就的使用全局钩子全局钩子必须写在DLL中,它是用来拦截系统中的消息的。什么意思呢?就是当系统中某一个窗口在接收到某一消息时,这个消息不会先到这个窗口,而是先到这个钩子函数中,由这个钩子先处理这个消息后在传递到这个接收消息的窗口当然又可以不对这个消息做任何处理。关于消息:这是个很庞大的内容,请参看SDKMSDN等其他参考。说到这里,大家可能已经基本明白一点了,也就是:当某窗口的消息被一个钩子截获时,相当于,这个窗口或进程调用了这个DLL中的钩子函数,系统便会强制把这个DLL文件映射到这个进程的地址空间中,供这个进程使用。总结下这个问题:就是你只要在一个DLL中
5、安装一个钩子,使它运行实现对系统或某线程的挂钩,就可以让所有进程或某进程调用自己的这个DLL中的钩子函数了,也就是实现把这个DLL注入到了进程地址中了。----------------------------------------------------------------问题又有了一个,如何运行写好的这个DLL并注入到某进程中呢?DLL是动态库文件,不是可执行文件,不能双击后就可以运行,所以可以写一个窗口程序来调用这个DLL中的函数,使钩子运行。(例如:show或其他方法调用)从某中意义上来说,这样其实已经实现了DLL注入,但是,问题如下。-----------------------
6、------------------------------------------问题是:当你关闭这个窗口程序时,这个DLL也会随之关闭,那我们要怎样才能让DLL在系统中不被关闭和发现呢?既然钩子可以把自己所在的DLL注入到所有进程中,那么我们是不是可以考虑使用一个DLL钩子调用另一个DLL实现完全注入呢?假设:我们有三个文件,并且要注入到的进程为Explorer.exe中。1、main.exe//主程序,实现完全注入后关闭,//用来把Install.dll注入到所有进程中。2、Install.dll//被主程序调用的库,实现完全注入后关闭,//用来把MyDll.dll注入的某进程中。3、M
7、yDll.dll//自己的DLL文件,要被注入到某进程的库文件。首先:使用main.exe调用Install.dll中的消息钩子函数,使Install.dll注入到所有系统中的进程空间中(包括Explorer.exe)。然后:在Install.dll中使用GetCurrentProcessID函数来判断这个DLL所在的进程。GetCurrentProcessID函数在后面会说明。这里有个小问题,就
此文档下载收益归作者所有