HOOK PROBLEME DLL

Résolu
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011 - 23 août 2006 à 19:18
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011 - 23 août 2006 à 20:35
hello, je vais une dll de hook et j'obtient sa :

MON CODE :

#include <windows.h>

FARPROC fpRegQueryValueEx; // Buffer de l'adresse de la fonction
FARPROC fpRegOpenKey; // Buffer de l'adresse de la fonction
FARPROC fpRegCreateKeyEx; // Buffer de l'adresse de la fonction
FARPROC fpRegOpenKeyEx; // Buffer de l'adresse de la fonction
HMODULE Advapi32;

void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
{
    BYTE *jmp = (BYTE*)malloc(len+5);
    DWORD dwback;

    VirtualProtect(src, len, PAGE_READWRITE, &dwback);

    memcpy(jmp, src, len);    jmp += len;
   
    jmp[0] = 0xE9;
    *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;

    src[0] = 0xE9;
    *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;

    VirtualProtect(src, len, dwback, &dwback);

    return (jmp-len);
}

bool RetourFunc(BYTE *src, BYTE *restore, const int len)
{
    DWORD dwback;
       
    if(!VirtualProtect(src, len, PAGE_READWRITE, &dwback))    { return false; }
    if(!memcpy(src, restore, len))                            { return false; }

    restore[0] = 0xE9;
    *(DWORD*)(restore+1) = (DWORD)(src - restore) - 5;

    if(!VirtualProtect(src, len, dwback, &dwback))            { return false; }
   
    return true;
}   

WINADVAPI LONG hkRegQueryValueEx(HKEY hKey,LPCTSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)
{
    return 0;
}

WINADVAPI LONG hkRegOpenKey(HKEY hKey,LPCTSTR lpSubKey,PHKEY phkResult)
{
    return 0;
}

WINADVAPI LONG hkRegCreateKeyEx(HKEY hKey,LPCTSTR lpSubKey,DWORD Reserved,LPTSTR lpClass,DWORD dwOptions,REGSAM samDesired,LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition)
{
    return 0;
}

WINADVAPI LONG hkRegOpenKeyEx(HKEY hKey,LPCTSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,PHKEY phkResult)
{
    return 0;
}

WINAPI DllMain(HANDLE hProc,DWORD reason,LPVOID reserved)
{
    switch(reason)
    {
        case DLL_PROCESS_ATTACH:
        HMODULE advapi32 = LoadLibrary("Advapi32.dll");   

        fpRegQueryValueEx = GetProcAddress(advapi32,"RegQueryValueEx"); // Adresse de la fonction
        fpRegOpenKey = GetProcAddress(advapi32,"RegOpenKey"); // Adresse de la fonction
        fpRegCreateKeyEx = GetProcAddress(advapi32,"RegCreateKeyEx"); // Adresse de la fonction
        fpRegOpenKeyEx = GetProcAddress(advapi32,"RegOpenKeyEx"); // Adresse de la fonction

        DetourFunc((BYTE*) fpRegQueryValueEx,(BYTE*) &hkRegQueryValueEx,5); // Hook avec jmp 5
        DetourFunc((BYTE*) fpRegOpenKey,(BYTE*) &hkRegOpenKey,5); // Idem
        DetourFunc((BYTE*) fpRegCreateKeyEx,(BYTE*) &hkRegCreateKeyEx,5); // Idem
        DetourFunc((BYTE*) fpRegOpenKeyEx,(BYTE*) &hkRegOpenKeyEx,5); // Idem
        return true;
    }
}

MON LOG :

 , Compilation...
main.cpp
c:\Documents and Settings\Jean.PCTEK\Bureau\RegSpy\RegSpyDll\main.cpp(45) : error C2491: 'hkRegQueryValueEx' : définition de dllimport fonction non autorisée
c:\Documents and Settings\Jean.PCTEK\Bureau\RegSpy\RegSpyDll\main.cpp(50) : error C2491: 'hkRegOpenKey' : définition de dllimport fonction non autorisée
c:\Documents and Settings\Jean.PCTEK\Bureau\RegSpy\RegSpyDll\main.cpp(55) : error C2491: 'hkRegCreateKeyEx' : définition de dllimport fonction non autorisée
c:\Documents and Settings\Jean.PCTEK\Bureau\RegSpy\RegSpyDll\main.cpp(60) : error C2491: 'hkRegOpenKeyEx' : définition de dllimport fonction non autorisée

ou est le probleme ?

merci

4 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
23 août 2006 à 20:25
WINADVAPI LONG hkRegQueryValueEx(HKEY hKey,LPCTSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)
{
    return 0;
}

devient

// Déclaration, avec WINADVAPI
WINADVAPI LONG hkRegQueryValueEx(HKEY hKey,LPCTSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData);

// Définition, sans WINADVAPI
LONG hkRegQueryValueEx(HKEY hKey,LPCTSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)

{

    return 0;

}

Et pareil pour les autres fonctions à exporter

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
23 août 2006 à 19:40
http://msdn2.microsoft.com/en-us/library/62688esh.aspx



Le __declspec(dllimport) est a mettre uniquement sur la déclaration, pas la définition

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
23 août 2006 à 20:22
pourrait tu me rediger un exemple si tu a le temps, car apriori cela ne marche pas pour moi.
merci
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
23 août 2006 à 20:35
merci beaucoup
0
Rejoignez-nous