Мой вопрос несколько уникален. В настоящее время я работаю над проектом для моего компьютерного криминалистического класса. Этот проект направлен на сокрытие данных от исследователей. Метод, которым это должно быть достигнуто, заключается в написании байтов «чистого» файла над «плохим» файлом. После перезаписывания «плохой» файл удаляется.Как ОС обрабатывает питон и подпроцессы скрипта python ...?
Эта концепция звучит достаточно просто, но интересен мой партнер и я. Если мы откроем файл в скрипте python, мы сможем легко перезаписать память, связанную с этим файлом на диске (проверено с использованием dd). Мы также можем легко удалить файл, используя внутри скрипта. Тем не менее, запись затем удаляет результаты без записи, фактически происходящей, только удаление файла.
Это имеет смысл с точки зрения оптимизации ОС. С этого момента мы думали, что это может сработать, если мы разделим запись и удалим на два отдельных скрипта и контролируем их на треть. Однако, похоже, что даже если мы запускаем скрипты в качестве подпроцесса другого скрипта, происходит то же самое. Мы попытались использовать сценарии bash для процесса удаления вместо чистого python, и все же ничего не зацепило.
Этот проект должен был быть полным беспорядком небольших средств защиты от криминалистики, подобных этому, но этот конкретный охватил все наше внимание из-за этой проблемы. Кто-нибудь есть идея, почему это происходит и что мы можем сделать, чтобы двигаться вперед?
Мы знаем, что это может быть достигнуто в C и т. Д., Но мы хотим решить это с помощью python из-за интересных ограничений, которые он представляет.
--- EDIT --- Это фрагмент нашего контроллера, он вызывает «ghost.py» с соответствующими параметрами.
ghost.py печатает отредактированные имена файлов/пути к стандарту.
Соответствующий код следующим образом:
proc = subprocess.Popen(['python', 'ghost.py', '-c', 'good.txt', '-d','/mnt/evil.txt'], stdout=subprocess.PIPE,)
files = proc.communicate()
for i in files:
if i != None and i != "\n":
os.system("./del.sh " + i)
попробовать 'file_handle.flush()' после записи или просто 'file_handle.close()', который должен также очистить файл на диске –
сейчас мы используем 'f.close()' не повезло. Но я уйду, чтобы дать флеш-дро. – stackunderflow
Как вы запускаете детей из родителя? (В частности, вы наследуете файловые дескрипторы, как и в случае с 'os.system', и по умолчанию это« подпроцесс »в Python 2.7 и 3.1, но не в 3.2+, вы создаете новый сеанс и т. Д.)? Это может повлиять на возможность оптимизации ОС ... – abarnert