Операция "Перехват" A.M.D.F. (grunge@amdf.pp.ru) Хакер, номер #070, стр. 070-082-4 Процедура ReplaceIATEntryInOneMod Эта процедура, заменяющая ссылки на функцию в таблице импорта процесса, была взята из книги Рихтера. Чтобы она заработала, мне потребовалось немного изменить код. Страница памяти может иметь тип защиты PAGE_READONLY. В книге говорится, что WriteProcessMemory сама модифицирует атрибуты защиты страницы, куда происходит запись. Однако на самом деле это не так. Поэтому перед выполнением WriteProcessMemory пришлось добавить еще и вызов VirtualProtect с параметром PAGE_READWRITE, чтобы случайно не вызвать ошибку access violation. После записи в память снова вызывается VirtualProtect и восстанавливается исходный тип защиты. В коде процедуры используются функции, находящиеся в imagehlp.dll, а значит перед использованием надо подключить к проекту файлы imagehlp.h и imagehlp.lib. Сам код процедуры ты найдешь на нашем диске. Создание удаленных потоков Для загрузки библиотеки в адресное пространство процесса я использовал функцию CreateRemoteThread. Это лишь одно из ее возможных применений. Функция дает возможность управлять чужим процессом. Изначально она была рассчитана на применение в отладчиках и других инструментальных средствах. Но ничто не мешает использовать ее в обычном приложении. Параметры идентичны CreateThread, за исключением hProcess, через который передается хендл нужного процесса. Параметр lpStartAddr определяет адрес функции потока. Он, разумеется, должен располагаться в адресном пространстве чужого процесса. Книга Джеффри Рихтера Написание этой статьи было бы невозможно без замечательной книги Джеффри Рихтера "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows". Эта книга посвящена программированию серьезных приложений на Microsoft Visual С++ в операционных системах Windows 2000 (32- и 64-разрядных версий) и Windows 98 с использованием функций Windows API. Эту книгу можно легко найти в магазинах, но если тебе не понравится ее цена, ищи ее электронную версию на просторах Сети. Книгу стоит скачивать только в целях ознакомления, так как оцифрованная версия содержит не все примеры программ, которые должны идти на диске вместе с бумажным изданием, а также изобилует орфографическими ошибками (результат сканирования). Ошибки в исходниках могут очень затруднить их понимание. В книге ты найдешь еще несколько способов внедрения кода в удаленный процесс и подробнее ознакомишься со многими затронутыми в статье темами (процессы, потоки, управление виртуальной памятью, поддержка DLL и Unicode). WARNING Помни, эксперименты по модификации работы чужих программ обычно являются незаконными и нарушают авторские права. INFO За более подробной информацией советую обратиться к книге Джеффри Рихтера, которую можно найти как в магазинах, так и в оцифрованном виде в Сети. |