Называется "Песочница" (Sandbox).
Цитата:
Есть возможность запустить exe из другой программы и полностью управлять его импортами, в том числе импортами библиотек, которые он подгружает. Подменяем вызов CreateFile на что-то, возвращающее "INVALID_HANDLE", и радуемся.
|
Это для простых программ. Ничто не мешает программе руками загрузить kernel32 или сразу ntdll, предварительно его дропнув из своих ресурсов (сразу в память). Можно даже заменить в коде слово CreateFile на HelloWorld и импортировать по нему. Или получать адрес функции вручную не по имени, а по сигнатуре. Короче, вариантов море, и при применении любого из них уже никакой сторонний наблюдатель не сможет отследить, что происходит обращение к файлу.
Так что сие решается только двумя путями.
Первое - драйвер, который, насколько я знаю, при желании может определить, кто его вызвал, после чего разрешить/запретить доступ. В крайнем случае драйвер может пропатчить syscall-таблицу, но при отсутствии должных знаний так можно добиться только BSOD'а (а также нарваться на PatchGuard в новых вендах). Любой нормальный антивирус будет очень ругаться.
Второе - эмулятор. Самопальная виртуальная машина с вендой, со своим почти пустым виртуальным диском и так далее. 100% рабочий метод. Но написать эмулятор - занятие не на 2 вечера. Проще всего использовать какой-нибудь qemu.