Shims в Win 10

Тема в разделе "WASM.RESEARCH", создана пользователем jeer0, 18 авг 2017.

  1. jeer0

    jeer0 Member

    Публикаций:
    0
    Регистрация:
    31 июл 2017
    Сообщения:
    34
    Привет всем. Заметил, что AppCompat shims не работают на Windows 10. Пореверсил apphelp.dll и %windir%\AppPatch\* и увидел, что shim-ы вообще отключили, судя по всему. Вырезали?

    Для тех, кто не в курсе, вкратце раскажу как все это работало: мы ставили sdb-базу, содержащую шим для <имя_процесса> (например, с помощью штатной sdbinst.exe), она прописывалась в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom\<имя_процесса>
    и при создании процесса <имя_процесса> загружалась внутри CreateProcess():
    CreateProcessInternalW() вызывает BasepQueryAppCompat(), которая читает sdb-файл и сохраняет
    пропарсенную информацию в PEB->pShimData создаваемого процесса.

    Так вот, в Win 10 ветка AppCompatFlags\Custom даже не читается (это видно в ProcMon), а если посмотреть на код kernel32!BasepQueryAppCompat, то там больше этого функционала нет.
     
  2. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    219
    Адрес:
    Russian Federation
    Какой build number винды?
     
  3. jeer0

    jeer0 Member

    Публикаций:
    0
    Регистрация:
    31 июл 2017
    Сообщения:
    34
    comrade, Microsoft Windows [Version 10.0.15063]
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    1.697
    у меня билд 10.0.10586 без апдейтов - шимы работают...
     
  5. Indy_

    Indy_ Well-Known Member

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

    10.0.10x, ntdll:

    Код (Text):
    1. .text:6A2C3DC8                 mov     eax, [eax+18h]
    2. .text:6A2C3DCB                 mov     _g_pShimEngineModule, eax
    3. .text:6A2C3DD0                 call    LdrpGetShimEngineInterface
    4. .text:6A2C3DD5                 mov     esi, eax
    5. .text:6A2C3DD7                 test    esi, esi
    6. .text:6A2C3DD9                 jns     short loc_6A2C3E04
    7. .text:6A2C3DDB                 mov     eax, _ShowSnaps
    8. .text:6A2C3DE0                 test    al, 3
    9. .text:6A2C3DE2                 jz      short loc_6A2C3DB2
    10. .text:6A2C3DE4                 push    esi
    11. .text:6A2C3DE5                 push    offset aGettingTheShim ; "Getting the shim engine exports failed "...
    12. .text:6A2C3DEA                 push    ebx
    13. .text:6A2C3DEB                 push    offset aLdrpgetprocapp ; "LdrpGetProcApphelpCheckModule"
    14. .text:6A2C3DF0                 push    0A73h
    15. .text:6A2C3DF5                 push    offset aMinkernelNtd_5 ; "minkernel\\ntdll\\ldrinit.c"
    16. .text:6A2C3DFA                 call    _LdrpLogDbgPrint
    17.  
    Так что не выпилили скорее, а изменили. Почему вы не посмотрели как это работает в вашей версии - хз, видимо не нужно.