Инъекция Dll - Что возможно с этим? - PullRequest
17 голосов
/ 29 сентября 2010

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

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

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

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

и на каких языкахПоддержите это?

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

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

Emerion

ps: Веб-сайты / книги, посвященные этой теме, были бы признательны!

Ответы [ 3 ]

20 голосов
/ 29 сентября 2010

Мне приходит в голову несколько вариантов использования:

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

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

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

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

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

5 голосов
/ 29 сентября 2010

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

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

3 голосов
/ 29 сентября 2010

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

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

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

...