Windows на страже порядка Deeoni$ Спецвыпуск: Хакер, номер #058, стр. 058-004-7 Теперь, когда вызывается обработанная API-функция, переход в ее начале передает управление заранее заготовленному коду. После этого можно восстановить оригинальные байты и API будет работать нормально. Недостаток данного метода в том, что, если после восстановления начала функции произошло переключение контекста на другой поток приложения, он сможет вызвать функцию минуя перехватчик. Чтобы не попасть на такие неприятности, перед установкой API-перехвата необходимо останавливать все побочные потоки, иначе процесс записи может быть прерван и функция вызовется другим потоком, что приведет к ошибке доступа к памяти и аварийному завершению приложения. Этот эффект проявляется не всегда, но может стать причиной нестабильной работы системы, поэтому не следует пренебрегать этим моментом. Это конец? К сожалению, объем статьи, как всегда, недостаточен, чтобы вместить в него все, что хочется :), поэтому остается только одно – исполнить свое обещание, данное в начале статьи, и подсказать, как получить доступ к функциям ядра. API-функции представляют собой не что иное, как функции в системных DLL. Любой процесс в системе обязательно имеет в своем адресном пространстве Ntdll.dll, где располагаются функции Native API - базовые функции низкоуровневой работы с системой, функции Kernel32.dll являются переходниками к более мощным функциям Ntdll, следовательно, целесообразно будет перехватывать именно Native API. Проблема в том, что Native API-функции не документированы в SDK, но узнать модель их вызова можно дизассемблированием Kernel32.dll. К сожалению, нельзя утверждать, что адреса функций в системных библиотеках не изменяются в зависимости от версии ОС, ее сборки или даже конкретной ситуации. Что же может быть? А зачем все это нужно? Обычному пользователю такие тонкости, конечно, ни к чему, но людям, программирующим в Windows, это должно быть небезынтересно. Первым делом перехват API и внедрение кода может широко использоваться в троянских программах. Например, можно создать невидимый процесс, скрыть какие-либо файлы на диске, скрыть записи в реестре и скрыть сетевые соединения. Можно легко обходить персональные файрволы и уничтожать антивирусы. Можно легко скрыть присутствие трояна в системе так, что даже тщательная проверка компьютера не даст ничего (правда, перехват сам по себе можно обнаружить ;) – прим. Лозовского). Можно легко получить пароли на вход в систему. Можно на этой основе снимать trial-ограничения серийно, с многих программ, использующих стандартные способы защиты (их подавляющее большинство). Можно делать с системой что угодно - эта технология открывает все двери. Но, как и у любой медали, у этих способов есть обратная сторона. На основе этой технологии можно создать системы безопасности, различные эмуляторы и т.д. А новый (относительно :)) продукт от Microsoft, Microsoft Windows AntiSpyware, с удовольствием пресекает деятельность на основе большинства перечисленных методов. |