Dll injection windows 10

Защиту от рансомвари Windows 10 можно обойти с помощью инъекции DLL

Xakep #263. Кредитки в опасности

Разработчики Microsoft обеспечили последнюю версию Windows защитой от троянов-вымогателей, этот механизм называется Controlled Folder Access. Он должен предотвращать изменение файлов неизвестными программами в защищенных папках. На конференции по безопасности DerbyCon исследователь показал, как рансомварь может использовать DLL-инъекцию, чтобы обойти защиту Windows 10.

Controlled Folder Access позволяет защитить некоторые папки и файлы в них, а также добавить указанные приложения в доверенный список, чтобы только они могли изменять файлы в этих папках. Можно не добавлять приложения в доверенный список самому, а использовать список по умолчанию.

Уязвимость нашел Соя Аояма (Soya Aoyama), исследователь безопасности из Fujitsu System Integration Laboratories. Зная, что explorer.exe находится в доверенном списке, он нашел способ внедрить вредоносную DLL в «Проводник» при запуске.

Аояма также поэкспериментировал с Windows Defender и антивирусами. Оказалось, что эта схема остается незамеченной Windows Defender, Avast, ESET, Malwarebytes Premium и McAfee, а ведь у каждого из них есть защита от рансомвари.

Ниже — видео с демонстрацией уязвимости и рассказом Аоямы.

Аояма упоминает, что прежде чем готовить презентацию, он честно отправил информацию об уязвимости в центр безопасности Microsoft, однако сотрудники Microsoft не согласны, что за эту находку полагается награда или что этот баг требует патча. Они объяснили, что, чтобы произвести описанные действия, у злоумышленника уже должен быть доступ к компьютеру жертвы.

Кроме того, таким образом нельзя затронуть других пользователей, только того, к чьей машине доступ уже получен другими способами. Также не происходит превышение прав доступа: тот, кто эксплуатирует эту уязвимость, уже пользуется тем же уровнем прав, что и цель атаки. Однако вкупе с другими уязвимостями эта особенность потенциально может стать интересной для исследователей безопасности (и не только).

Больше подробностей про эксплуатацию можно найти в блоге BleepingComputer.

DLL Injector

DLL Injector – специальная программа для внедрения модифицированных DLL-файлов в какой-либо запущенный процесс. Чаще всего функционалом подобного софта пользуются геймеры, которые хотят взломать геймплей в каком-то онлайн-проекте. Если у программы получается обойти защиту игры, то пользователь добивается результата. Например, таким способом внедряются читы для CS: GO и подобных игр. Процедура выполняется всего за несколько кликов. Чтобы скачать DLL Injector с нашего сайта, пролистайте страницу до самого конца и кликните по кнопке для загрузки.

Спешим предупредить вас, чтобы данный способ не гарантирует вам 100-процентный успех внедрения взломанных DLL в игровой процесс. Более того, вы используете DLL Injector исключительно на свой страх и риск, поскольку система защиты онлайн-игры может легко выявить взломщика, а затем вас заблокирует администрация проекта.

Возможности

Программа DLL Injector отличается крайне простым функционалом и интерфейсом. Приложение имеет лишь одну основную функцию – это внедрение библиотеки в запущенный процесс игры или программы. Для этого софт предоставляет следующие возможности:

  • ручной выбор папки, где находятся взломанные DLL-файлы;
  • автоматическое определение всех процессов, которые подходят для деятельности программы;
  • установка библиотеки в процесс запущенной игры.

Данная программа может не сработать с некоторыми играми, а также не гарантируется эффективность в тех проектах, которые взламывались ранее. Разработчики постоянно совершенствуют защиту игр, поэтому взломщики не всегда успешно справляются со своей задачей. Если DLL Injector не помог, то попробуйте еще ряд утилит с похожим назначением.

Читайте также:  Служба windows search по русски

Плюсы и минусы

Перейдем к положительным и отрицательным сторонам приложения, без которых не обходится любой софт.

  • простое управление;
  • автоматический поиск подходящих процессов;
  • при успешной установке игрок получает превосходство в геймплее.
  • только английский язык интерфейса;
  • отсутствуют дополнительные функции;
  • высокий риск быть заблокированным в игре навсегда.

Как пользоваться

Рассмотрим действия, которые вам придется выполнить для применения сторонних библиотек к какой-либо игре. Алгоритм никак не меняется в зависимости от игры или конкретных DLL, поэтому рассмотрим общий порядок действий:

  1. Запустите программу и подождите, пока в таблице появятся все подходящие процессы.
  2. С помощью верхней строки укажите местоположение папки с библиотеками, которые нужно установить.
  3. Теперь выберите нужный процесс из таблицы, выделив его кликом мышки. Затем нажмите кнопку

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

Помните, что в ходе взлома игра должна быть запущена, поскольку DLL Injector должен иметь доступ к процессу.

Видео

Процесс работы с данной утилитой подробнее разбирается в представленном видеоролике.

Ключ активации и загрузка

Бесплатную программу вы можете загрузить с помощью кнопки, которая расположена после обзора.

Особенности внедрения DLL и установки хуков в Modern-приложениях Windows 8/10

Для чего вообще нужно внедрять свои DLL-ки в чужие процессы и устанавливать там хуки? Для того, чтобы понять какие функции будет вызывать это приложение, с какими параметрами и что эти функции вернут. Таким образом мы можем понять внутреннюю логику работы этого приложения, узнать к каким файлам оно пытается получить доступ, какие данные пересылает по сети, мы можем добавить в него логирование, профилирование, отладить баг, получить из приложения некоторые данные или наоборот — добавить в его интерфейс что-нибудь нужное нам. Хуки использует известная утилита Spy++ для работы с окнами приложений, DirectX-отладчики вроде RenderDoc, некоторые утилиты от SysInternals, программы типа ApiMonitor и т.д.

Некоторое время назад я писал вводные статьи об использовании хуков на примерах библиотек Microsoft Detours и madCodeHook (если вы совсем не знакомы с хуками — это то, с чего можно начать). Описанных там техник достаточно для работы с обычными приложениями, но время не стоит на месте и вот сегодня у нас уже есть Metro Modern-приложения, входящие в комплект Windows 8 и Windows 10, а также распространяющиеся через Microsoft Store программы сторонних производителей. К примеру, новый браузер Spartan — это Modern-приложение. Внедрение DLL в эти процессы имеет свои особенности и на первый взгляд может даже показаться невозможным, но это не так. В этой статье я расскажу, как мы можем залезть внутрь Modern-приложения и установить в нём хуки в своих коварных целях.

32-битные и 64-битные приложения
Операционная система Windows бывает 32-разрядная и 64-разрядная. Соответственно, Modern-приложения тоже могут быть 32-битные либо 64-битные. При загрузке приложения в магазин Microsoft разработчик собирает обе версии (плюс еще, возможно, ARM), а Windows уже сам решает, какую загрузить пользователю. Отсюда следует очевидный вывод, что DLL-ка, которую мы будем внедрять в Modern-приложение, тоже должна быть в двух вариантах. Менее очевидный вывод в том, что приложение, которое будет «забрасывать» нашу DLL-ку в чужой процесс, тоже должно быть соответствующей битности. Нам ведь нужно запустить внутри чужого процесса поток, который загрузит нашу библиотеку и вызовет из неё какую-то функцию. Делается это через вызов CreateRemoteThread(Ex), а вот уже она требует одинаковой битности вызывающего и вызываемого процессов (а иначе как передавать адреса?).

Читайте также:  Gears 5 не запускается windows 10

Т.е. в итоге наш комплект будет состоять из двух «внедряемых» библиотек и двух «инжекторов»:

  • InjectedLibrary32.dll
  • InjectedLibrary64.dll
  • Injector32.exe
  • Injector64.exe

Доступ к внедряемой DLL
Как вы, возможно, знаете, Modern-приложения живут в своих песочницах, откуда они имеют доступ только к своей папке и некоторым другим доступным для них (ограниченным) ресурсам ОС. К примеру, Modern-приложение не может вот просто так взять и открыть любой файл с диска. Для нас это означает то, что попытавшись заставить чужое приложение подгрузить нашу библиотеку в своё адресное пространство — мы получим ошибку доступа. Это можно легко увидеть, воспользовавшись, к примеру, утилитой ProcMon.

Что же делать? Разрешить доступ к файлу внедряемой библиотеки для Modern-приложений. Для этого есть системная утилита icacls. Вот эта команда открывает доступ к файлу на диске для всех Modern-приложений:

Теперь ошибки доступа у нас не будет.

Линковка DLL-ки
Но не всё так просто. DLL-ка может иметь зависимости. И даже если вам кажется, что их нет — возможно, вы забываете о зависимости от VC++ Runtime Library. По умолчанию созданная в Visual Studio С++ библиотека предполагает динамическую линковку с рантайм-библиотекой С++. Это означает, что когда какое-то приложение захочет загрузить вашу библиотеку — функция LoadLibrary() первым делом увидит, что вам необходима, к примеру, библиотека msvcp90r.dll и попытается её найти, что вобщем-то, получится если речь идёт об обычном (не Modern) приложении и наличии соответствующего VC++ Redistribution Package. Что касается Modern-приложений, то порядок поиска DLL-ок совсем другой. Если коротко: будучи вызванной из Modern-приложения, LoadLibrary() не найдёт библиотеки VC++ Redistribution Package, даже если они до этого были успешно установлены.

Это немного неожиданно и слегка удивляет. Варианты выхода из ситуации:

  • Копировать VC++ Runtime Library в папку Modern-приложения
  • Копировать VC++ Runtime Library в %SystemRoot%\system32
  • Прописать библиотеки в специальный раздел в реестре (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs)
  • Использовать статическую линковку (когда код VC++ Runtime Library включается в тело нашей DLL-ки)

Первые два способа крайне некрасивы (а без аккаунта администратора и невозможны), третий — сработает, но влияет на глобальную конфигурацию ОС, что тоже может быть чревато последствиями. Так что самый простой вариант — статическая линковка (ключи /MTd и /MT на вкладке Code Generation).

Цифровая подпись
Решив все вопросы с доступом к файлу DLL-ки может показаться, что у нас всё получилось — ProcMon не показывает никаких ошибок доступа. Но инъекция всё равно не работает — DLL-ка не появляется в списке загруженных модулей процесса. Что же пошло не так? На этот вопрос нам даёт ответ просмотр Windows Event Viewer.

Операционная система не хочет загружать нашу DLL-ку, поскольку она не подписана. В этом месте мне стало тревожно, поскольку я уж было подумал, что все модули, загружаемые в Modern-приложение, должны быть подписаны цифровой подписью одного издателя (разработчика). Но, к счастью, это не так. Windows требует от DLL-ки просто наличия валидной цифровой подписи, но не требует её соответствия подписи автора приложения. Т.е. мы можем взять подписанную DLL-ку от Хрома и забросить её в Spartan. Что же делать нам? Получить сертификат и подписывать нашу DLL-ку.

Да, это серьёзно усложняет работу. Но ведь в принципе, если мы разрабатываем нормальный продукт, а не какие-нибудь вирусы\трояны\малвари\кейлоггеры\локеры — у нас не будет проблем с получением сертификата и его использованием для подписи DLL-ки. Вообще, я считаю эту защиту одной из самых серьёзных шагов Microsoft по защите пользовательских данных и изоляции Modern-приложений в песочнице. Фактически от желающего пробросить мостик к приложению требуют предъявить документы и идентифицироваться, а это остановит 99% скрипт-киддисов.

Читайте также:  Читалка ebook для windows

Права доступа на канал связи
Ок, теперь наша DLL-ка внедрена в чужой процесс, она может вешать хуки на разные системные функции, делать что-то полезное, но… Сама она живёт в той же песочнице, что и родительский процесс, то есть ни передать данные «наружу», ни получать команды «извне» она не может, ведь для этого нужно создать канал связи, на который она по умолчанию не имеет прав. Как решать эту задачу я уже отдельно рассказывал вот в этой статье, а здесь просто упоминаю в качестве пункта, о котором важно не забыть.

Как исправить ошибки DLL файлов в Windows 10, 8 или 7

Читайте, как восстановить сбойные DLL библиотеки в Windows 10, 8 или 7 . Какие причины повреждения, удаления или ошибок DLL файлов. Сами по себе DLL файлы не являются исполняемыми файлами, но они используются в работе другими программами. Часто несколько программ или драйверов могут использовать DLL файл совместно, поэтому удаление или обновление одной программы может вывести из строя другие.

Если вы получаете сообщения: «DLL файл не найден или отсутствует» , «не удалось зарегистрировать DLL библиотеку» , «отсутствует необходимый компонент» или «необходима повторная установка приложения» , то наша инструкция будет полезна для вас. Такие сообщения могут возникать во время запуска любого приложения или игры, во время установки, обновления или старта системы Windows 10, 8 или 7.

Для выявления причины ошибки и получения рекомендаций по её устранению можно использовать Журнал событий системы. Особенно полезно это будет если ошибка блокирует загрузку системы или вызывает синий экран смерти (BSOD) .

Если вы не можете запустить систему из-за ошибки в обычном режиме, используйте загрузку в безопасном режиме .

Возможные причины повреждения, удаления или ошибок DLL файлов

  • Непреднамеренное удаление DLL файлов по ошибке.
  • Перезапись системных DLL файлов устаревшими версиями.
  • Заражение вирусами или вредоносным ПО.
  • Повреждение жесткого диска.
  • Отсутствие или повреждение драйверов оборудования.
  • В Windows находятся несовместимые версии файлов, которые принадлежат к различным приложениям.
  • Отсутствие необходимых компонентов Windows: DirectX, C++ Runtime Library, .NET Framework.
  • Автоматические обновления Windows и драйверов системы.
  • Использование устаревших или не правильных драйверов.
  • Повреждение или удаление критически важных веток реестра.

Способы восстановления DLL файлов в Windows 10

  • Если Windows перестала загружаться, или были повреждены или удалены системные файлы, вы можете воспользоваться инструментами среды восстановления.
  • Так же в Windows 10, 8 или 7 присутствует инструмент для автоматического восстановления системных файлов или библиотек из командной строки.
  • Ошибки, связанные c отсутствием необходимых библиотек DirectX или C++ Runtime Library являются наиболее часто встречаемыми проблемами в Windows.

Вам необходимо установить совместимую версию DirectX, если игра вылетает с ошибкой: “Запуск программы не возможен, так как на компьютере отсутствует файл DLL. Попробуйте переустановить программу” , или в тексте ошибки указаны следующие библитеки: d3dx9_43.dll, xinput1_3.dll, d3dx9_31.dll, d3dx9_34.dll, xinput1_2.dll, d3d11.dll, d3dx9_35.dll, dxgi.dll, d3dx9_25.dll, d3d11.dll, d3dx9.dll, d3dx9_43.dll, d3dx10_43.dll, d3dx9_26.dll, d3dx9_30.dll, d3dx9_27.dll, d3dx11_43.dll, d3dcompiler_43.dll, d3d10.dll, xinput1_3.dll, d3dx9_31.dll, xinput1_2.dll, d3dx9_31.dll, d3dx9_34.dll, d3dx9_42.dll, x3daudio1_7.dll, x3daudio1_6.dll, xrsound.dll . Для этого необходимо воспользоваться Web инсталлятором DirectX от Microsoft .
Установите необходимую версию C++ Runtime Library, если в тексте ошибки указаны библитеки содержащие слова MSVCR или RUNTIME: MSVCR120.dll, MSVCP120.dll, MSVCR110.dll, MSVCP110.dll, MSVCR100.dll, MSVCP100.dll, MSVCR90.dll, MSVCP90.dll, MSVCR80.dll, MSVCP80.dll, VCRUNTIME140.dll, runtime-x64.dll, runtime-x32.dll, runtime.dll, runtime-110.dll и т.д.
Найдите в системных требованиях к программе какая версия библиотек C++ Runtime Dll необходима для работы и установите нужную:

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

Оцените статью