乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
乌鸦安全拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!
本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!
1. 说明
本文主要从开源工具SharpWxDump
上来展开学习的,在这里提供工具的就是SharpWxDump
,github
链接地址:
https://github.com/AdminTest0/SharpWxDump
参考学习文档来源于:
https://mp.weixin.qq.com/s/4DbXOS5jDjJzM2PN0Mp2JA
在使用之前一定要注意微信的版本,这个非常重要,因为现在的低版本微信是无法解密成功的。至于多低的版本,后面再说。
我编译之后的工具请在公众号后台回复关键字:解密 下载
2. 微信解密工具编译
首先在作者地址上将工具下载下来:
https://github.com/AdminTest0/SharpWxDump
在这个项目里面主要是Program.cs
里面的程序,在这里使用visual studio
来编译,其实在这里还可以使用Windows
自带的程序来编译,但是因为我电脑是64
位的,编译之后的工具没法使用,在这里先说一下64
位是如何编译的。
2.1 64 位编译(微信暂时无法使用)
将Program.cs
文件放到C:WindowsMicrosoft.NETFrameworkv4.0.30319
目录下,然后使用管理员权限启动cmd
,来编译下文件:
然后就会得到一个Program.exe
文件,但是目前这个文件没法用:
执行微信的文件也需要管理员权限来执行:
2.2 32 位编译(微信可以正常使用)
在visual studio
中新建一个c#
的文件,首先新建一个项目:
在这里选择一个C#
的控制台应用程序:
然后将Program.cs
里面的程序复制过来,选择release
的x86
位的:
再选择生成解决方案:
这个程序就是生成的文件:
在这里使用管理员模式
的命令行来执行下看看,在这里获取微信key
的值,要求微信在正在打开使用的的状态下进行:
此时获取的值就是key
3. 解密微信聊天记录
微信聊天记录默认是放在文档
-->Wechat Files
下:
开头是wxid_xxxxxxx
,在这里代表的是一个账号的聊天记录文件,点进去之后,找到wxid_xxxxxMsgMulti
下的MSGx.db
文件,MSG.db
超出240MB
会自动生成MSG1.db
。
聊天记录为:
wxid_xxxxxxxxMsgMultiMSG0.db > 聊天记录
wxid_xxxxxxxxMsgMultiMSG1.db > 聊天记录
wxid_xxxxxxxxMsgMultiMSG2.db > 聊天记录
wxid_xxxxxxxxMsgMicroMsg.db > Contact字段 > 好友列表
wxid_xxxxxxxxMsgMediaMsg.db > 语音 > 格式为silk
参考:https://mp.weixin.qq.com/s/4DbXOS5jDjJzM2PN0Mp2JA
将这里面的文件复制出来,用解密脚本来进行解密操作:
使用脚本进行解密:
脚本来源于:
https://mp.weixin.qq.com/s/4DbXOS5jDjJzM2PN0Mp2JA
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 jiemi.py -k 微信key(前面获取的key)-d MSGx.db 逐个进行解密
解密前的文件:
解密之后的:
文件需要逐个解密,文件解密之后,可以使用数据库工具打开,也可以使用sqlite
直接打开:
网址:https://sqlitebrowser.org/
在MSG
里面存在聊天记录:
如果查询敏感信息的话,直接执行sql
命令,但是mac
下的该软件执行命令的时候会闪退:
在这里使用另外一个工具DBeaver
打开:
此时即可浏览:
当然,也可以执行命令来筛选:
SELECT * FROM "MSG" WHERE StrContent like'%密码%'
在这里使用的是navicat
查询的,确实这个工具比较好用:
4. 微信版本问题
目前我解密的微信版本为3.9.0.28
,目前是可以正常解密的:
但是我早起比较老的版本是无法解密成功的,具体的原因暂时未知。
tips:加我wx,拉你入群,一起学习
扫取二维码获取
更多精彩
乌鸦安全
原文始发于微信公众号(乌鸦安全):微信Windows版本解密学习
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论