On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

Перехват вызовов Win32 API фукнций под Windows 95/98/NT

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




Вы, конечно, увидели простой MessageBox (нажмите на Cancel). Теперь закроем NOTEPAD, пойдем в поддиректорию "GentleHack_9x\Release" и запустим там "samp1.exe". Должен снова запуститься NOTEPAD. Наберем, снова, несколько символов в NOTEPAD и опять Alt-F4.


"... It's a kind of magic..."


Теперь, собственно, разберемся, что же случилось? А случилось вот что: только что вызов функции MessageBoxW() был перехвачен программой samp1.exe и выдает что-то странное. Как это произошло? Все довольно просто. Обратите внимание на поддиректорию "GentleHack_9x\Release". Там находяться следующие файлы:

  • samp1_inj.dll
  • syringe.dll
  • samp1.exe
Что это?
  • samp1.exe - это некая программа, которая инициализирует процессe "заражения"
  • samp1_inj.dll - это, собственно, "зараза", некий код, который встраивается в NOTEPAD.EXE (или еще что-нибудь)
  • syringe.dll - это шприц, которым вся эта "зараза" будет впрыснута в NOTEPAD.EXE.
А как это происходит?

Посмотрим в samp1\samp1.cpp. samp1 запускает NOTEPAD.EXE с флагом CREATE_SUSPENDED, а затем делает:
    ...
    !InjectModule(
    	ProcessInformation.hProcess, ProcessInformation.hThread, 
    	szDllToInject, "HackMessageBox", 
    	NULL, 0, (void**)&uResult, INFINITE
    ) /*!InjectModule*/
    ...
Собственно, это и есть АКТ, после которого NOTEPAD.EXE подхватывает "заразу". Эта фукнция определена в syringe.dll и позволяет в любой процесс впрыснуть некую DLL и запустить в этой DLL некую функцию (в данном случае DLL - это samp1_inj.dll, а функция - "HackMessageBox").
Посмотрим samp1_inj\samp1_ing.cpp. "HackedMessageBoxA" и "HackedMessageBoxW", это то, во что превращается MessageBox. Обратите внимание на структуру TInjectInfo, в ней содержатся необходимые описатели и могут быть переданы параметры (смотрите "GentleHack_9x\syringe\syringe.h").


  • Данный пример перехватывает только вызовы к DLL, которые уже загружены программой к моменту запуска. Но кто мешает перехватить CreateProcess и/или LoadLibrary и заражать позднее загружаемые DLL?
  • Данный пример не любит компиляций samp1.exe и samp1_inj.exe с BoundsChecker'ом. Ну это ясно почему.
  • Модификация данного примера для "заражения" уже загруженой программы (для Windows NT) -
  • Данный пример позволяет изменить поведение для некой конкретной программы и на некое определенное время. В следующей статье я опишу syringe.dll и приведу ее исходный текст.
  • Дополнительные примеры Вы найдете на OK Thinking Software Web Page или на OK Thinking Software Web Page (mirror)


P.S. Эти материалы публикуются ТОЛЬКО в целях обучения. Автор не несет никакой ответственности за любой ущерб, нанесенный в результате использования информации и/или инструментов, представленных здесь.

P.P.S. Коллеги! Давайте уважать друг друга и не мучить "братьев наших меньших"...



Языки программирования: разное