Невозможно подключить функции реестра с помощью MS-detours (32bit)
я использую ms-detours для подключения функций. я успешно впрыскиваю свою dll в процесс. я успешно ловлю функции createfile\deletefile и вижу их событие в "debugView".
я не могу поймать все функции реестра.
пытался:
REGSETVALUEX OrigRegSetValueEx = NULL;
REGOPENKEYEXA OrigRegOpenKeyExA = NULL;
REGOPENKEY OrigRegOpenKey = NULL;
REGCREATEKEYEXW OrigRegCreateKeyExW = NULL;
REGCREATEKEYW OrigRegCreateKeyW = NULL;
REGSETVALUEXW OrigRegSetValueExW = NULL;
у меня есть самописный код (c#) 32-битной консольной программы, которая имеет 3 функции:
createNewFile
Это
откройте подраздел реестра и установите значение ключа. кодовый СНиП № 3:
введите код здесь string Mash = String.Concat(Окружающая Среда.Имя Машины, Окружающая Среда.Версия_ос.VersionString, Environment.Имя пользователя); объект registrykey rkApp = реестр.Текущий пользователь.OpenSubKey("программное обеспечение\Microsoft\окна\CurrentVersion равное\выполнить", истина); rkApp.Метод setValue("значение", пюре); rkApp.Рядом();
createNewFile + DeleteFile - перехват успешно.
откройте подраздел реестра и установите значение ключа. - не ловлю событие
я использую следующий код для функций и обходных путей:
Что я уже пробовал:
Я отлаживал с помощью:
1.Process monitor - который ловит мои события. ProcessMonitor Улавливает События Реестра
2.поместил messagebox3 в функцию 'HookRegSetValue' и не видел, как она выскакивает. я не уверен, но предполагаю, что это проблема с объездами.
3.попробовал другие функции реестра - ни одна из них не сработала.
include "stdafx.h" include "windows.h" include "tchar.h" include "stdio.h" typedef HANDLE(WINAPI *CREATEFILEW)(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); typedef HANDLE(WINAPI *DELETEFILEW)(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); typedef LONG(WINAPI *REGSETVALUE)(HKEY, LPCTSTR, DWORD,LPCSTR,DWORD); CREATEFILEW OrigCreteFileW = NULL; DELETEFILEW OrigDeleteFileW = NULL; REGSETVALUE OrigRegSetValue = NULL; HANDLE WINAPI HookCreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { OutputDebugString(__TEXT("Inside HookCreateFileW")); OutputDebugStringW(lpFileName); return OrigCreteFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); } HANDLE WINAPI HookDeleteFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { OutputDebugString(__TEXT("Inside HookDeleteFileW")); OutputDebugStringW(lpFileName); return OrigDeleteFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); } LONG WINAPI HookRegSetValue(HKEY hKey, LPCTSTR lpSubKey, DWORD dwType, LPCTSTR lpData, DWORD cbData) { MessageBox(0, "And text here3", "MessageBox caption", MB_OK); OutputDebugString(__TEXT("Inside HookRegSetValue")); OutputDebugStringW((LPCWSTR)hKey); return OrigRegSetValue(hKey, lpSubKey, dwType, lpSubKey, cbData); } void InstallHooks(void) { HMODULE modKernel32 = GetModuleHandle(TEXT("KERNEL32.dll")); HMODULE advapi32 = GetModuleHandle(TEXT("ADVAPI32.dll")); OrigCreteFileW = (CREATEFILEW)GetProcAddress(modKernel32, "CreateFileW"); OrigDeleteFileW = (DELETEFILEW)GetProcAddress(modKernel32, "DeleteFileW"); OrigRegSetValue = (REGSETVALUE)GetProcAddress(advapi32, "RegSetValue"); // install hooks DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); //File Hooks OutputDebugString(__TEXT("4.DetourAttach")); /*DetourAttach(&(PVOID&)OrigCreteFileW, HookCreateFileW); OutputDebugString(__TEXT("HookCreateFileW")); DetourAttach(&(PVOID&)OrigDeleteFileW, HookDeleteFileW); OutputDebugString(__TEXT("HookDeleteFileW"));*/ DetourAttach(&(PVOID&)OrigRegSetValue, HookRegSetValue); OutputDebugString(__TEXT("HookRegSetValue")); DetourTransactionCommit(); void RestoreHooks(void) { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); //File Hooks OutputDebugString(__TEXT("5.DetourDetach")); DetourTransactionCommit(); } // dllmain.cpp : Defines the entry point for the DLL application. BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: OutputDebugString(__TEXT("InstallHooks")); InstallHooks(); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: //OutputDebugString(__TEXT("RestoreHooks")); //RestoreHooks(); break; } return TRUE; }
Arthur V. Ratz
Я просмотрел ваш код и понятия не имею, почему именно это происходит. Вероятно, не все вызовы API могут быть подключены с помощью MS-Detours.