2015-04-30 3 views
2

Мой вопрос несколько уникален. В настоящее время я работаю над проектом для моего компьютерного криминалистического класса. Этот проект направлен на сокрытие данных от исследователей. Метод, которым это должно быть достигнуто, заключается в написании байтов «чистого» файла над «плохим» файлом. После перезаписывания «плохой» файл удаляется.Как ОС обрабатывает питон и подпроцессы скрипта 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) 
+3

попробовать 'file_handle.flush()' после записи или просто 'file_handle.close()', который должен также очистить файл на диске –

+0

сейчас мы используем 'f.close()' не повезло. Но я уйду, чтобы дать флеш-дро. – stackunderflow

+0

Как вы запускаете детей из родителя? (В частности, вы наследуете файловые дескрипторы, как и в случае с 'os.system', и по умолчанию это« подпроцесс »в Python 2.7 и 3.1, но не в 3.2+, вы создаете новый сеанс и т. Д.)? Это может повлиять на возможность оптимизации ОС ... – abarnert

ответ

1

Использование подпроцесс не изменяет интересный аспект дизайна, поэтому не используйте их. Вам, вероятно, понадобится os.fsync(). Попробуйте эту модель:

myfile.write('all of my good data') 
myfile.flush() 
os.fsync(myfile.fileno()) 
myfile.close() 
os.remove(myfile) 

Ссылка: https://docs.python.org/2/library/os.html#os.fsync

Смежные вопросы