Сейчас на форуме: -Sanchez- (+9 невидимых) |
eXeL@B —› Основной форум —› Упаковка DLL x64 в Windows 10 с Control Flow Guard (CFG) |
Посл.ответ | Сообщение |
|
Создано: 05 марта 2020 17:21 · Личное сообщение · #1 Делаю упаковщик 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 для упакованного(на диске) и неупакованного файла(в памяти) ничего не дает. |
|
Создано: 05 марта 2020 18:30 · Личное сообщение · #2 |
|
Создано: 05 марта 2020 20:20 · Личное сообщение · #3 |
|
Создано: 05 марта 2020 21:36 · Личное сообщение · #4 |
|
Создано: 05 марта 2020 23:46 · Личное сообщение · #5 |
|
Создано: 06 марта 2020 00:40 · Поправил: RamMerlabs · Личное сообщение · #6 |
|
Создано: 06 марта 2020 00:47 · Личное сообщение · #7 RamMerlabs При включённой CFG любая передача управления приведёт к int29, своим или не своим без разницы. mrdata секция не протекчена ядром, можно переписать любые данные, обнулить указатель на карту в частности, это если совсем по тупому делать, не разбираясь как работает защита ----- vx | Сообщение посчитали полезным: cracker888 |
|
Создано: 06 марта 2020 00:55 · Личное сообщение · #8 difexacaw пишет: При включённой CFG любая передача управления приведёт к int29, своим или не своим без разницы. mrdata секция не протекчена ядром, можно переписать любые данные, обнулить указатель на карту в частности, это если совсем по тупому делать, не разбираясь как работает защита А вот это уже очень близко, и действильно ловлю int 29. А что Вы имеете ввиду под передачей управления? И да, как обнулить указатель на карту, где этот указатель хранится, он для DLL или для EXE? Сейчас хочется может даже по тупому))) Добавлено спустя 2 минуты RamMerlabs пишет: Попробуйте грузить DLL своим лоадером, без rundll. У меня к сожалению есть такое требование. user99 пишет: А вы пробовали готовые упаковщики/протекторы? Может они тоже не будут работать с этой защитой и проблема не в вашем коде? Надо попробовать. |
|
Создано: 06 марта 2020 01:10 · Личное сообщение · #9 cracker888 CFG/CFI защита локальна, принцип в том, что локально в процессе нельзя выполнить косвенное ветвление(CFG) или возврат(CFI) на не определённый указатель. Для удаленной записи же процесс полностью открыт и можно что угодно изменить. > где этот указатель хранится Открой дизом с символами да посмотри сам, mrdata секция она локально протектится от записи. А при включённой защите падать будет во всё нэйтиве, там на каждом углу проверки ----- vx |
|
Создано: 06 марта 2020 01:21 · Поправил: plutos · Личное сообщение · #10 |
|
Создано: 06 марта 2020 01:23 · Личное сообщение · #11 |
|
Создано: 06 марта 2020 06:23 · Личное сообщение · #12 |
|
Создано: 06 марта 2020 09:00 · Личное сообщение · #13 Топикастор ь малварь пишет а тут все бросились ему помогать......... ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: ajax |
|
Создано: 06 марта 2020 09:23 · Личное сообщение · #14 |
|
Создано: 06 марта 2020 12:21 · Поправил: difexacaw · Личное сообщение · #15 Apocalypse LdrGetProcedureAddressForCaller -> LdrpResolveProcedureAddress -> LdrpGetProcedureAddress -> LdrControlFlowGuardEnforced(TRUE) -> RtlpxLookupFunctionTable(FAIL) -> int29. ----- vx | Сообщение посчитали полезным: ajax |
|
Создано: 06 марта 2020 13:34 · Личное сообщение · #16 |
|
Создано: 06 марта 2020 14:39 · Личное сообщение · #17 |
|
Создано: 06 марта 2020 18:32 · Личное сообщение · #18 |
|
Создано: 06 марта 2020 18:44 · Личное сообщение · #19 |
|
Создано: 10 марта 2020 20:32 · Личное сообщение · #20 difexacaw пишет: Оно и должно упасть, при любом обратном вызове(косвенное ветвление) пройдёт проверка указателя в карте. А как оно падает, если в DLL нет Load Config Directory, я так понял CFG работает при поддержке компилятора, а также заполняется необходимая информация в PE-файле, а именно в Load Config Directory. Почему падает-то? О_О |
eXeL@B —› Основной форум —› Упаковка DLL x64 в Windows 10 с Control Flow Guard (CFG) |