В этой статье я попробую описать метод исследования программ, которые я бы
назвал "нежным" в отличие от "жестких" методов, описанных
ранее и включающих изменение используемых программой модулей.
Вы, конечно, увидели простой
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. Коллеги! Давайте уважать друг друга и не мучить "братьев наших
меньших"...
Языки программирования: разное
|