Истина, связанная с внедрением DLL с приложениями метро, ​​Nektra vs Komodia

Komodia говорит:

Встраивание DLL невозможно с помощью современного пользовательского интерфейса в Windows 8, это можно вставлять библиотеки DLL в приложения Metro, НО, вы не сможете перенаправить трафик Winsock на localhost.

Другими словами, приложение windows metro, работающее в изолированной среде, в которую невозможно выполнить DLL-инъекцию.

Посмотрим, что Nektra говорит:

Мы поняли, что нам нужно подписать нашу DLL с помощью кросс-сертификата, например те, которые используются для подписывания драйверов режима ядра. У нас уже был метод для инъекции DLL в приложениях WinRT: скопируйте DLL файл внутри папки System32 и voilá!

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

miracle

Ответ 4

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

Да, потому что System32 находится в порядке поиска для приложений Metro (Windows store). Там нет волшебства.

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