![]() |
eXeL@B —› Вопросы новичков —› DLL для глобального перехвата |
Посл.ответ | Сообщение |
|
Создано: 10 октября 2007 20:08 · Личное сообщение · #1 Есть проблема. Делаю глобальный перехват в системе, код в ДЛЛ, которую подгружаю к процессам через ветку реестра [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows] "AppInit_DLLs"="c:\Hook.dll" Если в длл сразу обращаться к реестру, то почемуто вылетают исключения в длл. например, код длл: #include <Windows.h> BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved ) { switch( fdwReason ) { case DLL_PROCESS_ATTACH: HKEY key; RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SOFTWARE",0,KEY_READ,&key); RegCloseKey(key); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } прописываем длл в реестр, и запускаем например блокнот под Олли, и сразу получаем исключение в Длл - в модуле ntdll при записи в ячейку 10. Может у меня настолько кривые руки? или обьясните, почему не работает. Надо именно при инициализации считывать данные с реестра и от значений ставить хуки. Может к таким ДЛЛ предьявляются какието особенные требования? проверял в Делфи и VC2005, результат одинаков ![]() |
|
Создано: 11 октября 2007 08:44 · Личное сообщение · #2 Tolkin Не должно вылетать, тут скорее всего вот это: (MSDN) The AppInit_DLLs value has type REG_SZ. This value should specify a NULL- terminated string of DLLs, which is delimited by spaces or commas. Because spaces are used as delimiters, no long file names should be used. The system does not recognize semicolons as delimiters for these DLLs. Only the first 32 characters of the AppInit_DLLs value are picked up by the system. Because of this 32-character limit, all of the AppInit DLLs should be located within the SYSTEM32 directory. This eliminates the need to include a path, thus allowing multiple DLLs to be specified. ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... ![]() |
|
Создано: 11 октября 2007 11:55 · Личное сообщение · #3 |
|
Создано: 11 октября 2007 17:17 · Личное сообщение · #4 С именем ключа все нормально, ДЛЛ грузится ко всем процессам, да и ранее так работало. Проблема началась только как обращаюсь к реестру - если не обращаюсь то все остальное работает нормально. И вылетает именно на открытии ключа реестра (и именно при подгрузке ДЛЛ этим способом). Проверял на двух разных компах. вот с Ольки : Address=10000000 Message=Module c:\Hook.dll Address=7C918FEA Message=Access violation when writing to [00000010] Ошибка в этой функе вылетает : Names in ntdll, item 470 Address=7C918F8F Section=.text Type=Export Name=RtlpWaitForCriticalSection Но из-за чего это происходит, понять не могу. Проверьте ктонить у себя . (кидал длл и в папку SYSTEM32 , та же фигня) ![]() |
|
Создано: 11 октября 2007 18:44 · Личное сообщение · #5 |
|
Создано: 12 октября 2007 18:24 · Личное сообщение · #6 |
|
Создано: 14 октября 2007 14:26 · Личное сообщение · #7 |
|
Создано: 14 октября 2007 20:59 · Личное сообщение · #8 |
![]() |
eXeL@B —› Вопросы новичков —› DLL для глобального перехвата |