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 немедленно закрывает и отлаживаемую программу. Избежать этого невозможно. |