Перехватчик CreateFileW

Я хочу знать, какие файлы открываются / к каким файлам обращается процесс. Могу я узнать, как это сделать? Я попытался использовать Deviare, бесплатный api для подключения, чтобы помочь мне, но не смог найти никакой полезной информации в их библиотеке AIP или на форуме.

Я знаю только, что мне нужно подключиться к kernel32.dll и createFileW, и я не уверен, как продолжить.

Пожалуйста, помогите мне. Заранее спасибо.


person Perwyl Liu    schedule 20.05.2011    source источник


Ответы (1)


Это правильно. Вы должны подключить функцию CreateFileA / W в kernel32.dll для отслеживания доступа. Вы хотите подключить эти API-интерфейсы в свой собственный процесс или в другой процесс? Если вы хотите перехватить функции в своем собственном процессе, вы можете использовать

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);
} 

для этого. Эта функция обходит функцию src (например, MessageBoxA ()) на функцию dst. В качестве len вы можете использовать 5. Он возвращает указатель функции на исходную функцию. Пример вызова:

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;
}

Это крючок пользовательского режима. Если вы хотите сделать это в масштабе всей системы, я бы использовал драйвер устройства. Вот руководство по этому поводу. http://www.codeproject.com/KB/system/driverdev.aspx

А если вы используете VC ++, компилируйте в многобайтовом режиме;). Если вы хотите подключить другой процесс, просто Google DLL-Injection;).

person David    schedule 24.05.2011