Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème chargeur dll [ Windows / Autre ] (M5i9k)

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é 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 [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 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 Question sur les dll [ par flatou ] Salut a tous Je me pose une question : soit un programme qui a effectuer un hook sur une fonction de la dll kernel32.dll. Si mon deuxieme programme co importation de resource à partir de DLL [ par Xilofeon ] BonjourEst t'il possible d'importé des ressources d'une DLL? Si oui comment fait ont ?MerciPS: En parlent de ressources, je veut parler de boite de di


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.