begin process at 2012 02 12 14:50:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Autre

 > 

Problème chargeur dll


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème chargeur dll

dimanche 6 août 2006 à 21:40:11 | Problème chargeur dll

M5i9k

Bonjour,

j'ai écrit un programme qui permet de charger une dll dans un processus, mais le programme fonctionne seulement en DEBUG, en RELEASE, j'ai un problème avec CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0), est-ce que cette fonction de marche qu'en debug?

voici mon code :

#include <iostream>
#include <atlpath.h>
#include "windows.h"
#include <tlhelp32.h>

using namespace std;

BOOL Injecter(char *dllPath, DWORD pid)
{
    HANDLE hProc, hThread;
    HANDLE hAddress;
    HANDLE hKernel;
    VOID *pMem;
    DWORD dwExitCode;

    // Ouvre le processus
    hProc = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION, FALSE, pid);
    if(!hProc)
        return FALSE;

    // Obtient l'adresse de la fonction LoadLibrary
    hKernel = GetModuleHandle("kernel32.dll");
    pMem = GetProcAddress((HMODULE)hKernel, "LoadLibraryA");
    if(!pMem)
    {
        CloseHandle(hProc);
        return FALSE;
    }

    // Crée un espace pour stocker l'emplacement de la dll dans le processus distant
    hAddress = VirtualAllocEx(hProc, NULL, strlen(dllPath), MEM_COMMIT, PAGE_READWRITE);
    if(!hAddress)
    {
        CloseHandle(hProc);
        return FALSE;
    }

    // Copie le chemin de la dll
    WriteProcessMemory(hProc, hAddress, dllPath, strlen(dllPath), NULL);

    // Lance un thread pour charger la dll
    hThread = CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)pMem, hAddress, NULL, NULL);
    if(!hThread)
    {
        VirtualFreeEx(hProc, hAddress, NULL, MEM_RELEASE);       
        CloseHandle(hProc);
        return FALSE;
    }

    WaitForSingleObject(hThread, INFINITE);
    GetExitCodeThread(hThread, &dwExitCode);
   
    VirtualFreeEx(hProc, hAddress, NULL, MEM_RELEASE);       
    CloseHandle(hProc);
    CloseHandle(hThread);
   
    return dwExitCode>0?TRUE:FALSE;
}

int main(int argc, char *argv[])
{
    HANDLE hTool;
    PROCESSENTRY32 proc;
    BOOL bFound;

    // Vérifie les arguments
    if((argc < 2) || (!ATLPath::FileExists(argv[1])))
    {
        cout << "Nombre d'arguments incorrects ou dll introuvable." << endl;
        cout << "Inject [dll] [nom processus]";
        return 1;
    }

    hTool = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if(!hTool)
    {
        cout << "Impossible de creer hTool!" << endl;
        return 1;
    }

    bFound = FALSE;

    if(Process32First(hTool, &proc))
    {
        do
        {
            if(strcmp(proc.szExeFile, argv[2]) == 0)
            {
                if(!Injecter(argv[1], proc.th32ProcessID))
                {
                    cout << "Echec d'injection." << endl;
                }
                else
                {
                    cout << "Injection reussie." << endl;
                }
                bFound = TRUE;
            }
        }while(!bFound && Process32Next(hTool, &proc));
    }

    if(!bFound)
        cout << "Processus introuvable";

    CloseHandle(hTool);

    return 0;
}

Mon programme en release me donne toujours "Processus introuvable", alors qu'en debug il fonctionne très bien.
dimanche 6 août 2006 à 23:03:37 | Re : Problème chargeur dll

M5i9k

Réponse acceptée !
J'ai trouvé mon erreur : il fallait rajouter proc.dwSize = sizeof(proc); et maintenant sa marche aussi en release.
dimanche 6 août 2006 à 23:46:45 | Re : Problème chargeur dll

wxccxw

Membre Club
pourquoi toujours commencer sont programmes en Debug ? ca ne sert a rien, et sa ralenti car sa ne marche pas toujour en release !

alors commence tout de suis ton projet en release et tu n'aurai pas eu ce probleme :)
voila
sinon bonne chance


lundi 7 août 2006 à 14:06:27 | Re : Problème chargeur dll

elguevel

Ah les DLL injections ... :-)

lundi 7 août 2006 à 21:25:19 | Re : Problème chargeur dll

MuPuF

Le debug est seulement utile pour le debug en effet lol . Dans vc 2003 meme en release il y a des infos de debug lol, tu peux voir des variables (a condition que ton prog soit pas trop évolué dans le c++).
Enfin bon, faudrait voir si on grossis pas l'exe avec ce genre de code (et si on peux pas grater des cycles en les enlevant totalement).
Si ça se trouve en fait, en mode release, il ne connait que les adresses mémoires statiques (données à la compilation) donc forcement il peut y accéder une fois le programme lancé, mais faire du pas à pas, c'est chaud quand meme, ils ont dus trouver la technique ...


Cette discussion est classée dans : dll, return, false, hproc, haddress


Répondre à ce message

Sujets en rapport avec ce message

injection de dll [ par deck_bsd ] Yop,Voila , je tente de faire une injection de dll dans un processus . Seulement voila , tout devrait bien se dérouler et d'ailleur aparement tout rou returnourner un entier long long [ par dlamalice ] Bonjour,j'ai codé une dll toute bete et j'aimerai que cette dernière me retour un long long (64bit) statique.Mais quand je compile la ligne return ne Simple Hook (DLL) qui plante GetMessage ! Je suis nul ou quoi ? [ par dam1dam1 ] Bonjour. Je ne suis pas un pro du Hook et j’ai un peu oublié tout ca, mais vu toutes les bonnes sources et annotations qui trônent ici, je pensais po [DevCPP][DirectInput] Pb avec SetDataFormat [ par Shinji ] Bonjour à tous !J'utilise DirectInput pour gérer clavier et souris dans mon programme. Je l'ai déjà réalisé avec succès mais depuis que j'ai du change probleme droit d'acces sur processus [ par wisar ] bonjours voila je suis en train de programmer une petite application sur l'injection de dll. Hors j'ai remarqué que j'ai un problème de droit d'accès Savoir si la session en cours est administrateur [ par sephiro ] Il est important pour l'un de mes programmes de savoir si l'utilisateur est admin ou non.J'ai recherché sur ce site des informations sans rien trouver Dll LoadLibrary --> Erreur [ par mortiis ] Bonjour à tous J'ai fait un prog qui devrais utiliser une dll pour faire un test j'ai fait un dll qui me fait afficher un MessageBox.Le problème est q recv() winsock2 en plusieurs morceaux [ par billbaxter ] Bonjour,J'ai développé une appli client-serveur avec les winsock2 en me référant aux exemples MSDN.Ceux-ci ne présentent qu'un dialogue effectué en un Ecriture d'une dll atl [ par ultraLek ] Bonsoir à tous, voila mon problème j'ai actuellement une source c++ 7 qui fonctionne sous forme d'un exécutable appelable en ligne de commande, son bu Help Au secours [ par NAVIE ] Bonjour, j'écris ce message pour un problème que j'ai avec un de mes programmes. Je compile avec DevCpp Version 4.9.9.2 et j'ai crée deux fichiers sou


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,373 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales