プロセスによって開かれた/アクセスされたファイルが何であるかを知りたいです。その方法を教えてください。無料のフック API である Deviare を使用して助けようとしましたが、AIP ライブラリまたはフォーラムから有用な情報を見つけることができませんでした。
kernel32.dll と createFileW に接続する必要があることだけはわかっていますが、続行する方法がわかりません。
助けてください。前もって感謝します。
プロセスによって開かれた/アクセスされたファイルが何であるかを知りたいです。その方法を教えてください。無料のフック API である Deviare を使用して助けようとしましたが、AIP ライブラリまたはフォーラムから有用な情報を見つけることができませんでした。
kernel32.dll と createFileW に接続する必要があることだけはわかっていますが、続行する方法がわかりません。
助けてください。前もって感謝します。
それはそうです。アクセスを監視するには、kernel32.dll の CreateFileA/W 関数をフックする必要があります。これらの 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 (fe 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 ;) にアクセスしてください。