![]() ![]() |
|||||||||||
1 | |||||||||||
Создание удаленного потока09.09.2015, 01:24. Просмотров 1442. Ответов 2
Приветствую!
Собственно имеется код, который создает поток, подгружающий DLL в чужой процесс: Кликните здесь для просмотра всего текста
И сама DLL: Кликните здесь для просмотра всего текста
Для некоторых процессов (например, AkelPad) нормально пишется лог: Для третьих (chrome.exe, собственно то, что мне требуется) - поток создается успешно. LastDllError тоже проверял ( = 0 ), но такое впечатление что код DLL не выполняется, т.к. лог-файл не создается. Программу запускаю с повышенными привилегиями. Что можно улучшить, как исправить ошибки? Спасибо.
0
|
|
09.09.2015, 01:24 | |
Создание удаленного потока Создание удаленного потока
Создание удалённого доступа |
|
Ушел с форума
![]() |
|
09.09.2015, 10:21 | 2 |
Код, который создает удаленный поток, а также внедряемая dll, должны быть одинаковой с
процессом-"жертвой" разрядности и выполняться с ним в одном и том же сеансе. Это самое первое. А не пишет в файл, скорее всего, из-за нехватки прав. Процессы chrome, как и IE в защищенном режиме, выполняются на уровнях целостности low и untrusted. Чтобы с этих уровней обращаться к файлам, реестру, процессам и другим объектам, на этих объектах должна стоять соответствующая разрешающая метка. См. icacls, опция setintegritylevel. К сожалению, метку "untrusted" эта утилита не понимает, только "low". Windows Integrity Mechanism Design https://msdn.microsoft.com/en-... 25963.aspx Understanding and Working in Protected Mode Internet Explorer https://msdn.microsoft.com/en-... s.85).aspx A Developer's Survival Guide to IE Protected Mode http://www.codeproject.com/Art... ected-Mode На Windows 8 и выше процессы также могут выполняться в "песочнице" (AppContainer). В списке разрешений объектов, доступ к которым требуется из процессов-песочниц, должен быть прописан SID соответствующего AppContainer-а, или, как вариант, SID "All Application Packages" (S-1-15-2-1). У Chrome, кстати говоря, вообще очень мощная песочница, не удивляйся, если даже после загрузки туда dll все равно толком не будет работать: Sandbox https://www.chromium.org/devel... ts/sandbox Для некоторых процессов может быть выставлена защита (Vista Protected Processes или Protected Processes Light на Windows 8.1 и выше), открыть такие процессы с нужными для инжекта правами не получится даже из-под администратора или системы, и привилегия отладки не поможет. Еще загрузка dll в процесс может блокироваться т.н. "Mitigation Policy", см. здесь: UpdateProcThreadAttribute function https://msdn.microsoft.com/en-... s.85).aspx Например, если для процесса выставлен флаг "FORCE_RELOCATE_IMAGES_ALWAYS_ON_REQ_RELOCS", то в него возможна только загрузка dll, которые умеют загружаться по произвольному адресу ("dll rebase", см. опции сборки /DYNAMICBASE (ASLR) и /FIXED:NO в Visual C++). Во-первых, перед работой с процессами всегда полезно попытаться включить привилегию отладки (SE_DEBUG_NAME). Во-вторых, в DllMain можно безопасно вызывать только некоторое подможество функций kernel32.dll и ntdll.dll, но не GetCurrentProcessExplicitAppUserModelID из shell32.dll. Нет никакой гарантии, что shell32.dll уже проинициализирована на момент вызова и что вызов не будет связан с работой других потоков процесса, а они на время работы DllMain не могут создаваться и уничтожаться. DllMain entry point https://msdn.microsoft.com/en-... s.85).aspx Dynamic-Link Library Best Practices https://msdn.microsoft.com/en-... s.85).aspx Я бы посоветовал из DllMain вызвать CreateThread/_beginthreadex, и уже в функции созданного потока проделать всю нужную работу.
0
|
![]() ![]() |
|||||||||||
12.09.2015, 16:51 [ТС] | 3 | ||||||||||
Спасибо за столь развернутый ответ.
Похоже здесь максимум из того, что мне может потребоваться. Делюсь результатами, на чем остановился... по просьбам из другой темы. Убедился через Диспетчер задач, что процессы-"жертвы" имеют одинаковую разрядность с DLL и процессом, который ее внедряет (x32). Понизил уровень целостности контейнера до уровня "Низкий". По сути проблема № 2 с "вылетом" (это внедрение в iexplore.exe) решилась выведением кода получения UMID в отдельный поток. Поправил ошибки в "украденном" коде с типами данных и незакрытым хендлом. Задействовал альтернативные способы обмена данными между процессами: метюкс, событие, сообщение WM_COPYDATA, запись в файл, создание переменной окружения. Inject Кликните здесь для просмотра всего текста
Library Кликните здесь для просмотра всего текста
Попытка внедрить DLL в iexplore.exe x32 (v.11.0.9600.17959), OS Win7 x64 получилась успешна (ie создает сразу 2 процесса, один из которых защищен от создания удаленного потока, CreateRemoteThread Error = 5). Все функции библиотеки выполнены без ограничений. Sysinternals WinObj также показал, что событие и мютекс были созданы. Переменная окружения создана. Сообщение также пришло, если соблюдается согласование уровней целостности процесса IE и принимающей стороны. Попытка создать поток в процессе Chrome.exe как и раньше - успешна. Извне песочницы никаких признаков того, что код библиотеки выполнятся, к сожалению, не установлено. Защита хорошая. Моя же проблема решена, т.к. искомый мною UMID хром создает не для процесса, а для окна, получить который не составило труда через SHGetPropertyStoreForWindow и интерфейс IPropertyStore.
0
|
12.09.2015, 16:51 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. создание удаленного пользователя на локальном пк. Создание удалённого доступа windows server 2003
Создание потока из потока. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |