用python来恢复回收站中删除的项目

用python来恢复回收站中删除的项目

当用户通过windows explorer删除文件时,操作系统会将这个文件移动到特殊的文件夹中并标记这文件已删除,但并不是实际上的删除它们。

在 Windows 98 和更早的系统中用的是 FAT 文件系统。C:\Recycled\目录保存着回 收站目录。

支持 NTFS 的操作系统有 Windows NT,2000,和 XP 存储回收站在 C:\Recycler\目录下。

Windows Vista 和 Windows 7 系统存储在 C:$Recycle.Bin 目录下。

使用os模块查找已删除的项目

import os

def returnDir():
    dirs= ['C:\\Recycler\\', 'C:\\Recycled\\', 'C:\\$Recycle.Bin\\']
    for recycleDir in dirs:
        if os.path.isdir(recycleDir):
            return recycleDir
    return None

在发现回收站目录之后,检查里面的内容,注意到两个子目录,都包含字符串 S-1-5-21-1275210071-1715567821-725345543-并终止与 1005 或 者 500。这个字符串用户的 SID,与机器上的用户的账户一一相对应。

C:\RECYCLER>dir /a
 Volume in drive C has no label.
 Volume Serial Number is 882A-6E93
Directory of C:\RECYCLER
04/12/2011 09:24 AM  .
04/12/2011 09:24 AM  ..
04/12/2011 09:56 AM
 S-1-5-21-1275210071-1715567821-
725345543-
1005
04/12/2011 09:20 AM  S-1-5-21-1275210071-1715567821-
 725345543-
500
 0 File(s) 0 bytes
 4 Dir(s) 30,700,670,976 bytes free

用python将用户的SID关联起来

使用 Windows 注册表将 SID 转化为一个准确的用户名。通过检查 Windows 注册表键值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\\ProfileImagePath,我们可以看到它返回 一个是%SystemDrive%\Documents and Settings\

//允许我们将 SID 为 S-1-5-21-1275210071-1715567821-725345543-1005 转化为用户名“alex”。
C:\RECYCLER>reg query
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\Curre
ntVersion\ProfileList\S-1-5-21-1275210071-1715567821-
725345543-1005" /v
ProfileImagePath
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\ProfileList \S-1-5-21-1275210071-1715567821-
725345543-1005 ProfileImagePath
REG_EXPAND_SZ %SystemDrive%\Documents and Settings\alex

编写一个小的函数来将每一个 SID 转化为用户名。当我们恢复回收站中被删除的项目时这将使我们打印更多 有用的输出。这个函数将打开注册便检查 ProfileImagePath键值,找到其值并 从中找到用户名。

import os
import _winreg


def returnDir():
    dirs = ['C:\\Recycler\\', 'C:\\Recycled\\', 'C:\\$Recycle.Bin\\']
    for recycleDir in dirs:
        if os.path.isdir(recycleDir):
            return recycleDir
    return None


def sid2user(sid):
    try:
        key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
                              "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\\" + sid)
        (value, type) = _winreg.QueryValue(key, 'ProfileImagePath')
        user = value.split('\\')[-1]
        return user
    except:
        return sid


def findRecycled(recycleDir):
    dirList = os.listdir(recycleDir)
    for sid in dirList:
        files = os.listdir(recycleDir + sid)
        user = sid2user(sid)
        print('\n[*]Listing Files For User:' + str(user))
        for file in files:
            print('[+]Found File:' + str(file))


def main():
    recycledDir = returnDir()
    findRecycled(recycledDir)


if __name__ == '__main__':
    main()

你可能感兴趣的:(web)