как написать свой "прокси" для файлов

PooH

сейчас попробую описать задачу
есть некая программа P, которая читает данные из файла F, исходный код программы не доступен
необходимо защитить файл F от изменений и просмотра
платформа - Win
пока что думаю над неком процессе, который будет выполнять проксирование файла, а сам файл будет зашифрован каким-нибудь хорошим и быстрым алгоритмом
проксирование собираюсь исполнить через хуки на вызов ReadFile, CreateFile и т.д. программой, либо технологией "hot patchin"
прошу подсказать материалы по этой фигне (наверняка, это не настолько редкая задача)
+ какой-нибудь хороший алгоритм шифрования, чтобы можно было обращаться к произвольному куску файла без сильных задержек

PooH

так еще одна сложность
программа защищена x-trap'ом от отладки и мониторинга, пойду x-trap'у писать, чтобы сняли для меня защиту

apl13

chroot? :o

PooH

chroot?
даже если так, то программа запускается с пользовательскими правами

agaaaa

А что нельзя программу с правами отдельного пользователя запустить через runas?

SEMEN73

есть некая программа P, которая читает данные из файла F, исходный код программы не доступен
необходимо защитить файл F от изменений и просмотра
А открытие файла в программе P разве не является просмотром?
В каком окружении все это работает? Что может делать пользователь, от чего стоит защищаться? Требуется ли переносимое решение (набор файлов, включающий F, P и твою программу, такой, что его можно открыть на любой машине, но файл будет виден только в F после запуска твоей программы)?
Потому что под текущее описание подходит, например, и такой use case:
1. Есть терминал, на котором доступны F и P.
2. Терминал недостаточно анально огорожен: например, пользователь может втыкать в него флешки.
3. Нужно не дать пользователю унести с собой файл.
В этом случае, как уже сказали, проблема решается чисто административно, правильной настройкой прав доступа.
Перехват API может выполняться как-то так. Если выполнять инъекцию при создании процесса (DetourCreateProcessWithDll то "защита от отладки и мониторинга" не сработает (в отличие от "защиты от инъекций", да). Ну и совсем хардкорный вариант — это написание драйвера-фильтра.
Реализация шифрования, опять же, зависит от постановки задачи. Можно вообще xor'ить файл со случайной последовательностью той же длины, недоступной пользователю.

Werdna

есть некая программа P, которая читает данные из файла F, исходный код программы не доступен
необходимо защитить файл F от изменений и просмотра
платформа - Win
Изменений кем? Этой программой? Копировать перед запуском, восстанавливать после работы.

PooH

А что нельзя программу с правами отдельного пользователя запустить через runas?
нет
программа - игра
файл - архив с ее ресурсами
никакой возможности защитить файл нету
так что остается защищать информацию в этом файле
контролировать что-то на компьютере пользователя - невозможно
единственная доступная вещь - игра запускается через лаунчер, исходные коды, которого у меня есть
лаунчер запускается с правами админа, умеет проверять и обновлять игру и ее ресурсы
цель - защитить от школо-какеров ресурсы игры, т.к. их можно менять во время исполнения программы

PooH

Изменений кем?
пользователем, в общем случае с правами администратора

elenangel

цель - защитить от школо-какеров ресурсы игры,
купить и накатить готовую конвертную защиту?

PooH

купить и накатить готовую конвертную защиту?
это всегда можно
тем более, что сегодня решили проблему путем пинания разрабов x-trap
но у меня остался чисто академический интерес

PooH

А открытие файла в программе P разве не является просмотром?
В каком окружении все это работает? Что может делать пользователь, от чего стоит защищаться? Требуется ли переносимое решение (набор файлов, включающий F, P и твою программу, такой, что его можно открыть на любой машине, но файл будет виден только в F после запуска твоей программы)?
Потому что под текущее описание подходит, например, и такой use case:
1. Есть терминал, на котором доступны F и P.
2. Терминал недостаточно анально огорожен: например, пользователь может втыкать в него флешки.
3. Нужно не дать пользователю унести с собой файл.
В этом случае, как уже сказали, проблема решается чисто административно, правильной настройкой прав доступа.
Перехват API может выполняться как-то так. Если выполнять инъекцию при создании процесса (DetourCreateProcessWithDll то "защита от отладки и мониторинга" не сработает (в отличие от "защиты от инъекций", да). Ну и совсем хардкорный вариант — это написание драйвера-фильтра.
Реализация шифрования, опять же, зависит от постановки задачи. Можно вообще xor'ить файл со случайной последовательностью той же длины, недоступной пользователю.
спасибо, за ответ
Detours уже читаю маны
в общем случае задача выглядит так: защитить информацию в файле от просмотра, при этом оставить возможность для избранных приложений читать этот файл без проблем, настройка прав доступа, рабочая среда и т. д. контролю не поддаются
т.е. надо написать связку: зашифрованый файл + процесс, отвечающий за расшифровку информации и контроль доступа
уровень защиты - защита от школо-хакеров (т.е. писать жесткий руткит не надо)
у меня, видимо, проблемы с формулировкой задачи, если предлагают варианты с правами доступа
PS для тестов написал простенькую прогу, которая читает файл fgets'ом, залез в нее ollydbg и офигел от кол-ва прокладок между fgets и readfile

PooH

"защита от отладки и мониторинга" не сработает (в отличие от "защиты от инъекций", да). Ну и совсем хардкорный вариант — это написание драйвера-фильтра.
x-trap палит procmon, к примеру, судя по всему из-за наличия устройства и драйвера файловой системы, при этом программа просто не запускается при наличие таких устройств и драйверов

PooH

Перехват API может выполняться как-то так.
я правильно понимаю, что там "нужный вызов" WinApi просто подменяется на JMP FAR или подмена идет в таблице импорта?

yolki

посмотри ещё на cuckoomon
он пооткрытей, чем detours и 64-битную архитектуру поддерживает.
правда собирается под gcc.
мои соседние вопросы в разделе - по нему :cool:
в кукумоне по адресу начала кода апишной функции вставляется jmp far
Оставить комментарий
Имя или ник:
Комментарий: