Обвязка к пакету аутентификации msv1_0.dll

Тема в разделе "WASM.WIN32", создана пользователем Daiver, 12 дек 2006.

  1. Daiver

    Daiver New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2005
    Сообщения:
    17
    Адрес:
    Россия
    Здравствуйте.

    Пытаюсь написать свою библиотеку, которая будет получать нужные мне данные
    и вызвать оригинальные функции из оригинальной библиотеки.

    После замены
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Authentication Packages
    с msv1_0
    на murzik msv1_0

    и добавления murzik в список
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages

    Моя murzik.dll падает, вылезает окошко что lsa плохо, и что через миниту винда пойдет на перезагрузку.

    Возможно я в принципе не верно подошел к задаче, но:
    пишу длл на c, собираю mingw, написав маленький makefile
    all:
    gcc -c main.c -o murzik.o
    dllwrap -k --dllname murzik.dll --def main.def --output-lib murzik.lib murzik.o
    strip murzik.dll

    В самой либе:
    в DllMain загружаю родную либу
    hLib = LoadLibrary ("c:/windows/system32/msv1_0.dll");

    Получаю адреса родных функций
    lacp = (LACP) GetProcAddress (hLib, "LsaApCallPackage");
    lacpp = (LACPP) GetProcAddress (hLib, "LsaApCallPackagePassthrough");
    lacpu = (LACPU) GetProcAddress (hLib, "LsaApCallPackageUntrusted");
    lap = (LAP) GetProcAddress (hLib, "LsaApInitializePackage");
    lalt = (LALT) GetProcAddress (hLib, "LsaApLogonTerminated");
    lalue2 = (LALUE2) GetProcAddress (hLib, "LsaApLogonUserEx2");

    И вызываю их из своих.

    Может быть кто подскажет хотя бы куда копать.

    Добавил запись в лог, и после перезагрузки с родной либой в своем логе вижу:
    DLL_PROCESS_ATTACH
    LoadLibrary 77c60000
    LsaApInitializePackage 0
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    LsaApCallPackage 0
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_DETACH
    DLL_THREAD_DETACH
    DLL_THREAD_ATTACH
    DLL_THREAD_DETACH
    DLL_THREAD_DETACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_DETACH
    LsaApLogonTerminated
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_ATTACH
    DLL_THREAD_DETACH

    Т.е. LsaApInitializePackage вызвается и даже возвращает NTSTATUS == 0

    Исходинк в аттаче.
    Пните в правильном направлении.
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
  3. Daiver

    Daiver New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2005
    Сообщения:
    17
    Адрес:
    Россия
    Не в данном случае имя не имеет значения.
    Если переименовать родную либу, и поменять имя в реестре, все работает.
    Моя со стандартным именем не пашет.

    Думаю может что-то надо делать в DllMain.
    При создании/удалении треда/процесса.

    Может надо вызвать родной DllMain для каждого треда.
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Daiver
    А ты смотрел в MSDN?
     
  5. Daiver

    Daiver New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2005
    Сообщения:
    17
    Адрес:
    Россия
    Смотрел
    В родной нет DllMain.
    А в msdn написано что надо реализовать в своей 6 функций и радоваться жизни.
    Только вот сделать заглушки пока не получается.
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Daiver
    А нет-ли примеров реализации подобного на уровне выполняемых файлов, библиотек и др.?
     
  7. Daiver

    Daiver New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2005
    Сообщения:
    17
    Адрес:
    Россия
    Эх был бы рабочий пример....

    Сейчас просто попробую тупым способом,
    типа моя бибилотека грузит оригинальную,
    ищет адрес функци вызвает ее, выгружает либу.
    И так со всеми.
     
  8. zxm

    zxm New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2006
    Сообщения:
    71
    Сделаешь - скажи. Я какраз собирался этой темой в ближайшем будущем заняться.
     
  9. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Daiver
    Дык, а сама msv1_0 разве рабочим примером не является? Для нее и pdb можно с мелкософта загрузить...

    Посмотрел на нее... Сплошной фарш. Тяжеловато воспринимается.

    А вот как выглядит ее стартапный код:
    Код (Text):
    1. int __stdcall start(HMODULE hLibModule, int Reason)
    2. {
    3.     if (Reason == DLL_PROCESS_ATTACH)
    4.     {
    5.         DisableThreadLibraryCalls(hLibModule);
    6.         sub_77C648AE();
    7.     }
    8.     return 1;
    9. }
    10.  
    11. void __stdcall sub_77C648AE()
    12. {
    13. LARGE_INTEGER  PerformanceCount;
    14. FILETIME           SystemTimeAsFileTime;
    15. DWORD             res;
    16.  
    17.     if (!dword_77C7D3C8 || dword_77C7D3C8 == 0xBB40)
    18.     {
    19.         GetSystemTimeAsFileTime(&SystemTimeAsFileTime);
    20.         res = SystemTimeAsFileTime.dwHighDateTime ^ SystemTimeAsFileTime.dwLowDateTime;
    21.         res ^= GetCurrentProcessId();
    22.         res ^= GetCurrentThreadId();
    23.         res ^= GetTickCount();
    24.         QueryPerformanceCounter(&PerformanceCount);
    25.         res ^= PerformanceCount.LowDword;
    26.         res ^= PerformanceCount.HighDword;
    27.         res &= 0xFFFF;
    28.         if (!res) res = 0xBB40;
    29.         dword_77C7D3C8 = res;
    30.     }
    31.     dword_77C7D484 = !dword_77C7D3C8;
    32. }
     
  10. Daiver

    Daiver New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2005
    Сообщения:
    17
    Адрес:
    Россия
    Задача стоит как рез не трогать родную, не повротять ее реализацию.
    У меня есть ее сорцы.
    Задача как раз грузиться до, делать все что нужно, и если все должно идти
    своим чередом, отдавать управление родной, чтобы даже не зависеть от версии.
    Занимался другим. Завтра если времени хватит, добью хедер с внутренними кишками,
    да собиру и сообщу результаты.
     
  11. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Daiver
    Если я правильно понял - задача фильтровать даные при интерактивном входе, то можно так:
    1. http://www.codeproject.com/w2k/LoginFilter.asp
    2. Если фильтр для любого вида аутентификации - сплайсинг. Запиши переход на свои родымые функции, а после обработки - передавай вызов msv1_0.dll.