BlankTar

about | blog | works | photo

今日のほこxたて見ててさ、びっくししたよ。
たとえ世界最強のハッカーと言えども、やっぱり防ぐ手段はあるんだね。
それは驚きのファイル名を変えちゃうという手法。
いやー、すごい。その発想はなかった。

という訳で、それを自動化するソフトを作ったよ。
1分置きぐらいにファイル名を変えちゃえば最強だね! やったね!
import sys
import os
import time
import random
import string

LETTERS = string.letters + string.digits

def GetDirs(name):
	ret = []
	for path, dnames, fnames in os.walk(name):
		ret += [os.path.join(path, d) for d in dnames]
	return ret

def GetFiles(name):
	ret = []
	if os.path.isdir(name):
		for path, dnames, fnames in os.walk(name):
			ret += [os.path.join(path, f) for f in fnames]
	elif os.path.isfile(name):
		ret.append(name)
	else:
		raise IOError('No such file or directory')
	return ret

def RandomString(length=32):
	return ''.join([random.choice(LETTERS) for i in range(length)])

def AutoRename(name):
	path = os.path.split(name)[0]
	ext = os.path.splitext(name)[1]
	print name, '->', os.path.join(path, RandomString() + ext)
	os.rename(name, os.path.join(path, RandomString() + ext))

if __name__ == '__main__':
	if len(sys.argv) <= 1:
		print>>sys.stderr, '{0} [file | directory] (interval)'.format(sys.argv[0])
		sys.exit(-1)

	try:
		interval = int(sys.argv[2])
	except (IndexError, ValueError):
		interval = 0

	while True:
		if os.path.isdir(sys.argv[1]):
			for dir in GetDirs(sys.argv[1]):
				AutoRename(dir)
		for fname in GetFiles(sys.argv[1]):
			AutoRename(fname)
		print

		if interval > 0:
			time.sleep(interval)
		else:
			break
こいつを例えばsecure.pyって名前で保存したら
$ secure.py test 60
みたいに使ってください。
60秒おきに、testってファイルを適当な名前にリネームします。
testがディレクトリなら、test以下のファイルすべてをリネーム。

いやー、これで安心だね!


嘘です。こんなんじゃ何も守れません。ネタです。
keyword: name path os interval sys ):
< Pythonで末尾再帰する pythonのジェネレータをリスト内包表記的に書く >