从 Windows Vista 起,注册表在 HKLM\SOFT_WARE\Microsoft\Windows NT\CurrentVersion\Network-List\Signatures\Unmanaged 子键中就会存储所有的网络信息。在 Windows 命令行提示符中,我们能列出每个网络显示出 profile Guid 对网络的描述、网络名和网关的 MAC 地址。
接下来要从 Windows 注册表指定的键值中提取各个被列出来的网络名称和 MAC 地址。需要使用 _winreg 库,这是 Python 的 Windows 版安装程序默认会安装的一个库。
from _winreg import*defprint_nets(): net ="SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged" key =OpenKey(HKEY_LOCAL_MACHINE, net)print("[*] Networks You have Joined.")for i inrange(100):try: guid =EnumKey(key, i) net_key =OpenKey(key,str(guid)) n, addr, t =EnumValue(net_key,5) n, name, t =EnumValue(net_key,4) mac_addr =val2addr(addr) net_name =str(name)print("[+] {}{}".format(net_name, mac_addr))CloseKey(net_key)except:break
确保在拥有管理员权限的命令行窗口中运行,就可以读取注册表中的键值
使用 Mechanize 把 MAC 地址传给 Wigle
知道了无线访问热点的 MAC 地址之后,可以把访问热点的物理位置也打印出来。许多数据库中,都有海量的把无线访问热点与它们所在的物理位置相对应起来的列表。
数据库,也是开源项目仍然允许用户根据无线访问热点的 MAC 地址得到它所在的物理位置。通过网页查询某个无线 SSID MAC 地址对应的物理位置,并收集响应页面。其中返回结果 maplat=47.25264359&maplon=-87.25624084 表示的就是无线访问热点的经度和纬度。
需要使用 mechanize 库,它允许 Python 编写带状态的 Web 程序。也就是说在正确地登陆 Wigle 服务器后,它会保存和重用登陆认证 cookie。
用 Python 恢复被删入回收站中的内容
在使用 FAT 文件系统的 Windows 98 及之前的 Windows 系统中,回收站目录是 C:\Recycled\。在包括 Windows NT/2000 和 Windows XP 在内的支持 NTFS 的操作系统中,回收站是 C:\Recycler\目录。在 Windows Vista 和 Windows 7 中,回收站目录则是 C:\$Recycle.Bin
import os
def return_dir():
dirs = ["c:/Recycler/", "c:/Recycled/", "C:/$Recycle.Bin/"]
for recycle_dir in dirs:
if os.path.isdir(recycle_dir):
return recycle_dir
return None
from PIL import Image
from PIL.ExifTags import TAGS
def test_for_exif(image_file_name):
try:
exif_data = {}
img_file = Image.open(image_file_name)
info = img_file._getexif()
if info:
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
exif_data[decoded] = value
exif_gps = exif_data["GPSINFO"]
if exif_gps:
print("[*] {} contains GPS MetaData".format(img_file_name))
except:
pass
import sqlite3
def print_profile(skype_db):
conn = sqlite3.connect(skype_db)
c = conn.cursor()
c.execute("SELECT fullname, skypename, city, country, datetime(profile_timestamp, 'unixepoch') FROM Accounts;")
for row in c:
print("[*] -- Found Account --")
print("[+] User: {}".format(row[0]))
print("[+] Skype Username: {}".format(row[1]))
print("[+] Location: {},{}".format(row[2], row[3]))
print("[+] Profile Date: {}".format(row[4]))
def print_call_log(skype_db):
conn = sqlite3.connect(skype_db)
c = conn.cursor()
c.execute("SELECT datetime(begin_timestamp, 'unixepoch'), identity FROM calls, conversations WHERE calls.conv_dbid = conversations.id;")
print("[*] -- Found Calls --")
for row in c:
print("[+] Time: {} | partner: {}".format(row[0], row[1]))
def print_messages(skype_db):
conn = sqlite3.connect(skype_db)
c = conn.cursor()
c.execute("SELECT datetime(timestamp, 'unixepoch'), dialog_partner, author, body_xml FROM Messages;")
print("[*] -- Found Messages --")
for row in c:
try:
if "partlist" not in str(row[3]):
if str(row[1]) != str(row[2]):
msg_direction = "To {}: ".format(row[1])
else:
msg_direction = "From {}: ".format(row[2])
print("Time: {} {} {}".format(row[0], msg_direction, row[3]))
except:
pass
SELECT fullname, birthday FROM contacts WHERE birthday > 0;
SELECT datetime(timestamp, 'unixepoch'), dialog_partner, author, body_xml, FROM Messages WHERE dialog_partner='<SKYPE-PARTNER>'
DELETE FROM messages WHERE skypename='<SKYPE-PARTNER>'
import sqlite3
def print_downloads(download_db):
conn = sqlite3.connect(download_db)
c = conn.cursor()
c.execute("SELECT name, source, datetime(endTime/1000000, 'unixepoch') FROM moz_downloads;")
print("[*] --- Files Downloaded ---")
for row in c:
print("[+] File: {} from source: {} at: {}".format(row[0], row[1], row[2]))
def print_cookies(cookies_db):
try:
conn = sqlite3.connect(cookie_db)
c = conn.cursor()
c.execute("SELECT host, name, value FROM moz_cookies")
print("[*] --- Found Cookies ---")
for row in c:
host = row[0]
name = row[1]
value = row[2]
print("[+] Host: {}, Cookie: {}, Value: {}".format(host, name, value))
except Exception as e:
if "encrypted" in str(e):
print("[*] Error reading your cookies database.")
print("[*] Upgrade your Python-Sqlite3 Library")
SELECT url, datetime(visit_date/1000000, 'unixepoch') FROM moz_places, moz_historyvisits WHERE visit_count > 0 AND moz_places.id == moz_historyvisits.place_id;
SELECT tbl_name FROM sqlite_master WHERE type=="table"
SELECT datetime(date, 'unixepoch'), address, text FROM message WHERE address > 0;