Делаю упаковщик x64 DLL. Проверяю работоспособность через rundll32 dllname,funcname. Успешно загружается внутри с помощью LoadLibraryExW, потом следом rundll32 вызывает GetProcAddress для указанного экспорта (funcname) и в этот момент получаю exception в глубине GetProcAddress. Оказывается, что ее ловит CFG - Control Flow Guard в Windows 10, а именно исключение вызывает функция LdrControlFlowGuardEnforced(). На Windows 7 всё работает, выключаю защиту эксплоитов в Windows 10 - тоже всё работает. Упакованную DLL загружаю через VirtualAlloc. Каждой секции проставляются нужные атрибуты с помощью VirtualProtect. Вопрос, что делать??? Проставка флага /NXCOMPAT:NO для упакованного(на диске) и неупакованного файла(в памяти) ничего не дает.
SetProcessValidCallTargets Если конечно проблема связана с тем, что получаемый адрес функции не нравится cfg.
У вас любой API такие вопросы вызывает? https://docs.microsoft.com/ru-ru/wi...etprocessvalidcalltargets?redirectedfrom=MSDN https://docs.microsoft.com/en-us/windows/win32/memory/-cfg-call-target-info https://github.com/trailofbits/cfg-showcase/blob/master/cfg_valid_targets.cpp https://www.google.com/
LdrControlFlowGuardEnforced() проверяет(исключений непосредственно не создаёт) указатель на CF битмапу, используется ли она: Код (Text): LdrControlFlowGuardEnforced: cmp cs:qword_18017A380, 0 LdrpValidateUserCallTarget: mov rdx, cs:qword_18017A380 mov rax, rcx shr rax, 9 mov rdx, [rdx+rax*8] Откуда карта туда загружается не понятно(LdrSystemDllInitBlock..). Можно попробовать штатные апи для отключения защиты вызвать, если не получится придётся либо разбираться в механизмах, либо переписать переменные.
Апи нету насколько я знаю, ну за исключением SetProcessValidCallTargets, но там как то всё сложно, хотя я глубоко не копал. Ну по хорошему Вы правы, надо сесть и всё разобрать, я надеялся услышать принцип стоящий за этой апи, глубоко не копал, но боюсь придется)
EvilPhreak1, У ionescu и в интерналс было описание меанизма, он довольно сложен, там ядерный интерфейс. LdrControlFlowGuardEnforced экспортится, обнули указатель и вуаля защиты нет.
А какой именно указатель? Извините за тупость) Попробовал обнулить cs:qword_18017A380, но падает всё...