Конфликт перехвата?

Тема в разделе "WASM.WIN32", создана пользователем Fedor666, 30 ноя 2011.

  1. Fedor666

    Fedor666 Fedor

    Публикаций:
    0
    Регистрация:
    27 май 2009
    Сообщения:
    30
    Адрес:
    М.О., г.Королев
    Доброго времени суток.
    Сплайсю функции записи в реестр, путем внедрения в адресные пространства процессов своего DLL через ключ "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs".
    При загруженном компе прописываю в этот ключ свою DLL и она начинает автоматически подгружаться ко всем создаваемым процессам и при получении DLL_PROCESS_ATTACH идет перехват. Все пашет отлично и в файлик складывается инфа кто куда чего пишет.
    При перезагрузке же комп просит выбрать имя пользователя и ввести пароль (хотя раньше такого не было), потом выдает следущее: "Не удается войти в систему из-за следующей ошибки: Операция несовместима с состоянием транзакции для ветки реестра".
    Пользую XP SP3. Так же стоит Daemon Tools, который устанавливает sptd.sys, который перехватывает те же функции работы с реестром.
    Причем, если не перехватывать функции во всех этих процессах: smss.exe, csrss.exe, winlogon.exe и lsass.exe, то загрузка проходит успешно. Глючит какой-то из них. Какой не знаю - перезагружаться задолбался!
    Приходится пропускать основные процессы, в которые обычно и внедряются всякие интересности. А это не гуд.
    В чем может быть причина? Все процессы обрабатываются на ура, а какие-то из этих глючат. Есть какие-нибудь идеи? Может кто уже сталкивался?
    Спасибо.
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Возможно ваша библиотека крошит реестр (или приложение). если выносите библиотеку то загружается нормально?
     
  3. Fedor666

    Fedor666 Fedor

    Публикаций:
    0
    Регистрация:
    27 май 2009
    Сообщения:
    30
    Адрес:
    М.О., г.Королев
    Приходится загружаться с диска и очищать ключ реестра. Тогда грузится нормально. Если уже в загруженном компе подключать DLL, то тоже все нормально :dntknw:
    Что такое?
     
  4. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Что в перехвате делайте?
     
  5. Fedor666

    Fedor666 Fedor

    Публикаций:
    0
    Регистрация:
    27 май 2009
    Сообщения:
    30
    Адрес:
    М.О., г.Королев
    h0t, сплайсю с трамплином NtSetValueKey. Даже в трамплине корректирую относительные jmp и call. Использую функции GetModuleHandle, GetModuleFileName, GetProcAddress, VirtualProtect, WideCharToMultiByte, wsprintf и в исключительных случаях MessageBox.
    Смысл: отслеживание изменения ключей реестра, ответственных за автозагрузку.
     
  6. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Частая ошибка, когда человек импортирует функции из библиотек, которые ЕЩЕ НЕ ЗАРГРУЖЕНЫ.
    Например из User32.dll.
    Сперва посмотрите ваш импорт и уберите все высокоуровневые апи.
    После того, как система прогрузилась, все длл уже загружены и ошибка не возникает.
     
  7. Fedor666

    Fedor666 Fedor

    Публикаций:
    0
    Регистрация:
    27 май 2009
    Сообщения:
    30
    Адрес:
    М.О., г.Королев
    Magnum, user32.dll действительно используется. Но линковка статическая. Разве загрузчик не должен подгружать все необходимые DLL до запуска DllMain?
     
  8. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Локализуйте до процесса одного.
    возможно в этом процессе уже установлен аналогичный перехват слегка кривее
    Или слегка несовместим с вашим перехватом)
     
  9. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Должен. Но некоторые модули можно загрузить только после полной загрузки системы.
    К примеру user32.dll, т.к. он тянет за собой всю высокоуровневую обертку графической подсистемы. Да ту же gdi32.dll.
    Вся эта байда при попытке загрузки на начальном этапе старта ОС закрешит smss.exe и csrss.exe.
    Либо инжектируйте после авторизации и полного старта системы, либо отказывайтесь от user32
     
  10. Fedor666

    Fedor666 Fedor

    Публикаций:
    0
    Регистрация:
    27 май 2009
    Сообщения:
    30
    Адрес:
    М.О., г.Королев
    Код (Text):
    1.     push NewProc
    2.     ret
    Что может быть слегка несовместимым? Да и AVZ видит перехват только в ядре.
    Может sptd.sys перехватывает эти функции в ядре, а их номера берет из ntdll.dll? Может такое быть?
     
  11. Fedor666

    Fedor666 Fedor

    Публикаций:
    0
    Регистрация:
    27 май 2009
    Сообщения:
    30
    Адрес:
    М.О., г.Королев
    Спасибо всем! Пошлю к черту user32.dll. Вот засада...
    Вот еще: где можно надыбать ХОРОШИЙ справочник Native API?
     
  12. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Fedor666
    Вы можете использовать kernel32.dll, ntdll.dll, advapi32.dll
    Апи из этих модулей документированы в MSDN.
     
  13. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Windows NT/2000 Native API Reference