Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #58, СЕНТЯБРЬ 2005 г.

Windows на страже порядка

Deeoni$

Спецвыпуск: Хакер, номер #058, стр. 058-004-8


ТИП: Листинг

PTHREAD_START_ROUTIHE pfnThreadRtn = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");

HANDLE hThread = CreateRemoteThread(hProcessRemote, NULL, 0, pfnThreadRtn, "C:\\Windows\\SuperDLL.dll", 0, NULL);

Внедрение кода в среде Windows 98 через проецируемый в память файл

Эта задача в Windows 98, по сути, тривиальна. В ней все 32-разрядные приложения делят верхние два гигабайта своих адресных пространств. Выделенный там блок памяти доступен любому приложению. С этой целью мы должны использовать проецируемые в память файлы. Сначала мы создаем проекцию файла, а потом вызываем MapViewOfFile и делаем ее видимой. Далее мы записываем нужную информацию в эту область своего адресного пространства (она одинакова во всех адресных пространствах). Чтобы все это работало, нам, вероятно, придется вручную писать машинные коды, а это затруднит перенос программы на другую процессорную платформу. Но это не очень страшно: все равно Windows 98 работает только на процессорах типа x86.

Данный метод тоже довольно труден, потому что нам нужно будет заставить поток другого процесса выполнять код в проекции файла, для чего понадобятся какие-то средства управления удаленным потоком. Здесь пригодилась бы функция CreateRemoteThread, но Windows 98 ее не поддерживает.

Сага об отладчиках

Отладчик может выполнять над отлаживаемым процессом особые операции. Когда отлаживаемый процесс загружен и его адресное пространство создано, но первичный поток еще не выполняется, система автоматически уведомляет об этом отладчик. В этот момент отладчик может внедрить в него нужный код (используя, например, WriteProcessMemory), а затем заставить его первичный поток выполнить внедренный код.

Этот метод требует манипуляций со структурой CONTEXT потока отлаживаемого процесса, а значит, код будет зависим от типа процессора, и его придется модифицировать при переносе на другую процессорную платформу. Кроме того, почти наверняка придется вручную корректировать машинный код, который должен быть выполнен отлаживаемым процессом. Нельзя забывать и о жесткой связи между отладчиком и отлаживаемой программой: как только отладчик закрывается, Windows немедленно закрывает и отлаживаемую программу. Избежать этого невозможно.

Назад на стр. 058-004-7  Содержание