begin process at 2012 02 13 00:15:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

API Hooking & accés mémoire


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

API Hooking & accés mémoire

jeudi 20 juillet 2006 à 12:19:42 | API Hooking & accés mémoire

simtiers

Salut !

Voilà, j'essaie de faire un API Hooking sur Virtual PC pour le rendre transportable sur une clé USB.
Le but est en fait de traiter tous ses appels registres vers ma DLL, qui lui renvoie les valeurs "importantes" (numero de serie, nom utilisateur...)

Je remplace les fonction RegCreateKeyEx, OpenKey, OpenKeyEx, QueryValue, QueryValueEx et SetValueEx.

Quand je suis en mode "transparent" (je ne fais que rediriger les appels de VirtualPC vers les fonctions originales), tout est nickel, je peux meme enregistrer sans problème les paramètres qui sont passés...
ça se passe comme ça :
Virtual PC.exe => dll_hooker.dll => advapi32.dll

Maintenant, quand je veux renvoyer mes valeurs à VPC, ça plante :
Virtual PC.exe => dll_hooker.dll |
Dès que je tente d'écrire dans la section "data" de QueryValueEx, j'ai droit à un plantage de VPC.
Quand je tente de modifier les droits mémoire avec VirtualProtectEx, la fonction me renvoie un code 487 (pointeur invalide ou un truc du genre)

Si qq'1 pouvait me dire s'il a une idée du pb, il est le bienvenue !

jeudi 20 juillet 2006 à 12:26:05 | Re : API Hooking & accés mémoire

simtiers

ça ira mieux avec la fonction incriminée

LONG WINAPI reg_hook::_RegQueryValueEx( HKEY hKey, LPCTSTR valueName, LPDWORD reserve,
                LPDWORD type, LPBYTE data, LPDWORD cbData )
{
    fprintf( log, "RQVE : %x | %s\r\n", hKey, valueName );
    fflush( log );
   
    HANDLE hProcess = OpenProcess( PROCESS_VM_OPERATION, FALSE, pid );
    DWORD anciens_droits = 0, ad_cb = 0;
   
    int i = VirtualProtectEx( hProcess, cbData, sizeof(DWORD), PAGE_EXECUTE_READWRITE, &ad_cb );
    int err = GetLastError();
   
    // ici, i=0 et err = 487
    fprintf( log, "VPE cb : %i => %x\r\n", i, err );
    fputs( "max_len..", log );
    fflush( log );

    // c'est là que ça plante
    DWORD max_len = *cbData;
    fputs( "ok\r\n", log );
    fflush( log );

    VirtualProtectEx( hProcess, data, max_len, PAGE_EXECUTE_READWRITE, &anciens_droits );
   
    // ça, c'est temporaire
    LONG ret = oRegQueryValueEx( hKey, valueName, reserve, type, data, cbData );
   
    // ce if également
    if( ret == ERROR_SUCCESS && valueName != 0 )
    {
        if( !stricmp( valueName, "UserName" ) )
        {
            if( *cbData >= strlen("Thomas (the hooker)") )
            {
                strncpy( (LPSTR)data, "Thomas (the hooker)", strlen("Thomas (the hooker)") );
                *cbData = strlen("Thomas (the hooker)");
            }
           
            VirtualProtectEx( hProcess, data, max_len, anciens_droits, &anciens_droits );
            CloseHandle( hProcess );
        }
    }
   
    return ret;
}


Cette discussion est classée dans : dll, api, mémoire, virtual, hooking


Répondre à ce message

Sujets en rapport avec ce message

Aide en "api hooking" URGENT !!! [ par Kangourou_Nomade ] Pour faire un logiciel api hooking, sachant la difficulté du truc je voulais savoir si quelqu'un pouvait me filer une dll avec les fonctions approprié Api hooking tres simple [ par XFG ] Plop tout le monde. J'essaye d'injecter une dll dans un processus, en C++ (ça rime :-p). Ma dll fait juste un beep, et elle marche tres bien, mon seul Libérer de la mémoire dans une dll ? [ par tintin72 ] Bonjour, Je suis en train de programmer une dll dans laquelle j'alloue de la mémoire avec malloc. Mais j'ai une petite question concernant la libérat C++ & API & VBS : FTP [ par job22 ] Bonjour a tous,Une DLL n'etant pas la solution,Je cherche le moyen de creer à l'aide de visual C++ un objet (COM??) qui me permettrai d'habiller les A HOOKING [ par Fuckly94 ] Salut tout le monde,c'était juste pour savoir un truk tout béte!!je veux faire un HOOK sur le niveau SYSTEM!!il me faut donc une DLL <B fuite mémoire [ par mamag ] Bonjour,j'ai un programme en VC++ qui fait appel à une DLL (également faite en C++).je voudrais savoir comment faire pour détecter une fuite mémoire d MySQL API C, libération de mémoire tampon... [ par Guizmo95 ] Bonjour,je développe un programme en C avec l'API C pour MySQL, et mon mon problème est le suivant, je lance le programme et je regarde la mémoire qu' DLL : interface IUnknown en C [ par Mastersam ] Bonjour, je créé actuellement en driver ASIO sous forme de DLL, j'ai eu un exemple général de création d'un driver dans la SDK ASIO 2.2, mais tout est export class via dll probleme (cpp)? [ par cheroua ] salut, Voici la classe à partir de laquelle je genère une dll... J'utilise une méthode explicite p Libération de mémoire (C API Win32) [ par ndubien ] Bonjour,Je me pose la question suivante:Faut-il libérer un HBITMAP avant de le réinitialiser?Si oui, comment?Merci d'avance et à bientôt...


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 : 0,421 sec (3)

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