浅析木马服务端的生成技术.docxVIP

  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文档。上传文档
查看更多
浅析木马服务端的生成技术

有些木马在解压缩之后只会有一个客户端程序,用户可以通过在客户端的一些设置工作来自动生成针对性比较强的服务端程序,例如特定的端口、击键木马的邮件地址、密码、SMTP服务器等等。在本文中,我将简要地探讨这一技术的实现。从“生成”的这个事实来看,我们可以猜想客户端程序可能本身绑有一段自定义的二进制数据,这段二进制数据实质上就是一个服务端的模板。在用户进行了设置工作之后,客户端就会将设置完成的这些特定数据填充到这个模板之中,然后再通过写文件的操作将这段已经配置完毕的二进制数据模板生成一个特定的服务端程序,如下图所示:打个比方来说,邮局有很多空白的信封。你在买下一个信封之后,在信封上填写邮政编码、收件人地址和姓名,然后再将你的信件装入信封糊好,这就成为了你所特有的一封信件了。——希望我这么解释能够让你明白我下面将要在操作的大致过程。下面我要实现一个名为“MsgBox生成器”的演示程序,你可以在客户端进行MessageBox的标题和文本的设置,然后程序就会在C:下生成一个名为MsgBox.exe的“Hello, World”程序,这个弹出的MessageBox就是你先前在客户端所设置的那样。运行界面如下图:好了,那么我先来设计生成服务端的功能。为了十足地模仿木马程序,我使用Win32 ASM来编写服务端程序,代码如下:.386.model flat, stdcalloption casemap:noneinclude masm32includewindows.incinclude masm32includekernel32.incincludelib masm32libkernel32.libinclude masm32includeuser32.incincludelib masm32libuser32.lib.dataszTitle db Hello, 0szText db Hello, World, 0.codestart:invoke MessageBox, NULL, addr szText, addr szTitle, MB_OK or MB_ICONINFORMATIONinvoke ExitProcess, NULLend start如你所见,这正是Iczelion在他的Win32汇编教程中编写的那个“Hello, World”,你可以利用MASM32将这段源代码编译链接,生成一个MsgBox.exe,在此我就利用这个程序来充当我要生成的服务端。现在需要考虑的问题是,如何将这个MsgBox.exe嵌入到客户端程序中?一个最好想,也是最直观的办法是利用一个BYTE数组来放置MsgBox.exe的二进制数据(CIH病毒就是这样,它专门准备了一个PE文件头),然后再使用API函数CreateFile将这段二进制数据写成文件。部分代码如下:BYTE?bySrvData[]?=?{?0x4d,?0x5a,?0x90,?0x00,?0x03,?0x00,?0x00,?0x00,?0x04,?0x00,?0x00,?0x00,?0xff,?0xff,?0x00,?0x00,?0xb8,?0x00,?0x00,?0x00,?0x00,?0x00,?0x00,?0x00,?0x40,?0x00,?0x00,?0x00,?0x00,?0x00,?0x00,?0x00,?//?由于篇幅略去以下所有数据-_-#...};BOOL?CreateServer(){?HANDLE?hFile;?DWORD?dwWritten;?hFile?=?CreateFile(?C:\MsgBox.exe,?GENERIC_WRITE,?0,?NULL,?CREATE_ALWAYS,?0,?NULL?);?if?(?hFile?==?NULL?)?return?FALSE;?WriteFile(?hFile,?(LPCVOID)bySrvData,?sizeof(?bySrvData?),?dwWritten,?NULL?);?CloseHandle(?hFile?);?return?TRUE;}好了,代码到此为止。虽然它可以胜利完成任务,但是你一定不愿意编写这样的代码——对于MsgBox.exe的数据部分,它实在太冗长了(我算了一笔账,对于编译完成的MsgBox.exe,它只有不到3KB的大小,但是如果把它的二进制数据像上面那样保存成文本文件,这个文本文件就会拥有15KB的体积)。况且,这仅仅是一个“Hello, World!”程序,那么换成真正的木马服务端程序又会怎么样呢?而且,很多的服务端是用高级语言编写的,它们动辄会拥有几十KB的体积!现在我们只能别无选择地换一个角度考虑如何来解决这个问题:除了用BYTE数组,还有别的方法可以将MsgBox.exe放入客户

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档