2013-04-29 2 views
10

Komodia говорит:Правду DLL инъекции с приложениями метро, ​​Nektra против Komodia

DLL injection is not possible with Modern UI on Windows 8,It is possible to inject DLLs into Metro apps, BUT, you will not be able to redirect Winsock traffic to localhost.

Других слова окна приложения метро работает в среду, изолированной которой инъекция DLL не может быть сделана ,

Давайте посмотрим, что Nektra говорит:

We realized we needed to sign our DLL with a cross-certificate, like those used to sign kernel-mode drivers. We already had a method for injecting a DLL in WinRT applications: copy the DLL file inside the System32 folder and voilá!

Как вы можете видеть Komodia и Nektra говорит о противоречивой информации, на мой вопрос, что это правда, за DLL инъекции под Windows 8, я могу введите мой код в приложение для метро, ​​как обычно (NT, win9x), как говорит Нектра?

+0

Вы уверены, что первая ссылка не предназначена быть истолковано как: "Вы можете сделать инъекцию DLL, но вы не можете сделать это для перенаправления трафика? – Patashu

+3

Всякий раз, когда кто-то говорит, что «невозможно», что они на самом деле означают, это нечто вроде «не должно быть возможным» или даже просто «я не знаю, как это сделать». Нектра нашел способ: поместить DLL в system32. –

+0

@Sebastian: Я спрошу вас непосредственно: когда я поместил свою DLL в систему32 и сделаю крючок к приложению метро, ​​могу ли я получить полный контроль над подключенным процессом (например: перенаправить winsock-трафик, запретить вызов «опасный» api?). Пожалуйста, сделайте нам отличный ответ, нам нужна действительно какая-то информация. –

ответ

11

Я автор статьи Нектра. Исследование началось, когда мы хотели добавить дополнительные функции к ограниченному приложению Metro Mail, которое поставляется с Windows 8.

Хотя процесс был не совсем таким же, как в настольных приложениях, поскольку обычно приложения для метро приостанавливаются, мы подключили первую службу DCOM ,

Когда служба DCOM запускает приложение Metro Mail, в этот момент мы вставляем DLL с помощью известного метода вызова CreateRemoteThread/LoadLibrary.

В начальных тестах мы пытались вставить DLL, расположенную в той же папке, где наш тест был обнаружен, и обнаружил, что если dll находилась в system32, он загружается нормально.

Позже мы проводим дальнейшие исследования, чтобы узнать, почему dll не загружалась, если не в папку system32.

О подключении winsock мы не тестировали это, но я думаю, что это должно быть возможно, потому что по крайней мере на настольных компьютерах за метро есть общеизвестные DLL (kernel32, user32 и т. Д.), И мы подключили некоторые api без проблем.

9

Я автор статьи Комодии, и наша статья не конфликтует с Nektra, можно подключить приложения Metro или песочницу, которая запускает приложения Metro, но вы не можете подключиться к localhost, а не из-за подключения, но из-за ограничения Metro на локальных соединениях. В нашем первом тесте мы использовали наш Win7 WFP (который является сетевым драйвером) и модифицировал IP-пакеты для локального хоста, которые не работали с приложениями Metro, NDIS не будет работать одинаково, единственный способ сделать это - использовать Microsoft Перенаправление прокси-сервера WFP.

Возможно, кто-то в конце концов найдет или уже нашел хак, который позволяет напрямую подключаться к локальному хосту, и, как и в случае с любыми хаками, есть риски для рассмотрения. Если вы хотите одобренный метод, перенаправление прокси-сервера WFP - единственный способ пойти.

+0

Это было очень полезно для меня и для будущих читателей, Спасибо вам обоим. –

2

В начальных тестах мы попытались вставить DLL, расположенную в той же папке, где наш тест был обнаружен, и обнаружил, что если dll находится в system32, он загружается штрафом.

Да, because System32 is in the search order для приложений Metro (Windows store). Там нет волшебства.

Аналогично, папка вашего теста, вероятно, не указана в каталоге поиска DLL для приложения (System32, график зависимости пакета приложения и т. Д.), Поэтому загрузчик не найдет вашу DLL для приложения.

+0

Вы можете изменить путь поиска с помощью LdrLoadDll, но это не влияет. –

+0

Я не знаю, что такое LdrLoadDll. Из быстрого поиска в сети это, как представляется, некоторая недокументированная деталь реализации в Windows. Я не удивлен, что тебе нехорошо. Loader был * изменен * для поддержки приложений Metro (Windows store), поэтому пути и перестановки кода различаются значительными способами. –

+0

LdrLoadDll - это API, который выполняет всю работу LoadLibrary (LoadLibrary действует как обертка). Объявление api не меняется с долгого долгого времени, хотя внутренне теперь поддерживает приложения метро. И некоторые проверки выполняются в режиме ядра, чтобы избежать некоторых хаков. –

3

Настоящим я отвечаю, потому что все остальные не в этом основании. Файл dll должен иметь разрешение на чтение/выполнение для «Все пакеты приложений». При этом загрузчик позволит вам загружать произвольные DLL в приложениях Immersive (= metro apps).

miracle

+0

Я думаю, на это уже ответил @Mauro, поместив dll в папку system32, эквивалентно разрешение r & x. –

+0

r & x разрешение на «все пакеты приложений», ровно – Laie

+0

Обратите внимание, что для некоторых приложений разрешения «R & X» также требуются для «All Restricted Application Packages» (S-1-15-2-2) –

Смежные вопросы