生活在常宁,爱上常宁论坛! 广告服务

 找回密码
 免费注册

手机号码,快捷登录

1763查看|6回复

木马生成的技术

[] [复制链接]
发表于 2010-12-28 00:19:02 | 显示全部楼层 |阅读模式
<div id="googlead"> <script language="JavaScript" src="/ad/gg-250.js"></script></div><p><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;经常会看到鸽子或一些木马可以自定义生成一个服务端程序,开始很奇怪,他是怎么做到的!后来去网上搜了下,但是没找到相关文章! 后来碰巧得到了一个QQ病毒的源代码,而这个程序就可以生成一个文件,于是就研究了下代码,但是收获不大,但是很实用,他的大致思路和鸽子是一样的:<br />
<br />
  原理一:<br />
<br />
  在程序的尾部追加数据,然后程序运行时从尾部读取数据,这个方法看似容易,但是实际操作的时候遇到了很多问题,我最不明白的是他既然加了数据又是怎么保持 PE文件本身的格式的!但是这个方法确实可行,我看了鸽子的源码,他所用的方法基本一样!先把一个文件复制出来然后把数据写到文件尾部!<br />
<br />
  后来一次偶然的机会看到一个很不错的文章!虽然写的不是很清楚,不过大致已经说明了思路,以及方法!<br />
<br />
  我简单介绍下他的思路及原理:<br />
<br />
  原理二:<br />
<br />
  这个方法破过软件的朋友肯定很容易理解,先将需要的数据保留出,然后让程序去替换!<br />
<br />
  简单的说比如我需要写入一个随机端口,这个时候我们可以先将端口留出来不写比如定义一个常量<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp; Const<br />
&nbsp; &nbsp;&nbsp; &nbsp; DuanKou:='XXXXXXXXXXXXXXXXXXXXXXXXX';<br />
<br />
 &nbsp; &nbsp;至于为什么定义是XXXXXXXX只是为了方便找!然后让程序去替换!,字很多我懒得一个一个写!<br />
<br />
  发出来大家慢慢看吧! 这个例子也是定义端口的!<br />
<br />
  原文: (这个也是Delphi的不过我试过在VC++下一样可以的,原理都一样,只是语法问题!)<br />
<br />
  DELPHI木马DIY之生成服务端<br />
<br />
  我在这里就生成简单的服务端,为什么不先讲服务端的隐藏?因为我觉得生成服务端要好理解一点,简单一点,我们就由浅入深吧,OK,LET'S GO。<br />
<br />
  网络上其他的生成服务端的方式我不是很清楚,我就用我的方法来和大家讲解(不过还是先声明,我的方法亦是来自于网络,如果和谁的方法相同,请不要说我侵犯版权,因为我也不知道原作者是谁了,我这文章不作商业用途,如果有朋友认为我侵犯了他的版权,请立即通知我,我马上取消这个文章的继续发布!或者给他在文章中署名,OK,主要本人是学法律的,所以说话有点唠叨,不过中国有句俗话:&ldquo;丑话说在前面。&rdquo;不过用的人少啊)开始:<br />
<br />
  一.我们要先改一下我们配置的服务端。服务端我们就暂时不用自定端口了,跟着我一步一步的做,暂时不要问为什么,我稍后就解释,我们打开服务端的工程,在上面是不是有一句这个话<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form1: TForm1;<br />
<br />
  对,就在这,我们在下面加一句:duankou: string ='xxxxx';就是全局变量吧,然后我们再点一下Form1这个窗口,就是你的最初的窗口啦,添加一个事件ONCREATE,就是 TForm1.FormCreate,意思是当窗口建立的时候要做的事情。我们加上这个语句:<br />
<br />
  NMUDP1.LocalPort:=strtoint(duankou);<br />
<br />
  意思是NMUDP1的本地端口为duankou的数字。(strtoint的意思是把字符串转换为数字,懂吧)<br />
<br />
  意思已经很明白了,duankou: string ='xxxxx'为什么要是xxxxx?主要是一会好搜索,嘿。<br />
<br />
  好了,我们服务端基本上配置完了,现在我们来生成服务端,这个应该会了吧。<br />
<br />
  二.第二步实际我们要做两个事情<br />
<br />
  1).就是把服务端生成为资源<br />
<br />
  2).就是查找xxxxx在服务端的位置<br />
<br />
  我们还是先来查找xxxxx在服务端的位置吧。<br />
<br />
  1.我们打开任意一个16进制编辑器,用这个编辑器打开我们的服务端,这个简单吧。<br />
<br />
  2.搜索xxxxx,这样应该一次就能搜索出来xxxxx所在的位置,我这是4e240。OK,你的不同就自己定。<br />
<br />
  3.打开一个进制转换工具,把4e240转换为10进制的数字。320064我这是,一定要把这个数字记着哦,我们一会要用的东西,这是最主要的东西哦!(系统计算器就可以)<br />
<br />
  好了,我们再来把服务端生成为资源<br />
<br />
  1.我们在生成了服务端的文件夹里面建立一个文本文档,里面写上一句话<br />
<br />
  fuwuduan RCDATA server.exe<br />
<br />
  标识符 区域吧 文件名<br />
<br />
  标识符尽量不要和文件名一样,有时候会出错了,OK,听我一句吧,谢谢<br />
<br />
  我们把这个文本文档改名成为fuwu.rc这个应该不用解释了。<br />
<br />
  2.再建立一个批处理文件,里面写上这么一句话<br />
<br />
  path=C:\Program Files\Borland\Delphi7\Bin;<br />
<br />
  Brcc32 fuwu.rc<br />
<br />
  path为你的delphi7的BIN目录的路径,OK,然后运行这个批处理,在你的服务端的文件夹里就会生成一个fuwu.res这是资源哦,嘿嘿,重要的东西我们把他复制到客服端的文件夹里,OK,我们这一步的准备工作就做完了~~~<br />
   <br />
  三.第三步我们就要配置客服端了,让客服务端可以生成一个自定端口的服务段<br />
<br />
  1.我们要在客服端的dpr里加上一句话{$R *.res}下面加上一个{$R fuwu.res}意思就是让程序生成时自动加载一个服务端的资源进去。<br />
<br />
  2.我们要开始试着生成一个服务端了,不过这步挺重要,我们还是在第四步说。<br />
<br />
  四.最重要的一步,要主要,一步一步来,跟着做,我会详细解释的。<br />
<br />
  1.我们生成一个全局的变量先<br />
<br />
  在uses的下面和type的上面加上一句:<br />
<br />
  const OFFSET_DUANKOU = 320064;//这个就根据你自己的值来定。<br />
<br />
  把这一段的代码给出来,免得新手看不懂<br />
<br />
  uses<br />
<br />
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br />
<br />
  Dialogs, StdCtrls, NMUDP;<br />
<br />
  const OFFSET_DUANKOU = 320064;<br />
<br />
  type<br />
<br />
  TForm1 = class(TForm)<br />
<br />
  Button1: TButton;//看懂我是加在什么位置了的吧<br />
<br />
  2.我们添加两个控件 edit和按扭,EDIT是用来写你要生成的服务端的端口,按扭是生成吧。<br />
<br />
  3.我们生成一个button2的点击事件<br />
<br />
  我们现在在button2的点击事件中声明一下<br />
<br />
  var<br />
<br />
  WriteBuff, ziyuanzhizhen: PChar;<br />
<br />
  ziyuanweizhi: HRSRC;<br />
<br />
  ziyuandaxiao, BytesWritten: Longword;<br />
<br />
  shujuchulijubing: THandle;<br />
<br />
  shenqingzhizhen: THandle;<br />
<br />
  duankou:string;<br />
<br />
  现在我们开始begin<br />
<br />
  BEGIN<br />
<br />
  duankou:=trim(Edit4.Text); //端口为edit4的文字<br />
<br />
  ziyuanweizhi := FindResource(HInstance, 'fuwuduan', RT_RCDATA); //资源指针为寻找到的资源'fuwuduan'(就是我先说的标识符)<br />
<br />
  ziyuandaxiao := SizeofResource(HInstance, ziyuanweizhi);//资源大小<br />
<br />
  shujuchulijubing := LoadResource(HInstance, ziyuanweizhi); //数据处理句炳<br />
<br />
  ziyuanzhizhen := LockResource(shujuchulijubing);//资源指针<br />
<br />
  shenqingzhizhen := CreateFile(pchar('server.exe'), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);<br />
<br />
  WriteFile(shenqingzhizhen, ziyuanzhizhen^, ziyuandaxiao, BytesWritten, nil);//写文件<br />
<br />
  Sleep(100);<br />
<br />
  SetFilePointer(shenqingzhizhen, OFFSET_DUANKOU, nil, FILE_BEGIN);//重定位指针<br />
<br />
  WriteBuff := PChar(duankou + StringOfChar(#0, 5 - Length(duankou)));//要写的数据<br />
<br />
  WriteFile(shenqingzhizhen, WriteBuff^, 5, BytesWritten, nil);//再次修改文件<br />
<br />
  CloseHandle(shenqingzhizhen);//关闭资源<br />
<br />
  end;<br />
<br />
  我这没法给大家详细解释了,不过如果你聪明的话应该也可以融会惯通了。<br />
<br />
  注意的是SetFilePointer这里的OFFSET_DUANKOU为要开始写的地址,当然就是我们先找到的地址<br />
<br />
  WriteBuff的里面的5为XXXXX的长度,WriteFile里面的5也是,shenqingzhizhen里面的'server.exe'可以自己改名字,也可以是完整的路径,也可以是EDIT里面的东西<br />
<br />
  然后我们生成这个客服端,设置好EDIT4.text后(就是要生成的端口,我这为了方便就没有什么容错啊,提示错误之类的了,不过端口自定义的规则这些,大家应该清楚)点击BUTTON2,那么在当前的文件夹下就会生成一个服务端,运行后端口就会是EDIT4.text的内容<br />
<br />
  大家测试一下吧.<br />
<br />
  我在XP+DELPHI的环境一切正常。</span></p>
发表于 2011-2-15 19:49:55 | 显示全部楼层
知道了 不错~~~  
发表于 2011-2-16 14:32:09 | 显示全部楼层
我呆了  
发表于 2011-2-23 06:45:25 | 显示全部楼层
长时间没来看了 ~~  
发表于 2011-3-1 06:41:16 | 显示全部楼层
祝你快乐无限!  
头像被屏蔽
发表于 2011-3-29 13:24:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-5-16 06:54:26 | 显示全部楼层
回答了那么多,没有加分了,郁闷。。  
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

b6广告位招商
快速回复 返回顶部 返回列表