Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› DLL для глобального перехвата
Посл.ответ Сообщение

Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 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, результат одинаков




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 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.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 11 октября 2007 11:55
· Личное сообщение · #3

Tolkin

Вставь отладочных сообщений да посмотри.

-----
Security through obscurity is just an illusion




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 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 , та же фигня)



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 11 октября 2007 18:44
· Личное сообщение · #5

что интересно, вылетает не на всех прогах подряд, на некоторых все нормально проходит.



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 12 октября 2007 18:24
· Личное сообщение · #6

хм, раз никто не знает, придется отказаться от использования реестра, хотя это и не правильно.



Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 14 октября 2007 14:26
· Личное сообщение · #7

Tolkin
а может попробовать принудительно загрузить ADVAPI32.DLL?

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 14 октября 2007 20:59
· Личное сообщение · #8

Попробовал загрузить ADVAPI32.DLL, но проблема не решилась, все по старому


 eXeL@B —› Вопросы новичков —› DLL для глобального перехвата
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати