「前端工程化系列-逆向分析企微Cookie」

本文仅供参考学习提升能力,请大家务必遵纪守法做个合法的公民,不然牢底坐穿..踩不完的缝纫机!

企业微信,目前是大多数公司采用的即时沟通协作的工具,连接个人微信打通客户沟通的壁垒,赋能增效!而企微的工作台是业务应用入口,这些应用可以是小程序、Web网页...

今天我们主要探索一下企业微信内置浏览器打开Web网页后,如何逆向分析企业微信内置浏览器中Web应用的Cookie密文数据。 此逆向分析过程,在Windows 10环境下完成,所涉及的软件工具清单有:

js 复制代码
企业微信客户端 4.1.2.6011   此版本之前都可以 后续新版本没测验
SQLiteSpy 1.9.15           查看Cookie密文数据库
Python 3.11.0              代码脚本读取数据库解密Cookie数据

基本工作原理:企业微信内置浏览器将Web应用的Cookie数据,以密文写入到SQLite数据库文件中,我们通过企微本地存储的密钥,读取Cookie密文数据库文件,使用密钥进行解密数据即可!

1.企业微信Cookie分析

通常情况下,企微的用户数据一般都是存储在C盘的文档目录,经过一番百度Google,可以知道Cookie一般是存储在C:\Users\dev\Documents\WXWork...\Network\Cookies文件,具体目录路径各个版本更新会有所差异,我们只需要使用SQLiteSpy逐个排查Cookies文件即可!而密钥则是在LocalPrefs.json文件中! 1.1 没错!这就是encrypted_key密钥!

1.2 没错!这就是加密后的Cookie数据!

2.Python脚本解密代码

Python通过pip安装cryptography、pypiwin32、pywin32

python 复制代码
# -*- coding: UTF-8 -*-
import os
import sys
import time
import json
import base64
import sqlite3
import win32crypt
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

token = ''
wwx_work_sso = ''

def logfile():
    file = os.environ['HOMEPATH'] + r'\Desktop\hcm\log.txt'
    mode = 'a+'
    log_file = open(file, mode) 
    sys.stdout = log_file
    sys.stderr = log_file

def getkey(path):
    with open(path,'r',encoding='utf-8') as f:
        encrypted_key = json.load(f)['os_crypt']['encrypted_key']
    return encrypted_key

def aeskey(base64_encrypted_key):
    encrypted_key_with_header = base64.b64decode(base64_encrypted_key)
    encrypted_key = encrypted_key_with_header[5:]
    key = win32crypt.CryptUnprotectData(encrypted_key,None,None,None,0)[1]
    return key

def decrypt(key,data):
    nonce,cipherbytes = data[3:15],data[15:]
    aesgcm = AESGCM(key)
    plainbytes = aesgcm.decrypt(nonce,cipherbytes,None)
    plaintext = plainbytes.decode('utf-8')
    return plaintext    

def cookie():
    # 读取企微密钥文件
    WXWorkLocalPrefsFilePath = os.environ['HOMEPATH']+r'\Documents\WXWork\LocalPrefs.json'
    # 解析企微密钥key
    key = aeskey(getkey(WXWorkLocalPrefsFilePath))
    # sqlite读取企微Cookie文件
    WXWorkCookiesFilePath = os.environ['HOMEPATH']+r'\Documents\WXWork\1688850727378954\CefCache\Network\Cookies'
    print('Cookies修改时间: ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.stat(WXWorkCookiesFilePath).st_mtime)))
    sqlite3_conn = sqlite3.connect(WXWorkCookiesFilePath)
    with sqlite3_conn:
        # 查询hcm.xxx.com网站下的Cookie
        select_sql = 'select name, encrypted_value from cookies where host_key = "hcm.xxx.com"'
        result = sqlite3_conn.execute(select_sql).fetchall()
        # 遍历解密 token、wwx_work_sso 字段值
        for row in result:
            if row[0] == 'token':
                global token
                token = decrypt(key,row[1])
            if row[0] == 'work_inner_sso':
                global wwx_work_sso
                wwx_work_sso = decrypt(key,row[1])
        # 打印 token、wwx_work_sso 字段的明文数据
        print(token)
        print(wwx_work_sso)

if __name__ == '__main__':
    logfile()
    cookie()

代码运行结果,查看日志文件,没毛病!

3.后续相关拓展

至此,我们已经跑通一个简单的逆向流程,其实,还可以做的更多,比如定时器自动扫描目录、网络上报数据、打包成exe客户端一键运行等!

其实,你会发现企微内置的浏览器也是基于开源的chromium项目,那是不是...chrome也可以这么处理?chrome 117之前,是可以的,现在最新版本更新了,这个问题就留给大家动手去探索答案了!

相关推荐
传人once1 小时前
多图片上传预览功能如何写
前端·css·html·jquery·html5
Eric.462 小时前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
库拉镜像AI牛牛3 小时前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
律宏阔3 小时前
Flutter 列表图片内存优化:CachedNetworkImage 与 ClipRRect 的取舍
前端·flutter
行者全栈架构师3 小时前
【鸿蒙心迹】相册文搜图工程化落地:HarmonyOS 7.0 端侧 AI 检索全链路实战与 5 个踩坑解法
前端
律宏阔3 小时前
Dart 3 Record:解决 Future.wait 异构返回值的类型问题
前端·flutter
Seraphina364 小时前
DVWA(XSS Reflected/Stored High,CSRF Low)
前端·xss·csrf
默_笙4 小时前
🍔 中间件不只是打日志:四个钩子、一次短路,和自带的工具
前端·javascript
程序员老赵5 小时前
Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
运维·前端·后端
星禾元亨5 小时前
同一件事有三份资料,AI 该信哪一份?冲突判定、优先级链与处置流程
前端·人工智能