ITPub博客

首页 > 数据库 > 数据库开发技术 > 如何找回你的聊天记录

如何找回你的聊天记录

原创 数据库开发技术 作者:逍遥子 时间:2023-03-05 08:00:00 0 删除 编辑

在我们工作和生活中。在聊天信息中可能会存在很重要的信息。但是由于时间比较长,或者手机上的记录已删除。该怎样找回记录呢?

注意!本文涉及到的技术仅供学习。没有任何的不良引导。请勿使用本文技术做违法乱纪的事情。造成法律后果自负。

实验环境

  • 微信电脑版(3.9.0.28)
  • Python3.8
    (kali环境中的python就可以)
  • Navicat16
  • ​开VS2019

编译工具

如果没有vs工具,我们需要先安装vs2019(其他版本未知)。安装过程比较漫长,可以自行搜索解决。我们首先需要编译工具SharpWxDump。下载项目到我们的本地。在vs中导入项目。设置框架为x86点击启动,进行编译。

🍀项目地址:

git clone https://github.com/AdminTest0/SharpWxDump

编译完成后,在项目的bin文件夹下。

至此,工具编译完成。

获取数据库密码

前提: 需用户登录WX 将生成的工具拖到cmd命令框中。获取key并记录。

获取聊天信息

消息位置

文档\WeChat Files\微信ID\Msg\Multi\MSG0.db 

超出240MB会自动生成MSG1.db,以此类推。

解密数据库

将下面代码保存为py文件。

from Crypto.Cipher import AES
import hashlib, hmac, ctypes, sys, getopt

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
opts, args = getopt.getopt(sys.argv[1:], 'hk:d:')
input_pass = ''
input_dir = ''

for op, value in opts:
    if op == '-k':
        input_pass = value
    else:
        if op == '-d':
            input_dir = value

password = bytes.fromhex(input_pass.replace(' ', ''))

with open(input_dir, '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_dir, '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:])

🕸解密数据库

python3 22.py -k E4884351DD06A521A8485949A8A279B9058773C59E -d MSG0.db

这时,将原来的加密数据库MSG0.db进行了解密。将得到的数据库用数据库管理工具Navicat打开。效果如下:

注意事项

  • 在编译时选择目标框架:.NET Framework 4、平台为Release x86。
  • 编译工具需和对应的WEIX版本对应。最新版本为3.9.0可能不成功。需卸载后安装旧版本。或者坐等作者更新代码。
  • 最后,本文仅供学习和研究。请勿做维护网络安全的行为。

更多精彩文章 欢迎关注我们

原文作者:Kali笔记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-01-22

  • 博文量
    760
  • 访问量
    444424