глянул кодес пресловутой RtlQueryElevationFlags, там дословно примерно так: Code: unsigned int NTAPI RtlQueryElevationFlags(DWORD *pdwElevationFlags) { // if 0 then no UAC prompt *pdwElevationFlags = 0; // _KUSER_SHARED_DATA *pSharedUserData = (_KUSER_SHARED_DATA *)0x00000000`7ffe0000; // SharedDataFlags bitfield: //+0x2f0 DbgErrorPortPresent : 0y0 //+0x2f0 DbgElevationEnabled : 0y1 //+0x2f0 DbgVirtEnabled : 0y1 //+0x2f0 DbgInstallerDetectEnabled : 0y1 //+0x2f0 DbgLkgEnabled : 0y0 //+0x2f0 DbgDynProcessorEnabled : 0y0 //+0x2f0 DbgConsoleBrokerEnabled : 0y0 //+0x2f0 DbgSecureBootEnabled : 0y0 if(pSharedUserData->SharedDataFlags & 2) // DbgElevationEnabled set *pdwElevationFlags = 1; if(pSharedUserData->SharedDataFlags & 4) // DbgVirtEnabled set *pdwElevationFlags |= 2; if(pSharedUserData->SharedDataFlags & 8) // DbgInstallerDetectEnabled set *pdwElevationFlags |= 4; return 0; } в статье на хабре чел зачемто сплайсил RtlQueryElevationFlags, чтобы не выставлялись флаги элевации, в то время как можно было просто захардкодить 2 версии под х64 и х86, типа чтобы просто переписывалось на *pdwElevationFlags = 0; return 0; тащемта вопрос один - существуют ли реализации с затиранием битфилда из KUSER_SHARED_DATA из юзермода?
а в чем соль то? хукнуть функцию это простой и эффективный метод. ну можно пропатчить ее в самой ntdll
зачем тащить с собой либу детурса с дизасмом длин когда все решается обычным битхаком? втрое - да, она экспортируется нтдлл кэп
так и патч себе ее в ntdll, и не надо ниче таскать.Я правда не понимаю что такого, ну возьми не детур, а маленький mhook в чем проблема собсно?