服务端生成技术(1)

来源:互联网 发布:人大网络教育学生登录 编辑:程序博客网 时间:2024/03/29 05:42

木马服务端生成技术

最近在研究回调机制,所以来了个“人肉搜索”,意外在某人博客上发现了这篇文章关于木马生成服务端技术,于是........
  其实这方面的东西以前就很好奇了,只是没有没有深入的探讨,今天看了下,受益匪浅
  小节:其实有两种方法实现:一种是为我们需要的数据保留空间,在适当时候将我们需要的数据复制到预先留出的地址空间,类似C++中为指针或数组预留空间,然后在需要的时候我们找到预留空间的地址进行覆盖操作;另一种就是追加数据,就是在程序的尾部写入我们需要的数据,一种是直接写入,不知道会不会与PE文件格式有.......,还有中,我觉得可以把预先的数据读写到一个文件中,在程序中追加文件地址,在启动的时候将数据写进进程的空间,我觉得这中貌似可靠多了,呵呵(以上为看完此文后的想法,未验证,有什么不对,请牛牛指点......)
   =====================原文=============================
  DELPHI木马DIY之生成服务端

我在这里就生成简单的服务端,为什么不先讲服务端的隐藏?因为我觉得生成服务端要好理解一点,简单一点,我们就由浅入深吧,OK,LET'S GO。

网络上其他的生成服务端的方式我不是很清楚,我就用我的方法来和大家讲解(不过还是先声明,我的方法亦是来自于网络,如果和谁的方法相同,请不要说我侵犯版权,因为我也不知道原作者是谁了,我这文章不作商业用途,如果有朋友认为我侵犯了他的版权,请立即通知我,我马上取消这个文章的继续发布!或者给他在文章中署名,OK,主要本人是学法律的,所以说话有点唠叨,不过中国有句俗话:“丑话说在前面。”不过用的人少啊)

开始:
一.我们要先改一下我们配置的服务端。
服务端我们就暂时不用自定端口了,跟着我一步一步的做,暂时不要问为什么,我稍后就解释
我们打开服务端的工程,在上面是不是有一句这个话
var
Form1: TForm1;
对,就在这,我们在下面加一句:duankou: string ='xxxxx';
就是全局变量吧,然后我们再点一下Form1这个窗口,就是你的最初的窗口啦,添加一个事件
ONCreate,就是TForm1.FormCreate,意思是当窗口建立的时候要做的事情。我们加上这个语句:
NMUDP1.LocalPort:=strtoint(duankou);
意思是NMUDP1的本地端口为duankou的数字。(strtoint的意思是把字符串转换为数字,懂吧)

意思已经很明白了,duankou: string ='xxxxx'为什么要是xxxxx?主要是一会好搜索,嘿。
好了,我们服务端基本上配置完了,现在我们来生成服务端,这个应该会了吧。

二.第二步实际我们要做两个事情
1).就是把服务端生成为资源
2).就是查找xxxxx在服务端的位置
ok我们还是先来查找xxxxx在服务端的位置吧。
1.我们打开任意一个16进制编辑器,用这个编辑器打开我们的服务端,这个简单吧。
2.搜索xxxxx,这样应该一次就能搜索出来xxxxx所在的位置,我这是4e240。OK,你的不同就自己定。
3.打开一个进制转换工具,把4e240转换为10进制的数字。320064我这是,一定要把这个数字记着哦,我们一会要用的东西,这是最主要的东西哦!(系统计算器就可以)

好了,我们再来把服务端生成为资源
1.我们在生成了服务端的文件夹里面建立一个文本文档,里面写上一句话
fuwuduan RCDATA server.exe
标识符 区域吧 文件名
标识符尽量不要和文件名一样,有时候会出错了,OK,听我一句吧,谢谢
我们把这个文本文档改名成为fuwu.rc这个应该不用解释了。
2.再建立一个批处理文件,里面写上这么一句话
path=C:/Program Files/Borland/Delphi7/Bin;
Brcc32 fuwu.rc
path为你的delphi7的BIN目录的路径,OK,然后运行这个批处理,在你的服务端的文件夹里就会生成一个fuwu.res这是资源哦,嘿嘿,重要的东西
我们把他复制到客服端的文件夹里,OK,我们这一步的准备工作就做完了~~~

三.第三步我们就要配置客服端了,让客服务端可以生成一个自定端口的服务段

1.我们要在客服端的dpr里加上一句话{$R *.res}下面加上一个{$R fuwu.res}意思就是让程序生成时自动加载一个服务端的资源进去。
2.我们要开始试着生成一个服务端了,不过这步挺重要,我们还是在第四步说。

四.最重要的一步,要主要,一步一步来,跟着做,我会详细解释的。
1.我们生成一个全局的变量先
在uses的下面和type的上面加上一句:
const OFFSET_DUANKOU = 320064;//这个就根据你自己的值来定。
把这一段的代码给出来,免得新手看不懂

  1. uses
  2. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  3. Dialogs, StdCtrls, NMUDP;
  4. const OFFSET_DUANKOU = 320064;
  5. type
  6. TForm1 = class(TForm)
  7. Button1: TButton;//看懂我是加在什么位置了的吧
  8. 2.我们添加两个控件 edit和按扭,EDIT是用来写你要生成的服务端的端口,按扭是生成吧。
  9. 3.我们生成一个button2的点击事件
  10. 我们现在在button2的点击事件中声明一下
  11. var
  12. WriteBuff, ziyuanzhizhen: PChar;
  13. ziyuanweizhi: HRSRC;
  14. ziyuandaxiao, BytesWritten: Longword;
  15. shujuchulijubing: THandle;
  16. shenqingzhizhen: THandle;
  17. duankou:string;
  18. 现在我们开始begin
  19. BEGIN
  20. duankou:=trim(Edit4.Text); //端口为edit4的文字
  21. ziyuanweizhi := FindResource(HInstance, 'fuwuduan', RT_RCDATA); //资源指针为寻找到的资源'fuwuduan'(就是我先说的标识符)
  22. ziyuandaxiao := SizeofResource(HInstance, ziyuanweizhi);//资源大小
  23. shujuchulijubing := LoadResource(HInstance, ziyuanweizhi); //数据处理句炳
  24. ziyuanzhizhen := LockResource(shujuchulijubing);//资源指针
  25. shenqingzhizhen := CreateFile(pchar('server.exe'),GENERIC_WRITE, FILE_SHARE_WRITE, nil, Create_ALWAYS,FILE_ATTRIBUTE_NORMAL, 0);
  26. WriteFile(shenqingzhizhen, ziyuanzhizhen^, ziyuandaxiao, BytesWritten, nil);//写文件
  27. Sleep(100);
  28. SetFilePointer(shenqingzhizhen, OFFSET_DUANKOU, nil, FILE_BEGIN);//重定位指针
  29. WriteBuff := PChar(duankou + StringOfChar(#0, 5 - Length(duankou)));//要写的数据
  30. WriteFile(shenqingzhizhen, WriteBuff^, 5, BytesWritten, nil);//再次修改文件
  31. CloseHandle(shenqingzhizhen);//关闭资源
  32. end;
复制代码

我这没法给大家详细解释了,不过如果你聪明的话应该也可以融会惯通了。
注意的是SetFilePointer这里的OFFSET_DUANKOU为要开始写的地址,当然就是我们先找到的地址
WriteBuff的里面的5为XXXXX的长度,WriteFile里面的5也是,shenqingzhizhen里面的'server.exe'可以自己改名字,也可以是完整的路径,也可以是EDIT里面的东西

然后我们生成这个客服端,设置好EDIT4.text后(就是要生成的端口,我这为了方便就没有什么容错啊,提示错误之类的了,不过端口自定义的规则这些,大家应该清楚)点击BUTTON2,那么在当前的文件夹下就会生成一个服务端,运行后端口就会是EDIT4.text的内容
大家测试一下吧
我在XP+DELPHI的环境一切正常。

原创粉丝点击