Вставка кода в чужой процесс
запись в него. Как внедрить этот код в системный
процесс(пусть даже explorer)? Нужно, чтобы одаренные дети не
убивали его например через ProcessKiller или ДиспечерЗадач.
P.S. А будет ли это все работать под Windows 9x, в школе?
Я думаю, система тебе этого не даст. Если только сильно попросишь :)
Антивири ругаться будут
P.S. Не вирус пишешь? :)
Писать в чужой процесс...
Я думаю, система тебе этого не даст. Если только сильно попросишь :)
У меня есть исходники на Делфи и рабочий код, который имеет
notepad во всех позах. Дело в том, что я Делфи не секу,
только С++ и Бейсик(бейсик для дос:)).
Не вири. Система тестирования учащихся - проект на екзамен.
По окончании тестирования создается отчет на рабочем столе,
который нельзя удалить до перезагрузки.
notepad во всех позах
И даже в списке процессов не показывается?
Chuvak, а зачем такие сложности нужны? Зачем блокировать файл? Кроме того, не помню как в 9x (давно это было), а в XP можно грохнуть любой процесс, если удастся получить его хендл.
Для начала попробуй грохнуть Кашпировского.
2 Chuvak
Внедрить код можно, поместив его в Dll и создав удалённый поток с помощью CreateRemoteThread().
Вкратце:
Выделяем интересующий нас код в функцию DllMain() библиотеки, в обработчике DLL_PROCESS_ATTACH.
Далее, полагая, что в tszLibFile у нас хранится имя dll (TCHAR), в dwProcessID - идентификатор нужного процесса, пишем следующий код для внедрения библиотеки:
int nLen = (lstrlen(tszLibFile) + 1) * sizeof(TCHAR);
LPTSTR tsz = (LPTSTR) VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, tsz, tszLibFile, nLen, NULL);
#ifdef _UNICODE
#define PROC_NAME "LoadLibraryW"
#else
#define PROC_NAME "LoadLibraryA"
#endif
PTHREAD_START_ROUTINE pfnThreadProc = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT("Kernel32")), PROC_NAME);
hThread = CreateRemoteThread(hProcess, NULL, 0,
pfnThreadProc, tsz, 0, NULL);
VirtualFreeEx(hProcess, tsz, nLen, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess);
Если чего непонятно, то обращайся к Рихтеру.
Освобождаем библиотеку аналогично, только вместо "LoadLibrary" используем "FreeLibrary"
Данный код будет работать с опирационками на базе NT.
Внедрить код в процессы, запущенные от имени SYSTEM (типа svchost), не удастся.
А вообще, наверное, в такой ситуации (когда необходим запрет на завершение выполнения кода, наличие которого заранее известно пользователю) проще будет перехватывать NativeAPI функции (по крайней мере, надёжность будет выше), или воспользоваться средствами защиты Windows NT.
это только миф. Как говорили древние инки, "Смотри..."
Вот прога - прячет winlogon.exe из списка процессов. Без
исходников, зараза. И прога, которая его обнаруживает...
И даже в списке процессов не показывается?
Открыаем Диспечер Задач, Process Explorer от Русиновича и еще всё что хотим,
запускаем ProcHide, winlogon исчез. Берем в руки индийский
бубен, постукивая по системнику, обходим вокруг монитора
(монитор ставим на пол - удобнее), запускаем PHunter,
Выбираем чего-нибудь, видим winlogon.
Убиваем диспечером ProcHide.exe, в Диспечере появляется винлогон.
Мистика!!!
Антивирусы, кстати, не ругаются...
А вообще, наверное, в такой ситуации (когда необходим запрет на завершение выполнения кода, наличие которого заранее известно пользователю) проще будет перехватывать NativeAPI функции (по крайней мере, надёжность будет выше), или воспользоваться средствами защиты Windows NT.
Да ну его, этот NativeAPI, интересно, но некогда.
Средствами защиты в NT не знаю, как пользоваться.
Буду проверять версию системы - если NT, добавляем DLL;
Если нет - что-то типа RegisterServiceProcess, точно не помню.
Миф о надёжности и безопасности НеТе, 2000 и ХеРе -
это только миф. Как говорили древние инки, "Смотри..."
Вот прога - прячет winlogon.exe из списка процессов. Без
исходников, зараза. И прога, которая его обнаруживает...
Да есть у меня сорцы не ProcHide. Тот же перехват NativeAPI. И никакой мистики.
Средствами защиты в NT не знаю, как пользоваться.
Элементарно. Создаём аккаунт для пользователя с ограниченными правами. Обычные пользователи не имеют права завершать программы, запущенные от имени администратора (кроме как перезагрузиться, да и то не всегда. Всё зависит от выбранной политики безопастности)
Дело в том, что приложение должно нормально работать под
Windows 9x, где политики безопасности нет. Приходится проверять систему
и если запущен под NT - создавать удалённый поток, если под
9х - создавать сервисный процесс, благо создается он вызовом
одной API. Унификация, блин.
Внедрить код в процессы, запущенные от имени SYSTEM (типа svchost), не удастся.
И правда, не удаётся!!! Пока отладочные привилегии не
получишь... :)