土办法导出 Mac 版微信聊天记录 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
5thcat
V2EX    分享发现

土办法导出 Mac 版微信聊天记录

  •  6
     
  •   5thcat 2018-06-26 18:52:32 +08:00 36858 次点击
    这是一个创建于 2663 天前的主题,其中的信息可能已经有所发展或是发生改变。

    macOS 微信的“备份与恢复”功能只能从手机微信导出到 Mac, 但是微其实又在本地存了加密的 sqlite3 数据库; 本地数据库的是一系列 *.db 文件,可以用如下命令查看,

    ls -alh ~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\ Support/com.tencent.xinWeChat/*/*/Message/*.db

    经过观察,微信存数据使用的是开源的 sqlcipher, 所以还是有办法导出微信在 Mac 本机的数据库的, 以下内容在 macOS 10.12, MAS 版微信 2.3.16 测试生效;

    该方法依赖 lldb, 步骤如下

    • 打开微信

    • 命令行运行 lldb -p $(pgrep WeChat)

    • 在 lldb 中输入 br set -n sqlite3_key, 回车

    • 还是在 lldb 中,输入 c, 回车

    • 扫码登录微信

    • 这时候回到 lldb 界面, 输入 memory read --size 1 --format x --count 32 $rsi, 回车

      应该会输出类似于如下的数据

    0x000000000000: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000008: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000010: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000018: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 
    • 现在,忽略左边的地址( 0x000000000000: ,0x000000000008:),从左到右,从上到下,把形如 0xab 0xcd 的数据拼起来,然后去掉所有的 "0x"和空格、换行, 得到 64 个字符的字符串,这就是 微信数据库的 key ;(参考 https://github.com/sqlcipher/sqlcipher

    • 然后, 可以下一个 https://sqlitebrowser.org/ ,用来浏览之前提到的*.db 文件(每个 db 都使用的相同的 key ),注意:打开数据库的时候选择(raw key), 然后输入 0x,再输入刚才那 64 个字符;

    • 遗留问题:*.db 文件要在另一台 PC 或 Mac 上 登录微信, 才能被关闭,否则里面的聊天记录不是最新的;当然也可以强制调用 wal_checkpoint, 不过作为土办法,在另一台电脑上登一下微信也无妨

    30 条回复    2024-08-26 19:05:05 +08:00
    AnyISalIn
        1
    AnyISalIn  
       2018-06-26 22:24:08 +08:00 via iPhone
    itunes 备份可以拿出明文数据
    5thcat
        2
    5thcat  
    OP
       2018-06-27 10:37:13 +08:00
    @AnyISalIn 误删手机微信的人可能有用
    mornlight
        3
    mornlight  
       2018-07-19 02:03:00 +08:00
    试了一下,还有个 wccontact db,里面是所有联系人,联系人的 m_nsUsrName 做一次 md5 后对应聊天记录 db 里以 Chat_xxx 开头的表。

    终于可以把我一些有用的记录导出来了,谢谢~
    Citrus
        4
    Citrus  
       2018-08-19 12:00:00 +08:00 via iPhone
    @AnyISalIn 备份不是备份不了微信数据么?
    AnyISalIn
        5
    AnyISalIn  
       2018-08-19 15:25:43 +08:00 via iPhone
    @Citrus 可以的
    Citrus
        6
    Citrus  
       2018-08-19 20:42:06 +08:00 via iPhone
    @AnyISalIn 要怎么查看?备份出来的都是 Hash 后的文件名吧。。。
    AnyISalIn
        7
    AnyISalIn  
       2018-08-19 21:18:59 +08:00
    @Citrus itunes 全量备份(不加密)之后用 iphone backup extractor 单独导出 weixin 的目录,然后最里面有一个 MM.sqlite 文件,都是明文的数据
    deniswu
        8
    deniswu  
       2019-01-10 08:40:30 +08:00
    请问现在这个方法还能用吗,拿到密码后,页面大小选多少,我试了下得到的密码还是打不开。
    devnkong
        9
    devnkong  
       2019-03-17 13:05:50 +08:00
    2019.3.17 亲测可用,加密方法选择 SQLCipher 3 default
    zhongdian121
        10
    zhongdian121  
       2019-03-26 17:45:12 +08:00
    没有 lldb 的相关经验,请问
    br set -n sqlite3_key 中的变量名 sqlite3_key 是怎么猜到的呢?
    这个办法能够破解 msg_n.db
    但是现在电脑端微信可以备份聊天记录到 Backup.db
    在这个过程中,设置 sqlite3_key 断点依然能够触发,
    memory read --size 1 --format x --count 32 $rsi 读到的数据跟登录时触发的断点也不相同
    但是就是无法用相同的方法解密
    newdongyuwei
        11
    newdongyuwei  
       2019-06-24 10:53:04 +08:00
    2019-06-24 亲测可用。赞楼主! Database Browser for SQLite 支持解密 sqlcipher 加密的数据库。Encryption setting 选择 sqlcipher3 defaults
    newdongyuwei
        12
    newdongyuwei  
       2019-06-24 14:21:53 +08:00
    @zhongdian121 我猜测是这个: https://www.zetetic.net/sqlcipher/sqlcipher-api/#sqlite3_key sqlcipher 会调用 sqlite3_key 这个函数
    taohao
        13
    taohao  
       2019-08-08 14:45:40 +08:00
    @zhongdian121 我也是这样,打开备份的数据时打不开
    longalong
        14
    longalong  
       2019-09-06 12:01:17 +08:00
    求教,我在 mac 按照教程走,最后可以在 DB broswer for sql-lite 里边看到,我现在要把 mac 里的聊天记录转到 pc 上,“遗留问题:*.db 文件要在另一台 PC 或 Mac 上 登录微信, 才能被关闭,否则里面的聊天记录不是最新的;当然也可以强制调用 wal_checkpoint, 不过作为土办法,在另一台电脑上登一下微信也无妨” 没有太理解这里的操作步骤。是指直接把 mac 里的 DB 文件复制到 PC 上 DB 文件应该在的位子就可以了吗?还是怎么操作的
    longalong
        15
    longalong  
       2019-09-06 12:01:54 +08:00
    zhangyccc
        16
    zhangyccc  
       2020-02-12 19:31:38 +08:00
    已经不行了,第一步就连不上了 lldb -p $(pgrep WeChat)
    nickr
        17
    nickr  
       2020-07-23 20:35:06 +08:00   1
    验证了. 这个方法还是可用的. 不过对于手机备份到 mac 的备份文件, 这个方法无法打开.
    yuanchao
        18
    yuanchao  
       2020-08-05 18:25:24 +08:00
    @nickr #17 您好,我这边尝试一打开 DB broswer for sql-lite 就崩溃,您遇到过吗
    yuanchao
        19
    yuanchao  
       2020-08-05 21:03:22 +08:00
    经过测试,这个方法在 2020-08-05 微信 Version. 2.4.2 (15063) 已失效,如哪位老哥有新的方法请 at 我,谢谢
    Jyougen
        20
    Jyougen  
       2020-08-07 11:57:35 +08:00
    @yuanchao Version. 2.4.2 (15063) 方法可用, 但是这种方法可以把数据导入到 iOS 的微信里吗?
    leverestfish
        21
    leverestfish  
       2020-08-25 10:40:32 +08:00
    @Jyougen 你好,我第一步就运行出错,同样版本号,微信软件的各种打开状态都试过,报错如下。在 lldb 前面加 sudo 也不行。

    ``` bash
    ~ lldb -p $(pgrep WeChat)
    (lldb) process attach --pid 97885
    error: attach failed: Error 1
    ```
    5thcat
        22
    5thcat  
    OP
       2020-08-25 15:58:54 +08:00
    @leverestfish 你的 macOS 版本是什么?
    leverestfish
        23
    leverestfish  
       2020-08-25 17:01:36 +08:00
    @5thcat macOS 10.15.6
    knightdf
        24
    knightdf  
       2020-08-31 23:47:04 +08:00
    mac 10.15.6, wechat 2.4.2 失效了?密码打不开.db 文件
    knightdf
        25
    knightdf  
       2020-09-01 00:24:54 +08:00   1
    @knightdf 最新版的用这个测试: http://xferris.cn/dao-chu-wei-xin-bei-fen-de-mac/ 亲测有效
    Hovera
        26
    Hovera  
       2020-12-05 08:49:13 +08:00
    @nickr #17 是这样的,我的是 macOS 10.15.7,微信版本 2.5.0 (15731),数据库打开似乎只是自动备份的最近几天的对话记录。

    对于手机微信消息至 mac 的备份应该在 Backup 文件夹(~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\ Support/com.tencent.xinWeChat/2.0b4.0.9/Backup/),里面有 backup.db ,BAK_0_TEXT,BAK_0_MEDIA,不知该如何破解。
    SimonOne
        27
    SimonOne  
       2021-02-06 20:31:45 +08:00
    lldb 时微信无响应,没法点击怎么办呢?
    cherrychen
        28
    cherrychen  
       2021-09-13 15:51:10 +08:00
    @SimonOne 打了断点吧, 可以 输入 c 或者 continue 就可以了
    kevintao1024
        29
    kevintao1024  
       2023-06-26 17:33:51 +08:00   1
    按照操作报错了,请问怎么解决?
    ```
    (lldb) c
    Process 1153 resuming
    Process 1153 stopped
    * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000108fdfcc4 WCDB`sqlite3_key
    WCDB`sqlite3_key:
    -> 0x108fdfcc4 <+0>: mov x3, x2
    0x108fdfcc8 <+4>: mov x2, x1
    0x108fdfccc <+8>: adr x1, #0x2c4d7 ; "main"
    0x108fdfcd0 <+12>: nop
    Target 0: (WeChat) stopped.
    (lldb) memory read --size 1 --format x --count 32 $rsi
    error: invalid start address expression.
    error: address expression "$rsi" evaluation failed
    ```
    zysidea
        30
    zysidea  
       2024-08-26 19:05:05 +08:00
    @Hovera 遇到同样的诉求,老哥找到办法了么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     881 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:18 PVG 05:18 LAX 14:18 JFK 17:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86