<PY><目录操作>自制空闲磁盘擦除器(反数据恢复软件)
2015-02-10 21:43
633 查看
使用ccleaner的时候有一个安全擦除MFT的选项,发现速度奇慢,而且可定制性很差
所以自己用python写了一个小程序来擦除数据
原理是通过产生文件覆盖空闲空间,然后删除这些文件,来实现原来残留文件的不可恢复,从而使数据恢复软件失效,来确保已删除(清空回收站之后)的数据的安全
理论上设置size=1000000,便不可恢复1MB以上的文件;设置1000,便不可恢复1KB以上的文件
先上效果图
代码如下:
import os,win32file,shutil
def getpath():
try:
return os.path.abspath('.')
except:
return 400
def getfreecapcity(path):
try:
sectorsPerCluster, bytesPerSector, numFreeClusters, totalNumClusters =win32file.GetDiskFreeSpace(path)
return numFreeClusters * sectorsPerCluster * bytesPerSector #Bytes
except:
return 401
def mkfolder(name):
try:
os.mkdir(name)
print '0'
return 0
except:
return 402
def rmfolder(name):
try:
shutil.rmtree(name)
return 0
except:
return 403
def mkfill(fillname,size,mode):
try:
f=open(fillname,'w')
f.write(mode*size)
f.close();return 0
except:
return 404
def empty(size,mode,workspace):
'size:filesize,mode:fillcontext,workspace:tempfolder'
print mkfolder(workspace)
path=getpath();print path
size_limit=len(mode*size)+200
fname=-1
getfreecapcity(path)
while long(getfreecapcity(path))>size_limit:
fname+=1
mkfill(workspace+'\\'+str(fname),size,mode)
print rmfolder(workspace)
return 0
def emptyplus(times=3,size=1000,mode='z',workspace='EmPtYmFt'):
'size:filesize(default=1kB),mode:fillcontext,workspace:tempfolder'
while times>0:
times-=1
empty(size,mode,workspace)
return 'done!'
if __name__=='__main__':
print emptyplus()
raw_input('ENTER TO EXIT.')
打包完的exe下载 http://pan.baidu.com/s/1dD7yxw9
所以自己用python写了一个小程序来擦除数据
原理是通过产生文件覆盖空闲空间,然后删除这些文件,来实现原来残留文件的不可恢复,从而使数据恢复软件失效,来确保已删除(清空回收站之后)的数据的安全
理论上设置size=1000000,便不可恢复1MB以上的文件;设置1000,便不可恢复1KB以上的文件
先上效果图
代码如下:
import os,win32file,shutil
def getpath():
try:
return os.path.abspath('.')
except:
return 400
def getfreecapcity(path):
try:
sectorsPerCluster, bytesPerSector, numFreeClusters, totalNumClusters =win32file.GetDiskFreeSpace(path)
return numFreeClusters * sectorsPerCluster * bytesPerSector #Bytes
except:
return 401
def mkfolder(name):
try:
os.mkdir(name)
print '0'
return 0
except:
return 402
def rmfolder(name):
try:
shutil.rmtree(name)
return 0
except:
return 403
def mkfill(fillname,size,mode):
try:
f=open(fillname,'w')
f.write(mode*size)
f.close();return 0
except:
return 404
def empty(size,mode,workspace):
'size:filesize,mode:fillcontext,workspace:tempfolder'
print mkfolder(workspace)
path=getpath();print path
size_limit=len(mode*size)+200
fname=-1
getfreecapcity(path)
while long(getfreecapcity(path))>size_limit:
fname+=1
mkfill(workspace+'\\'+str(fname),size,mode)
print rmfolder(workspace)
return 0
def emptyplus(times=3,size=1000,mode='z',workspace='EmPtYmFt'):
'size:filesize(default=1kB),mode:fillcontext,workspace:tempfolder'
while times>0:
times-=1
empty(size,mode,workspace)
return 'done!'
if __name__=='__main__':
print emptyplus()
raw_input('ENTER TO EXIT.')
打包完的exe下载 http://pan.baidu.com/s/1dD7yxw9
相关文章推荐
- linux磁盘和数据恢复软件
- <识数寻踪:WinHex应用与数据恢复开发秘籍>推荐序一
- python 数据库操作查出id>?and id<?的所有数据
- <转>Npoi导入导出Excel操作<载>
- iOS关于如何让<界面切换逻辑>与<数据业务逻辑>解耦的探讨
- <转>:Python中的文件和目录操作
- <c:if>判断两个<c:forEach>里的数据是否相等
- <volist>和<foreach>循环输出list数据
- <Android>在Activity被非正常杀死并重建时,使用savedInstanceState进行数据恢复的简单实例
- 数据的逆序操作(Big-endian<->Little-endian)
- <java><JTable>使用AbstractTableModel实现更新、删除、插入数据
- 关于JavaScript针对<ul><li>的一些操作
- <java> <JTable> 关于设置JTable导入数据后自动排序-小记
- <<C++ Primer>>中判断空字符数据的问题
- 恢复删除了数据文件的表<MyISAM>
- 使用mysql备份工具innobackupex将本地数据 直接恢复 到远端服务器数据目录操作实例
- <<UNIX环境高级编程>>学习总结——第四章:文件和目录
- <c:if>判断两个<c:forEach>里的数据是否相等
- <s:iterator>使用status获取当前遍历数据的行数、序号等操作
- 因为根目录磁盘满了,我移动数据和软件造成mysql启动不了,查原因mysql.sock不在了 推荐