Минифильтр не фильтрует

Тема в разделе "WASM.BEGINNERS", создана пользователем HoShiMin, 7 сен 2017.

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    Добрый день, форумчане. Взял шаблонный минифильтр из WDK, удалил лишнее, собрал. Запускается, успешно регистрируется в системе, но ничего не фильтрует. Каллбэки не вызываются. Тестирую на Win 7.

    Сам код: https://hastebin.com/halapowiqi.c

    И результат - нет ответа от FsFilterLoad:
    [​IMG] 07-09-2017 13-54-32.png

    В чём тут дело?
     
  2. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Ждите, сейчас Кёрнель Хакеры подтянуться и ответят Вам!!!
     
  3. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Мож фаер или есентиал лочит?
    FsFilterUnload почему вызывается?
    Кстати, может не в тему - даю линк на ProcessExplorer когда то мной переделаный, там есть опции загрузки/выгрузки дров/длл, инжект длл, показ hide dll и много чего лишнего. Только под х86 пашет.
    https://www.sendspace.com/file/xyx6ki
    Password: 6daDWv4P
     
    Последнее редактирование: 7 сен 2017
  4. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    503
    ИМХО мертвая архитектура..)
     
  5. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Имхо х64 тож скоро устареет.
     
  6. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    503
    А что придет? Неужели x128 ?)
     
  7. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Хоть и не в тему тут пишем, но глядишь и кванты..... Закон Мура еще вроде воркает
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
  9. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    А на смену ей придет интерпретатор питона, зашитый в проц :)
     
    Fail, sl0n и Indy_ нравится это.
  10. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
  11. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    Версия SDK может повлиять? Собираю в VS2015 на SDK 10.0.15063.0, в Driver Settings -> General -> Target OS Version выставил Windows 7.
    Старый SDK (от 8.1) не хочет работать с новым WDK, поэтому SDK от 1703го билда десятки. Имеет значение?
     
    Последнее редактирование: 8 сен 2017
  12. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    Решил проблему. Дело в неправильно заполненном inf-файле.
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    HoShiMin,

    Не возможно, так как ваш код исполнился - имеется отладочный лог.
     
  14. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    Как есть. Забыл в inf-файле заполнить поля с альтитудой и Load Order Group. Заполнил - всё заработало.
     
  15. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Скиньте весь проект сюда, вдруг кому пригодится.
     
  16. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    Рабочий проект. Открыть, скомпилировать и запустить (ПКМ по *.inf -> Установить, затем в командной строке "net start fsfilter").
     

    Вложения:

    • FsFilter.zip
      Размер файла:
      6,9 КБ
      Просмотров:
      237
    yashechka нравится это.
  17. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    вот вы туда же да не нужен никаой inf
    все решаемо просто
    ну тут кусок, потом статейку дам с сорцами, сорри щас не могу, могу солюшен закинуть но позже

    Код (Text):
    1. DWORD WINAPI LoadDriver(LPVOID)
    2. {
    3.     WCHAR strInjDll[MAX_PATH*2*sizeof(WCHAR)]={0};
    4.     static OPENFILENAMEW of;
    5.     of.lStructSize=OPENFILENAME_SIZE_VERSION_400A;
    6.     of.hwndOwner=HWMain;
    7.     of.hInstance=hcm;
    8.     of.lpstrCustomFilter=NULL;
    9.     of.lpstrFilter=L"Driver files (*.sys)\0*.sys\0";
    10.     of.nMaxCustFilter=0;
    11.     of.nFilterIndex=1;
    12.     of.nMaxFile=MAX_PATH*2;
    13.     of.lpstrFile=strInjDll;
    14.     of.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
    15.     of.lpstrInitialDir=NULL;
    16.     of.lpstrFileTitle=NULL;
    17.     of.nMaxFileTitle=0;
    18.     of.lpstrTitle =L"Select Driver for Load. Copyright©2009-2011 sysenter (JID: sysenter@jabber.no)";
    19.     if(GetOpenFileNameW(&of))
    20.     {
    21.         UNICODE_STRING us;
    22.         WCHAR* drivn=wcsrchr(strInjDll,'\\')+1;
    23.         WCHAR* dot=wcsrchr(strInjDll,'.');
    24.         WCHAR serv[MAX_PATH];
    25.         wcscpy(serv,drivn);
    26.         serv[dot-drivn]=0;
    27.         WCHAR regp[MAX_PATH*20]={0};
    28.         wcscpy(regp,reg);
    29.         wcscat(regp,serv);
    30.         RtlInitUnicodeString(&us,regp);
    31.         OBJECT_ATTRIBUTES OA;
    32.         UNICODE_STRING ValueName,nPath;
    33.         ULONG Disposition;
    34.         HANDLE KeyHandle;
    35.         RtlInitUnicodeString(&ValueName,regp);
    36.         InitializeObjectAttributes(&OA, &ValueName,OBJ_CASE_INSENSITIVE,NULL,NULL);
    37.         if(NT_SUCCESS(NtCreateKey(&KeyHandle,KEY_ALL_ACCESS,&OA,0,NULL,REG_OPTION_NON_VOLATILE,&Disposition )))
    38.         {
    39.             RtlInitUnicodeString(&ValueName,L"ImagePath");
    40.             RtlDosPathNameToNtPathName_U(strInjDll,&nPath,NULL,NULL);
    41.             //MessageBoxW(NULL,nPath.Buffer,strInjDll,0);
    42.             if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_EXPAND_SZ,nPath.Buffer,nPath.Length+sizeof(WCHAR))))
    43.             {
    44.                 RtlInitUnicodeString(&ValueName,L"Type");
    45.                 DWORD type=1;
    46.                 if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_DWORD,&type,sizeof(DWORD))))
    47.                 {
    48.                     NtClose(KeyHandle);
    49.                     NTSTATUS st;
    50.                     st=NtLoadDriver(&us);
    51.                     if(NT_SUCCESS(st))
    52.                     {
    53.                         Beep(2500,20); //Для дебилов
    54.                     }
    55.                     else
    56.                     {
    57.                         ResetError(st,"Error:NtLoadDriver");
    58.                     }
    59.                     return 0;
    60.                 } else ResetError(0,"Error:NtSetValueKey (subkey)");
    61.             } else ResetError(0,"Error:NtSetValueKey");
    62.             NtClose(KeyHandle);
    63.         } else ResetError(0,"Error:NtCreateKey");
    64.     }
    65. return 0;
    66. }
    67. //**************************************************************************************************
    68. //
    69. DWORD WINAPI LoadDriverX(LPVOID lpvParam)
    70. {
    71.         WCHAR* strI=(WCHAR*)lpvParam;
    72.         //MessageBoxW(NULL,strI,0,0);
    73.         UNICODE_STRING us;
    74.         WCHAR* drivn=wcsrchr(strI,'\\')+1;
    75.         WCHAR* dot=wcsrchr(strI,'.');
    76.         WCHAR serv[MAX_PATH];
    77.         wcscpy(serv,drivn);
    78.         serv[dot-drivn]=0;
    79.         WCHAR regp[MAX_PATH*20]={0};
    80.         wcscpy(regp,regD);
    81.         RtlInitUnicodeString(&us,regp);
    82.         OBJECT_ATTRIBUTES OA;
    83.         UNICODE_STRING ValueName,nPath;
    84.         ULONG Disposition;
    85.         HANDLE KeyHandle;
    86.         RtlInitUnicodeString(&ValueName,regp);
    87.         InitializeObjectAttributes(&OA, &ValueName,OBJ_CASE_INSENSITIVE,NULL,NULL);
    88.         if(NT_SUCCESS(NtCreateKey(&KeyHandle,KEY_ALL_ACCESS,&OA,0,NULL,REG_OPTION_NON_VOLATILE,&Disposition )))
    89.         {
    90.             RtlInitUnicodeString(&ValueName,L"ImagePath");
    91.             RtlDosPathNameToNtPathName_U(strI,&nPath,NULL,NULL);
    92.             if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_EXPAND_SZ,nPath.Buffer,nPath.Length+sizeof(WCHAR))))
    93.             {
    94.                 RtlInitUnicodeString(&ValueName,L"Type");
    95.                 DWORD type=1;
    96.                 if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_DWORD,&type,sizeof(DWORD))))
    97.                 {
    98.                     NTSTATUS st;
    99.                     st=NtLoadDriver(&us);
    100.                     if(NT_SUCCESS(st))
    101.                     {
    102.                         return (DWORD)KeyHandle;
    103.                     }
    104.                     NtClose(KeyHandle);
    105.                     return NULL;
    106.                 }
    107.             }
    108.             NtClose(KeyHandle);
    109.         }
    110. return NULL;
    111. }
    112. //=================================================================================================
    113. /////////////////////////////////////////////////////////////////////////////////////////////////////////
    114. DWORD WINAPI UnLoadDriver(LPVOID)
    115. {
    116.     UNICODE_STRING us;
    117.     //MessageBox(NULL,strNameDll,0,0);
    118.     *strchr(strNameDll,'.')=0;
    119.     wchar_t serv[512] ={0};
    120.     mbstowcs(serv,strNameDll, sizeof(serv)-1);
    121.     WCHAR regp[MAX_PATH*20]={0};
    122.     wcscpy(regp,reg);
    123.     wcscat(regp,serv);
    124.     RtlInitUnicodeString(&us,regp);
    125.     NTSTATUS st;
    126.     st=NtUnloadDriver(&us);
    127.     if(NT_SUCCESS(st))
    128.     {
    129.         Beep(2500,20);
    130.     }
    131.     else
    132.     {
    133.         ResetError(st,"Error:NtUnLoadDriver");  
    134.     }
    135.     return 0;
    136. }
    137.  
    138. inline BOOL EnableLoadDriverPrivilege(BOOL fEnable)
    139. {
    140.    BOOL fOk = FALSE;
    141.    HANDLE hToken;
    142.    if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,&hToken))
    143.    {
    144.       TOKEN_PRIVILEGES tp;
    145.       tp.PrivilegeCount = 1;
    146.       LookupPrivilegeValue(NULL, SE_LOAD_DRIVER_NAME, &tp.Privileges[0].Luid);
    147.       tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
    148.       AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
    149.       fOk = (GetLastError() == ERROR_SUCCESS);
    150.       CloseHandle(hToken);
    151.    }
    152.    return(fOk);
    153. }
    154.  
    155. /////////////////////////////////////////////////////////////////////////////////////////////////////////
    156. DWORD WINAPI UnLoadDriverX(LPVOID lpvA)
    157. {
    158.     char sz_ex[24]={0};
    159.     strcpy(sz_ex,(char*)lpvA);
    160.     UNICODE_STRING us;
    161.     *strchr(sz_ex,'.')=0;
    162.     wchar_t serv[512] ={0};
    163.     mbstowcs(serv,sz_ex, sizeof(serv)-1);
    164.     WCHAR regp[MAX_PATH*20]={0};
    165.     wcscpy(regp,regD);
    166.     wcscat(regp,serv);
    167.     RtlInitUnicodeString(&us,regD);
    168.     NTSTATUS st;
    169.     st=NtUnloadDriver(&us);
    170.     if(NT_SUCCESS(st))
    171.     {
    172.         Beep(2500,20);
    173.     }
    174.     else
    175.     {
    176.         //ResetError(st,"Error:NtUnLoadDriver");  
    177.     }
    178.     return 0;
    179. }
    180.  
     
    yashechka нравится это.
  18. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    это от ProcessExplorer+ кусок юзайте и вкуривайте мож плюсанет ктото, что на данном форуме хоть кто то начал выкладывать сорцы а не куски недоработок :dntknw:
     
    yashechka нравится это.
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    RET,

    Загрузка драйверов происходит через реестр, это известный механизм. В данном случае не ясно почему не происходит нотификация, а сам дров загружается и апи успешно выполняются. Видимо что бы понять суть нужно разбирать механизм фильтров, его реализацию.
     
    yashechka нравится это.
  20. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    вы ответили на свой же вопрос - именно через реестр
     
    yashechka нравится это.