Сейчас на форуме: jinoweb (+4 невидимых) |
eXeL@B —› Программирование —› Как выгрузить чужую DLL из своего процесса? |
Посл.ответ | Сообщение |
|
Создано: 27 января 2019 16:14 · Личное сообщение · #1 Подскажите, реально ли выгрузить чужую дллку из своего процесса? Или каким-то образом деактивировать ее? Есть софт, который как-то (через дров или еще как нибудь) добавляет во все процессы в системе свою либу. Я хочу ее как-то убрать, но GetModuleHandle/FreeLibrary почему-то не помогает. Функции вроде отрабатывают без ошибок, но дллка дальше есть в списке. Что с этим можно сделать? |
|
Создано: 27 января 2019 16:27 · Личное сообщение · #2 Первым делом узнай каким образом и что ее подгружает Если драйвер, то он может блокировать выгрузку этой дллки либо подгружать ее заново Можешь поискать уязвимый драйвер, от античитов например, они часто умеют писать и читать память, но нужно разобрать их протокол (это полезно для любой задачи нулевого кольца) ----- В облачке многоточия |
|
Создано: 27 января 2019 16:35 · Поправил: kunix · Личное сообщение · #3 |
|
Создано: 27 января 2019 16:46 · Личное сообщение · #4 |
|
Создано: 27 января 2019 16:51 · Личное сообщение · #5 |
|
Создано: 27 января 2019 16:58 · Поправил: dezmand07 · Личное сообщение · #6 morgot пишет: не пробовал. вызывайте LdrUnloadDll на прямую из ntdll (без LoadLibrary и GetProcAddress) и попробуйте выгрузить. прототип typedef __int32(__stdcall* _LdrUnloadDll)( void* ModuleHandle ); _LdrUnloadDll LdrUnloadDll; можно распарстить экспорт ntdll (IMAGE_EXPORT_DIRECTORY) и по номеру функции достать адрес её смещения // номер функции LdrUnloadDll в таблице экспорта ntdll.dll = 174 unsigned __int32* fn_LdrUnloadDll = (unsigned __int32*)0; for (; 174 < pExpDir->NumberOfNames;) { fn_LdrUnloadDll = (unsigned __int32*)((unsigned __int32)NtDllBase + AddrFunc[174]); break; } LdrUnloadDll = (_LdrUnloadDll)fn_LdrUnloadDll; и вызывать, передав хендл dll LdrUnloadDll(hModule); |
|
Создано: 28 января 2019 13:59 · Личное сообщение · #7 |
|
Создано: 28 января 2019 17:21 · Личное сообщение · #8 |
|
Создано: 28 января 2019 18:07 · Личное сообщение · #9 |
|
Создано: 28 января 2019 19:32 · Поправил: difexacaw · Личное сообщение · #10 morgot Если модуль добавляется во все процессы, то это не значит что он выгружается из них при завершении. Ядро чистит всё, снимая юзер процесс - нет смысла освобождать ресурсы. Может это авер двиг, который хучит всё и отменить невозможно, так как механизм выгрузки не реализован. Обычно для такого спец софта выгрузка невозможна - оно модифицирует апп под себя, на это налаживается есчо какой то слой хуков/изменений и в конце даже если и будет попытка отката, она не сработает. Вопрос частный, общее решение не существует(тк нет ничего конкретного, те общей задачи). ----- vx |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 28 января 2019 19:56 · Личное сообщение · #11 morgot пишет: добавляет во все процессы в системе свою либу. Первые ассоциации, это ветка реестра Appinit_Dlls (боян). Как минимум, можно почерпнуть инфу, идет ли загрузка либы оттуда. Если name is static, то (самому интересно работает ли, нет перед собой компа) можно попробовать свою дллку с таким же именем подгрузить первой и залочить запуск извне. В остальном, как уже сказано выше, нужно разбирать как частный случай. | Сообщение посчитали полезным: freudz |
|
Создано: 28 января 2019 20:57 · Личное сообщение · #12 |
|
Создано: 28 января 2019 22:37 · Личное сообщение · #13 Прошу не пинайте сильно нуба, спрашиваю что бы научиться. Если это свое приложение, то нельзя ли самому составить IDT, сперва найдя нужные dll. Сохранить в каком-нибудь укромном месте и сверять обращения к IDT с действительно необходимым? При рассогласовании падать. Или это не даст эффекта? В чем опасность чужого длл в адрессном пространстве проца, если eip на него никогда не зайдет? |
|
Создано: 28 января 2019 23:51 · Личное сообщение · #14 ELF_7719116 пишет: Первые ассоциации, это ветка реестра Appinit_Dlls Соглашусь. Копать отсюда. Как вариант предотвращения загрузки левака в СВОЙ процесс - хук LoadLibraryA/W/Ex, GetModuleHandleA/W при старте процесса. Хотя бы той же минхукой - https://github.com/TsudaKageyu/minhook Ну в переопределенных функциях загрузки либы действовать уже по усмотрению ) |
|
Создано: 29 января 2019 08:33 · Личное сообщение · #15 Я выгружал dll от аваста так: Code:
Добавлено спустя 2 минуты Функции, начинающиеся с префикса f (fwcsrchr, fwcscmp, ...) - обычные функции без префикса из ntdll. Просто писал без crt Добавлено спустя 4 минуты Но в dll был реализован механизм выгрузки. Также видел некую прогу, которая реализовала механизм выгрузки этой dll гораздо проще - так же, как и в посте 3 ----- IZ.RU |
|
Создано: 29 января 2019 09:48 · Личное сообщение · #16 |
|
Создано: 29 января 2019 13:55 · Личное сообщение · #17 |
|
Создано: 29 января 2019 14:27 · Личное сообщение · #18 |
|
Создано: 29 января 2019 20:33 · Поправил: difexacaw · Личное сообщение · #19 |
|
Создано: 07 мая 2019 16:57 · Личное сообщение · #20 |
|
Создано: 21 января 2020 18:12 · Личное сообщение · #21 Оказывается, начиная с вин8.1 есть такая замечательная вещь, как process mitigation. Помимо прочего, там есть возможность запретить загрузку в процесс DLL, которые не подписаны Майкрософтом (т.е. все эти аверские и прочие пролетают). Code:
Минус, помимо того, что не работает на семерке и ниже, еще то, что если длл уже загружена, то эта функция ее не выгружает, настройки действуют только для последующих попыток. Т.е. нужно перезапускать процесс и задавать уже для нового эти настройки безопасности. | Сообщение посчитали полезным: DenCoder, user99 |
|
Создано: 21 января 2020 18:29 · Личное сообщение · #22 |
|
Создано: 21 января 2020 19:26 · Личное сообщение · #23 |
|
Создано: 24 января 2020 15:15 · Личное сообщение · #24 |
|
Создано: 24 января 2020 16:09 · Личное сообщение · #25 |
|
Создано: 24 января 2020 19:23 · Личное сообщение · #26 hiddy насчет дров не скажу, но дллка с чего должна быть подписана Майкрософтом, если у нее есть подпись Аваста или еще кого. А эта политика разрешает подгружать в процесс только дллки, подписанные Майкрософтом, т.е. стандартные длл винды. Касаемо отключить - не знаю, но не думаю, что авер будет такое делать. Иначе толку то с этой защиты, чтоб разный говнософт своими кривыми длл лез в мой процесс. Добавлено спустя 1 минуту difexacaw я тестил на виртуалке, появляется просто ошибка вида "длл такое-то (тут путь к авасту) не является какой-то там валидной программой винды", точно не помню текст. Но прога запускается, и в списке модулей нет аверского или еще какого (я тестил и собственный инжектор) модуля. |
eXeL@B —› Программирование —› Как выгрузить чужую DLL из своего процесса? |