使用frida获取微信EnMicroMsg.db 数据库密码

这件事情浪费我两天时间,期间遇到了各种坑,记录一下
工具:
python3.7.6
frida 12.8.0
mumu模拟器
adb
SqlCipher

0x00 frida

  • Frida是一款轻量级HOOK框架,可用于多平台上,例如android、windows、ios等。
  • frida分为两部分,服务端运行在目标机上,通过注入进程的方式来实现劫持应用函数,另一部分运行在系统机器上。frida上层接口支持js、python、c等。

0x01 安装frida和frida-tools 和配置

python端 frida 和frida-tools安装
       因为我的python环境是3.7的,再加上根据大家的评价 说 12.8.0比较稳定,这选择12.8.0。没有使用最新的版本(最新版本好像不支持py3.7)

python3 -m pip install frida==12.8.0
python3 -m pip install frida-tools==5.3.0

查看你frida版本
frida-server 服务端版本下载

https://github.com/frida/frida

同样选择 12.8.0 版本
使用frida获取微信EnMicroMsg.db 数据库密码_第1张图片
我这里使用 是的 mumu模拟器
adb连接模拟器中的android系统 查看系统架构

adb connect # 创建连接
adb shell	# 进入系统 shell
getprop ro.product.cpu.abi	#查看系统架构

注意:7555是 Mumu模拟器内安卓系统 默认端口
使用frida获取微信EnMicroMsg.db 数据库密码_第2张图片
下载 frida-server-12.8.0-android-x86_64.xz 版本
解压上传

# 创建frida-server至 安卓系统上
adb push frida-server-12.8.0-android-x86_64 /data/local/tmp  
# 赋予执行权限 并执行
chmod +x frida-server-12.8.0-android-x86_64
./frida-server-12.8.0-android-x86_64

# 端口转发
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043

测试枚举模拟器系统的 进程
frida-ps -U
使用frida获取微信EnMicroMsg.db 数据库密码_第3张图片

0x02 使用frida获取 微信EnMicroMsg.db 数据库密码

源码分析参考连接:https://www.cnblogs.com/lxh2cwl/p/14842537.html

hook.js

import frida 
import sys   
 
jscode = """
    Java.perform(function(){ 
        var utils = Java.use("com.tencent.wcdb.database.SQLiteDatabase"); // 类的加载路径
         
        utils.openDatabase.overload('java.lang.String', '[B', 'com.tencent.wcdb.database.SQLiteCipherSpec', 'com.tencent.wcdb.database.SQLiteDatabase$CursorFactory', 'int', 'com.tencent.wcdb.DatabaseErrorHandler', 'int').implementation = function(a,b,c,d,e,f,g){  
            console.log("Hook start......");
            var JavaString = Java.use("java.lang.String");
            var database = this.openDatabase(a,b,c,d,e,f,g);
            send(a);
            console.log(JavaString.$new(b));
            send("Hook ending......");
            return database;
        };
         
    });
"""
 
 
def on_message(message,data): #js中执行send函数后要回调的函数
    if message["type"] == "send":
        print("[*] {0}".format(message["payload"]))
    else:
        print(message)
     
process = frida.get_remote_device()
pid = process.spawn(['com.tencent.mm']) #spawn函数:进程启动的瞬间就会调用该函数
session = process.attach(pid)  # 加载进程号
script = session.create_script(jscode) #创建js脚本
script.on('message',on_message) #加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load() #加载脚本
process.resume(pid)  # 重启app
sys.stdin.read() 

获取数据库密码成功
在这里插入图片描述
将EnMicroMsg.db文件从模拟器(手机)复制到电脑上(手机或者模拟器要登陆微信)

adb  pull /data/data/com.tencent.mm/MicroMsg/xxxxxxxxxxxxx/EnMicroMsg.db EnMicroMsg.db

使用 SqlCipher 工具打开EnMicroMsg.db
使用frida获取微信EnMicroMsg.db 数据库密码_第4张图片

你可能感兴趣的:(逆向,网络安全,微信,数据库,database,python)