Истина, связанная с внедрением 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 для приложения.