Компьютер, железо, софт…

Что такое компьютер? Как с ним работать? Как его настраивать? И многое другое…

Способы инжекта кода в Windows 7/8

Итак, что остается в арсенале малварщика на сегодняшний день? На самом деле ничего принципиально нового в способах инжекта кода в Windows 7/8 нет — все те же самые LoadLibrary, CreateRemoteThread, WriteProcessMemory, RtlCreateUserThread. Методы остались все те же, изменились условия их использования — появились палки в колесах: «защищенные процессы», контроль за сессиями и тому подобное. Самый верный способ — вызов замечательной функции NtCreateThreadEx (справедливости ради надо отметить, что RtlCreateUserThread всего лишь обертка под NtCreateThreadEx). API-функция NtCreateThread оставлена в Vista лишь для совместимости с предыдущими системами. Вызов самой функции не представляет труда: Status = NtCreateThreadEx (& newThreadHandle, GENERIC_ALL, 0, procHandle, (LPTHREAD_START_ROUTINE) startAddress, param, crFlags, 0,0,0, & attrList) где attrList — указатель на структуру PROC_THREAD_ATTRIBUTE_LIST, включающую в себя другую структуру PROC_THREAD_ATTRIBUTE_ENTRY, их описание легко найти в интернете. Код, реализующий инжект с применением NtCreateThreadEx, ты сможешь отыскать в Сети, он без труда гуглится.

Дело в том, что иногда напрямую вызывать функции запуска процесса/потока для старта своего кода необязательно, если вспомнить о системных документированных и, самое главное (!), недокументированных возможностях, связанных с подгрузкой системных DLL в адресное пространство какого-то процесса. Например, из известных документированных можно упомянуть APPInit-dlls(goo.gl/StTMX), когда прописанные в реестре DLL’ки автоматом подгружаются в стартующие процессы.

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

На самом деле есть еще немало неизвестных и недокументированных возможностей подгружать DLL в процесс. Например, технологии Application Verifier, Shim и Hotpatch. Технология Application Verifier (tinyurl.com/ofnw7xb) загружает DLL до загрузки kernel32.dll (kernelbase.exe) со значениями полей:

  • GlobalFlag=0×02000100
  • VerifierDebug=0xffffffff
  • VerifierDlls=та_самая.dll (которая должна находиться в папке system32).

Вспоминается классная техника, реализованная в рутките TDL4, — элегантный обход UAC и инжект своей DLL, основанные на «автоподнятии» прав процесса, которые запускает explorer.exe и, соответственно, получающих привилегии заинжектить свой код в explorer.exe.

Суть инжекта — подмена cryptbase.dll на свою, которая будет автоматом подгружена explorer.exe. Правда, это будет работать, только если у пользователя есть админские права.

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

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

Поделиться в соц. сетях

Опубликовать в Google Plus
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Также рекомендую почитать:

  1. Различные способы выделения данных в Excel

Ваш отзыв