Скрытие процесса под NT/2K/XP
Скрытие процесса под NT/2K/XP
Скрытие процесса под NT/2K/XP В нашем рунете можно найти статьи по скрытию процессов, они описывают различные методики осуществления этого. Среди них есть такие как: внедрение своего кода в чужой процесс, например в часы explorer'а; использование хуков на апи функции в частности на функцию ntquerysysteminformation, которая является главной функцией программ отображающих список запущенных процессов(task manager), написание драйвера и т.д. В моем случае я решил эту задачу другим образом. Для исполнения нужного мне кода ведь совсем не обязательно использовать процессы, можно использовать dll библиотеку :) Итак, после написания dll'ки нужно ее использовать :) Тут существует много подходов, я опишу 3 из них: 1. самое простое что может быть - это выполнить: rundll32.exe dllname,functionname 2. прикрепление к winlogon.exe - интересный и продвинутый способ. Все что нужно это правильно написать dll и правильно ее прописать. В ключе "hkey_local_machinesoftwaremicrosoftwindows ntcurrentversionwinlogonnotify" создаем подключ с произвольным именем, в нем создаем значения: "asynchronous"=dword:00000001 "dllname"="путь_к_библиотеке" "logon"="имя_функции_при_logon'е" "impersonate"=dword:00000000 В dll'ке какую-нибудь функцию указываем на экспорт: exports some_func; 3. прикрепление к explorer.exe - лучший способ. Чем он лучше чем 2й, а тем что winlogon хоть и работает с привелегиями system, но он не интерактивен, то есть ftp server запустить можно, а вот получить доступ к окнам или задачам нельзя из такой dll'ки, нельзя сделать простейший messagebox. А вот explorer работая с уровнем привелегий пользователя залогиневшегося может работать с окнами и в общем интерактивен. Это лучший способ и реализуется он пропиской в реестре; в ключе "hkey_local_machinesoftwaremicrosoftwindowscurrentversionshellserviceobjectdelayload" создаем произвольное строковое значение, в котором указываем clsid, содержащий ссылку на библиотеку. То есть нужно сначала сгенерить clsid, потом создать в ключе "hkey_classes_rootclsid" создать подключ с этим сгенеренным, создать подключ в этом ключе с именем "inprocserver32" и в нем значение по-умолчанию установить путь к библиотеке. Как создать clsid? Используем функции cocreateguid, stringfromclsid. function createclassid: string; var classid: tclsid; p: pwidechar; begin cocreateguid(classid); stringfromclsid(classid, p); result := p; cotaskmemfree(p); end; Ну и пояснительный код прописывания: procedure add2reg; var reg:tregistry; clsid:string; begin reg:=tregistry.create; try reg.rootkey:=hkey_local_machine; reg.openkey('softwaremicrosoftwindowscurrentversionshellserviceobjectdelayload', true); clsid:=createclassid; reg.writestring('произвольное_значение',clsid); reg.closekey; reg.rootkey:=hkey_classes_root; reg.openkey ('clsid'+clsid+'inprocserver32', true); reg.writestring('','some_dll.dll'); reg.closekey; finally reg.free; end; end; Не любая библиотека подойдет для такого использования. При загрузке такой библиотеки она получает полностью управление и уже не отдает. Путем проб и ошибок я выяснил что при следующем смешном коде все работает: library lib1; uses forms, windows, unit1 in 'unit1.pas'; begin application.initialize; application.createform(tform1, form1); halt; application.run; end. Работа библиотеки начинается при создании, то есть обрабатываем событие oncreate. Таким образом в заключении хотел бы сказать что поток конечно заметим и левую библиотеку заметим, а процессов конечно не будет новых. Источник: http://www.verf.ru/delphi/