C'est vrai. Vous devez accrocher la fonction CreateFileA/W dans kernel32.dll pour surveiller l'accès. Voulez-vous connecter ces API dans votre propre processus ou dans un autre processus? Si vous voulez accrocher des fonctions dans votre propre processus, vous pouvez utiliser
void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
{
BYTE *jmp = (BYTE*)malloc(5+len);
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);
}
pour elle. Ces fonctions détournent la fonction src (f.e. MessageBoxA()) vers la fonction dst. Comme len vous pouvez utiliser 5. Il renvoie un pointeur de fonction à la fonction d'origine. Un appel exemple:
typedef int (WINAPI *__MessageBox)(
__in_opt HWND hWnd,
__in_opt LPCTSTR lpText,
__in_opt LPCTSTR lpCaption,
__in UINT uType
);
__MessageBox _MessageBox;
int cMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
//here you can change anything you want
return _MessageBox(hWnd,lpText,lpCaption,uType);
}
int main(void)
{
BYTE *hookfunc = (BYTE*)GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA");
_MessageBox = (__MessageBox)DetourFunc(hookfunc,(BYTE*)cMessageBox,5);
return 0;
}
C'est un crochet usermode. Si vous voulez faire cela à l'échelle du système, j'utiliserais un pilote de périphérique. Voici un tutoriel à ce sujet. Et si vous utilisez VC++ compilez en mode multi-octets;). Si vous voulez brancher un autre processus juste google DLL-Injection;).