Domanda Risolto Malware Compilare Un Trojan Con Delphi

Stato
Discussione chiusa ad ulteriori risposte.

mrcamarium

Utente Silver
7 Gennaio 2022
105
24
6
56
Salve sto cominciando a realizzare un trojan con delphi XE partendo da un sorgente rudimentale, , ma mi sono bloccato ad un errore:
[DCC Error] Unit1.pas(53): E2003 Undeclared identifier: 'WriteLn'
questo sorgente ra per delphi 7 e con indy 9 io sto usando indy 10. vi allego file!
 

Allegati

  • Sorgente.zip
    238.2 KB · Visualizzazioni: 4
Ultima modifica:
La funzione WriteLn è sotto l'oggetto IOHandler, cambia:
Codice:
Client.WriteLn(memo1.text);
// Con
Client.IOHandler.WriteLn(memo1.text);

Stessa cosa per ReadLn.
Grazie adesso viene compilato.
Messaggio unito automaticamente:

Adesso ho un problema con un componente nel file del server:
[DCC Error] Unit1.pas(20): E2003 Undeclared identifier: 'TIdPeerThread'
allego il file.
 

Allegati

  • Sorgente.zip
    235.9 KB · Visualizzazioni: 3
Adesso ho un problema con un componente nel file del server:
[DCC Error] Unit1.pas(20): E2003 Undeclared identifier: 'TIdPeerThread'
allego il file.

La classe TIdPeerThread è stata rimossa a partire da Indy 10, adesso devi usare TIdContext ma il funzionamento è molto cambiato quindi ti toccherà riscrivere completamente il server visto che è usata ovunque in quelle poche righe.
 
Ultima modifica:
La classe TIdPeerThread è stata rimossa a partire da Indy 10, adesso devi usare TIdContext ma il funzionamento è molto cambiato quindi ti toccherà riscrivere completamente il server visto che è usata ovunque in quelle poche righe.
Pessima notizia! Adesso ci provo!
Messaggio unito automaticamente:

sembra che abbia risolto il problema di quella classe, ma desso ho questo errore:
[DCC Error] Unit1.pas(49): E2003 Undeclared identifier: 'Threads'
cosa mi consigli?
 

Allegati

  • Sorgente.zip
    235.9 KB · Visualizzazioni: 4
Adesso mi è rimasto un unico errore:
Codice:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, IdContext,
  IdCustomTCPServer;

type
  TForm1 = class(TForm)
    server: TIdTCPServer;
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure serverExecute(AThread: TIdContext);
    procedure serverConnect(AThread: TIdContext);
    procedure serverDisconnect(AThread: TIdContext);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var connessi:integer;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
server.DefaultPort:=strtoint(edit1.text);
server.Active:=true;;

end;

procedure TForm1.serverExecute(AThread: TIdContext);
var listaclient:tlist; i:integer;
    messaggioprelevato:string;
begin
 messaggioprelevato:=AThread.Connection.IOHandler.ReadLn;
 memo1.lines.add(messaggioprelevato);
 Listaclient := Server.Contexts.LockList;;
 try
  for i:=0 to connessi-1 do
   try
    TIdContext(Listaclient.Items[i]).Connection.IOHandler.WriteLn(messaggioprelevato);
   except
    TIdContext(Listaclient.Items[i]).Stop;
   end;
 finally
 end;
 Server.Contexts.UnlockList;

end;

procedure TForm1.serverConnect(AThread: TIdContext);
begin
 AThread.Connection.IOHandler.WriteLn('Benvenuto tu sei il client numero'+inttostr(connessi));
 connessi:=connessi+1;
 if connessi=1 then
  label1.Caption:='1 connesso'
 else
  if connessi=0 then
   label1.caption:='Nessun connesso al server'
  else
   label1.caption:=inttostr(connessi)+' connessi';
end;

procedure TForm1.serverDisconnect(AThread: TIdContext);
begin
 connessi:=connessi-1;
 if connessi=1 then
 label1.Caption:='1 connesso'
 else
 if connessi=0 then
 label1.caption:='Nessun connesso al server'
 else
 label1.caption:=inttostr(connessi)+' connessi';
end;

end.

[DCC Error] Unit1.pas(55): E2003 Undeclared identifier: 'Stop'
 
La classe TIdContext non contiene una procedura chiamata Stop. Se quello che vuoi fare è chiudere la connessione verso quel client usa: idCtx.Connection.Disconnect;
A questo punto potrei eliminare la funzione stop. Nel tentativo di farlo però mi da diversi errori. Come posso eliminare questa funzione?
 
Intendi a runtime? In quel contesto non serve chiudere la connessione: se finisce in except è perché la send (WriteLn) ha lanciato un'eccezione, il che può anche significare che l'interlocutore ha già chiuso la connessione. Puoi benissimo lasciare vuoto l'except, o al massimo loggare l'errore: se il client ha già chiuso ci penserà Indy a toglierlo dalle connessioni (che sia per pacchetto RST o per timeout). Inoltre quando usi LockList (che internamente usa EnterCriticalSection) una volta finito di usarla devi chiamare UnlockList altrimenti prima o poi finisci in deadlock e ricorda che mentre che è locked neanche Indy può operare sulla lista, quindi occhio a chiamare funzioni di indy che vanno ad agire sulla lista in mezzo alle lock.
 
Intendi a runtime? In quel contesto non serve chiudere la connessione: se finisce in except è perché la send (WriteLn) ha lanciato un'eccezione, il che può anche significare che l'interlocutore ha già chiuso la connessione. Puoi benissimo lasciare vuoto l'except, o al massimo loggare l'errore: se il client ha già chiuso ci penserà Indy a toglierlo dalle connessioni (che sia per pacchetto RST o per timeout). Inoltre quando usi LockList (che internamente usa EnterCriticalSection) una volta finito di usarla devi chiamare UnlockList altrimenti prima o poi finisci in deadlock e ricorda che mentre che è locked neanche Indy può operare sulla lista, quindi occhio a chiamare funzioni di indy che vanno ad agire sulla lista in mezzo alle lock.
Grazie del tuo aiuto adesso funziona, da questo momento comincio a sviluppare il programma.
 
Stato
Discussione chiusa ad ulteriori risposte.