Dll Injection - Что с ним возможно?

В последнее время я просматривал интернет, когда наткнулся на Dll Injection.

Я думаю, что это интересная тема, но я не знаю, что это за цель?

Я читал, что он может быть использован для взлома/взлома игр и программного обеспечения, но возможно ли это сделать с ним что-то положительное?

если да, для чего его можно использовать?

И какие языки поддерживают это?

Для записи я не собираюсь пытаться взломать любую игру с полученными знаниями, не собираюсь делать что-то незаконное!

Спасибо за время,

Emerion

ps: Сайты/книги, которые на эту тему будут оценены!

Ответы

Ответ 1

Есть несколько вариантов использования, которые приходят мне на ум:

  • Горячее исправление. Позволяет обновлять/исправлять части вашего кода без фактического завершения процесса или перезапуска. Сама Microsoft убедилась, что большие части Windows являются hot-patchable, префиксными функциями с 5-байтовым блоком NOP. Зачем? Поскольку вы можете использовать JMP для любой другой части вашего кода в 5 байтах, поэтому hot-patching в основном перезаписывает байты префикса JMP на обновленный/исправленный код и voila, ваш код делает что-то совершенно новое. Это часто используется вместе с DLL-инъекцией для загрузки нового кода в целевой процесс, и, хотя это необязательно, в нем используется

  • Ведение журнала. В том же духе код обхода часто используется для префикса функции для ведения журнала, т.е. для просмотра, с какими параметрами он вызывается. Кроме того, некоторые приложения, которые записывают экранный вывод из приложений DirectX, делают это, объединяя вызовы DirectX, что снова включает в себя инъекцию DLL в процесс, который контролирует вызовы.

  • Подклассификация: не в смысле ООП, а в смысле Windows, то есть предоставление нового WndProc для существующего окна для изменения его поведения. Хотя вы можете просто установить другую процедуру обработки сообщений с помощью SetWindowLongPtr, ограничивающим фактором является то, что функция должна находиться в адресном пространстве целевого процесса, В этом случае инъекция снова появляется - вы предоставляете новую реализацию в DLL, вставляете ее в целевой процесс и вызываете SetWindowLongPtr. Это можно использовать, например, для создания пользовательского дополнительного чертежа в чужом окне.

Мне лично приходилось иметь дело со всеми вышеперечисленными примерами использования в прошлом, в обычных бизнес-приложениях, от использования горячего исправления, чтобы обеспечить время безотказной работы в критической системе уведомлений в медицинских службах для использования обходных путей/ведения журнала, чтобы разрешить проприетарную запись (уже давно уже мертвым магазином программного обеспечения), чтобы поговорить с полномасштабным CRM-решением в режиме реального времени.

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

Ответ 2

В Microsoft Research был очень хороший проект, посвященный этому вопросу, сфокусировавшись на перехвате вызовов на функции WinAPI с помощью инъекции dll.

Это ссылка, она должна занять некоторое время: Detours

Ответ 3

В компьютерном программировании DLL-инъекция - это метод, используемый для запуска кода в адресном пространстве другого процесса, заставляя его загружать библиотеку динамической компоновки. [1] DLL-инъекция часто используется сторонними разработчиками, чтобы влиять на поведение программы так, как ее авторы не ожидали или не намеревались. Например, введенный код может захватывать вызовы системных функций или читать содержимое текстовых полей пароля, которые не могут быть выполнены обычным способом.

Источник и дополнительная информация здесь: http://en.wikipedia.org/wiki/DLL_injection Вы также можете найти хорошие ссылки на внешние источники.

Dll Injection может использоваться по уважительной причине, если у вас есть устаревшая система без исходного кода, и вам нужно изменить ее поведение. Это грязный хак, хотя и должен использоваться в качестве крайней меры, ИМО.