hook技术3建立远程线程的方法

hook技术3建立远程线程的方法

ID:31816399

大小:64.48 KB

页数:9页

时间:2019-01-18

hook技术3建立远程线程的方法_第1页
hook技术3建立远程线程的方法_第2页
hook技术3建立远程线程的方法_第3页
hook技术3建立远程线程的方法_第4页
hook技术3建立远程线程的方法_第5页
资源描述:

《hook技术3建立远程线程的方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Hook技术3建立远程线程的方法这是我觉得一种非常好的Hook技术,口己也非常喜欢,我先引用Windows核心编程里的讲解,最后在文后附上一个封装好的类,这种方法非常适合在别人的程序里隐藏自己的程序,因此得到了广大木马爱好者的青眯。插入DLL的第三种方法是使用远程线程。这种方法具有更大的灵活性。它要求你懂得若干个Windows待性、如进程、线程、线程同步、虚拟内存管理、DLL和Unicode等(如果对这些待性不清楚,请参阅木书中的有关章节)。Windows的大多数函数允许进程只对口己进行操作。这是很好的一个特性,因为它能够防止一个进程破坏另一个进

2、程的运行。但是,有些函数却允许一个进程对另一个进程进行操作。这些函数大部分锻初是为调试程序和其他工具设计的。不过任何函数都可以调用这些函数。这个DLL插入方法基本上要求0标进程中的线程调用LoadLibrary函数来加载必要的DLL。由于除了口己进程屮的线程外,我们无法方便地控制其他进程中的线程,因此这种解决方案要求我们在冃标进程屮创建一个新线程。由于是自己创建这个线程,因此我们能够控制它执行什么代码。幸好,Windows提供了一个称为CreateRemoteThread的函数,使我们能够非常容易地在另一个进程中创建线程:HANDLECreate

3、RemoteThread(HANDLEhProcess,PSECURITY_ATTRIBUTESpsa,DWORDdwStackSize,PTHREAD_START_ROUTINEpfnStartAddr,PVOIDpvParam,DWORDfdwCreate,PDWORDpdwThreadld);CreateRemoteThread-^/CreateThread很相f以,差另9在于它增加了一个参数hProcess。该参数指明拥有新创建线程的进程。参数pfnStartAddr指明线程函数的内存地址。当然,该内存地址与远程进程是相关的。线程函数的代

4、码不能位于你自己进程的地址空间中。注意在Windows2000中,更常用的函数CreateThread是在内部以下面的形式来实现的:HANDLECreateThread(PSECURITY_ATTRIBUTESpsa,DWORDdwStackSize,PTHREAD_START_ROUTINEpfnStartAddr,PVOIDpvParam,DWORDfdwCreate,PDWORDpdwThreadID){return(CreateRemoteThread(GetCuiTentProcess(),psa,dwStackSize,pfnStar

5、tAddr,pvParam,fdwCreate,pdwThreadID));}在Windows98中,CreateRemoteThread函数不存在有用的实现代码,它只是返冋NULLo调用GctLastError函数将返回ERROR_CALL_NOT_IMPLEMENTED(CreateThread函数包含用于在调用进程屮创建线程的完整的实现代码)。由于CreateRemoteThread没有实现,因此,在Windows98下,不能使用本方法來插入DLL。好了,现在你已经知道如何在另一个进程屮创建线程了,但是,如何才能让该线程加载我们的DLL呢?

6、答案很简单,那就是需要该线程调用LoadLibrary函数:HINSTANCELoadLibrary(PCTSTRpszLibFile);如果观察WinBase.h文件中的LoadLibrary函数,你将会发现下面的代码:HINSTANCEWINAPILoadLibraryA(LPCSTRpszLibFileName);HINSTANCEWINAPILoadLibraryW(LPCWSTRpszLibFileName);#ifdefUNICODE#defineLoadLibraryLoadLibraryW#clsc#defineLoadLibra

7、ryLoadLibraryA#endif//!UNICODE实际上有两个LoadLibrary函数,R卩LoadLibraryA和LoadLibraryW.这两个函数之间存在的唯一差别是,传递给函数的参数类型不同。如果将库的文件名作为ANSI字符串来存储,那么必须调用LoadLibraryA(A是指ANSI)。如果将文件名作为Unicode字符串来存储,那么必须调用LoadLibraryW(W是指通配符)。不存在单个LoadLibrary的t青况,只有LoadLibraryA和LoadLibraryWe关寸于大多数应用程序來说,LoadLibra

8、ry宏川以扩展为LoadLibraryA®幸好LoadLibrary函数的原型与一个线程函数的原型是相同的。下面是一个线程函数的原型:D

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

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

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