V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nalzok
V2EX  ›  macOS

微信聊天记录提取工具🔧

  •  4
     
  •   nalzok · 2021-01-13 19:59:53 +08:00 · 11427 次点击
    这是一个创建于 1441 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这两天基于 DTrace 写了一套能从微信客户端里读取聊天记录的小玩具。项目还有些粗糙,但目前已经支持读取实时聊天信息、macOS 客户端本地的聊天记录、以及从移动客户端备份到 macOS 上的聊天记录(对于备份只能读一个索引数据库,后期还需要加工)

    感兴趣的话可以来看看: https://github.com/nalzok/wechat-decipher-macos

    48 条回复    2021-01-17 15:54:59 +08:00
    touzi
        1
    touzi  
       2021-01-13 22:04:59 +08:00
    感觉很高级的样子
    oreoiot
        2
    oreoiot  
       2021-01-13 22:15:28 +08:00 via iPhone
    备份是指通过 macOS 版微信备份的 iOS 版的记录,还是说通过 Finder 备份?
    看过一下备份的东东,应该是大同小异?
    Rorysky
        3
    Rorysky  
       2021-01-13 22:20:31 +08:00
    加密怎么解决的
    nalzok
        4
    nalzok  
    OP
       2021-01-13 22:35:31 +08:00
    @oreoiot 是通过 macOS 版微信备份的 iOS 版的记录。备份得到的 Backup.db 里只存了各个聊天记录在另一个(疑似 protobuf 格式?)文件里的 offset 和 size,所以还需要手动提取一下。
    nalzok
        5
    nalzok  
    OP
       2021-01-13 22:39:47 +08:00
    @Rorysky 我是直接通过 DTrace probe 获取内存里的 AES 密钥的,具体实现可以看看 dbcracker.d,它会把数据库文件的路径和对应的密钥都打印出来(多线程会导致结果看起来比较乱,但基本能辨识)。
    nalzok
        6
    nalzok  
    OP
       2021-01-13 22:39:54 +08:00
    @touzi 嘿嘿谢谢!
    qiayue
        7
    qiayue  
       2021-01-13 22:40:00 +08:00
    楼主我有个需求,你看看能不能做,把我自己几个微信里的通讯录导出来,可付费
    nalzok
        8
    nalzok  
    OP
       2021-01-13 23:00:42 +08:00
    @qiayue 抱歉哦,我暂时没时间接私活。不过你可以先运行 `dbcracker.d`,然后用 macOS 客户端备份手机微信里的聊天记录。我的脚本会告诉你怎么查看聊天记录备份(就是那个 Backup.db )里的数据,数据库里有张表叫 Session,里面存着和你有过对话的用户的微信号和昵称。
    qiayue
        9
    qiayue  
       2021-01-13 23:06:51 +08:00
    @nalzok 好的,谢谢
    aheadlead
        10
    aheadlead  
       2021-01-13 23:09:21 +08:00
    这个思路牛逼 👍
    aheadlead
        11
    aheadlead  
       2021-01-13 23:10:24 +08:00
    其实微信的表情也不好弄出来,比较烦人…

    p.s. 楼主是不是以前做天蓝村的呀? id 有点熟悉
    aheadlead
        12
    aheadlead  
       2021-01-13 23:10:39 +08:00
    看错了 @qiayue 是这位。。
    nalzok
        13
    nalzok  
    OP
       2021-01-13 23:30:56 +08:00   ❤️ 1
    @aheadlead 哈哈,表情包在数据库里类似于这样:'<msg><emoji md5="be2112fde8a67b319b27f2e798a03d0b" type="2" len = "6448"></emoji><gameext type="0" content="0" ></gameext></msg>' 根据里面的 md5 字段我找到了一个文件 /Users/nalzok/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/xxxxxxxx/Stickers/File/Stickers/File/be2112fde8a67b319b27f2e798a03d0b,但是不清楚它具体是什么格式。
    aheadlead
        14
    aheadlead  
       2021-01-13 23:36:00 +08:00
    @nalzok #13 是的 很早之前也研究过了这块 也一直搞不清楚啥格式
    FightPig
        15
    FightPig  
       2021-01-14 02:11:48 +08:00
    正好看看。
    hsfzxjy
        16
    hsfzxjy  
       2021-01-14 08:55:38 +08:00 via Android   ❤️ 1
    我写过一个油猴脚本用于导出微信表情,不过要求能登录网页版微信。https://github.com/hsfzxjy/collect-wx-emoticon
    cxe2v
        17
    cxe2v  
       2021-01-14 09:46:48 +08:00
    这玩意。。。微信后续会封杀和修改聊天记录加密方式吧
    Ritter
        18
    Ritter  
       2021-01-14 10:03:15 +08:00
    windows 可以使用吗
    qiayue
        19
    qiayue  
       2021-01-14 10:05:05 +08:00
    @aheadlead 是天蓝村
    nalzok
        20
    nalzok  
    OP
       2021-01-14 10:31:09 +08:00
    @cxe2v 我觉得不至于?首先,本地的聊天记录本身就是我自己的数据,用客户端就能看到,没啥好保密的;其次,底层数据库的读写代码牵扯到的环节太多,改写它还要冒着导致用户数据丢失的风险,不值得;最后,之前好像就有人把聊天记录备份的密钥读出来了,只不过我们的思路不一样
    nalzok
        21
    nalzok  
    OP
       2021-01-14 10:33:03 +08:00
    @Ritter 我估计够呛,不过 Windows 上也有 DTrace ( https://github.com/microsoft/DTrace-on-Windows ),用我的思路应该可以做出点东西来
    fox1751
        22
    fox1751  
       2021-01-14 11:39:59 +08:00 via iPhone
    是本身能登陆微信号的情况下把聊天记录提取出来还是在无法登陆微信号的情况下通过数据文件把聊天记录提取出来?
    Joysisyphus
        23
    Joysisyphus  
       2021-01-14 12:00:01 +08:00
    有一个类似功能的软件已经做得挺成熟的了 http://wxbackup.imxfd.com
    dangyuluo
        24
    dangyuluo  
       2021-01-14 12:08:38 +08:00
    @Joysisyphus #23 不错,只是聊天记录太敏感,不太放心用第三方工具
    nalzok
        25
    nalzok  
    OP
       2021-01-14 12:53:35 +08:00
    @fox1751 需要登录微信才能提取。这些脚本的原理是获取内存中的 secret,所以前提是内存里首先得有 secret
    moonkiller
        26
    moonkiller  
       2021-01-14 16:17:08 +08:00   ❤️ 1
    求一个微信收藏导出工具…
    只有 2G 空间,因为收藏的视频多了点就达到上限了
    微信备份又不备份收藏… 好烦
    怎么批量导出备份…
    crab
        27
    crab  
       2021-01-14 16:23:14 +08:00
    @aheadlead 表情保存的是 url,搜索 encrypturl
    nalzok
        28
    nalzok  
    OP
       2021-01-14 16:32:55 +08:00 via iPhone
    @moonkiller 我记得用 dbcracker.d 可以扫出来一个名叫 favourite.db 的数据库,但是不知道它和收藏有什么关系,你可以去研究看看?
    goxxoo
        29
    goxxoo  
       2021-01-14 16:43:13 +08:00
    用 iTunes 导出,楼月备份,python 导出 html,声音,图片
    looking0truth
        30
    looking0truth  
       2021-01-14 17:27:35 +08:00
    有没有办法导出电脑上的聊天记录,不是手机备份过去的。。。
    nalzok
        31
    nalzok  
    OP
       2021-01-14 18:50:36 +08:00   ❤️ 1
    @looking0truth 用仓库里的 `dbcracker.d` 就可以导出呀,README 里有写,运行这个脚本然后再登录微信就可以看到本地聊天记录数据库的路径和密钥了
    azhangbing
        32
    azhangbing  
       2021-01-14 19:22:49 +08:00
    start 了 试一下
    FS1P7dJz
        33
    FS1P7dJz  
       2021-01-14 19:30:48 +08:00
    @nalzok 但是微信可以起诉你...总觉得还是低调一些,并且做好个人隐私保护
    nalzok
        34
    nalzok  
    OP
       2021-01-14 20:46:32 +08:00
    @FS1P7dJz 嗯嗯,谢谢提醒!希望腾讯手下留情放我一马 T^T
    qwezxcassd
        35
    qwezxcassd  
       2021-01-14 23:51:26 +08:00 via Android
    @FS1P7dJz 起诉有依据吗?不管微信再流氓,至少用户的本地聊天记录是归属于用户自己的吧。
    FS1P7dJz
        36
    FS1P7dJz  
       2021-01-15 00:19:58 +08:00
    @qwezxcassd 数据库是加密的啊,作者也说了,是内存获取密钥的
    说白了这种事情,你哪怕是用公开 API,但是结果不如腾讯所愿,依然可以封杀你,更别提这种不敞亮的技术了
    个人开发者怎么可能与南山必胜客抗衡
    hs0000t
        37
    hs0000t  
       2021-01-15 01:30:07 +08:00 via Android
    楼主一定要保护好自己
    nalzok
        38
    nalzok  
    OP
       2021-01-15 09:49:43 +08:00
    谢谢各位的提醒。主要我这几个脚本都是观测性质的,并没有做什么影响程序行为的操作,因此 “破坏计算机信息系统罪” 的帽子很难扣到我头上,这也是我敢把它放到 GitHub 上的原因。再说,如果说看一眼自己电脑的内存都犯法,那实在是有点牵强,所以我感觉微信顶多也就以违反 EULA 的由头把我微信号封掉(虽然那已经很惨了 = =)。当然,我也毫不怀疑南山必胜客的实力,所以如果真的有幸收到腾讯的律师函,我应该就删 repo 跑路了。
    shunconf
        39
    shunconf  
       2021-01-15 10:10:59 +08:00
    @Joysisyphus 不支持安卓手机和 win 客户端
    Celeste95
        40
    Celeste95  
       2021-01-15 11:06:24 +08:00
    QQ 可以用类似的思路实现吗?
    codersui
        41
    codersui  
       2021-01-15 11:12:47 +08:00 via iPhone
    不错
    nalzok
        42
    nalzok  
    OP
       2021-01-15 14:40:41 +08:00
    @Celeste95 DTrace 是一个通用的动态分析工具,所以不管是 QQ 还是 Telegram 还是网易云还是 Among Us,都可以用这个思路来窥探应用程序内部的状态。我觉得只要聊天记录是存在本地的,那就没有读不出来的道理。
    bbbb
        43
    bbbb  
       2021-01-15 20:10:26 +08:00 via iPhone
    感谢分享,研究研究
    vincentxue
        44
    vincentxue  
       2021-01-15 23:26:34 +08:00
    如果你这个能直接从 macOS 端提取聊天记录或者从备份到电脑上聊天记录里面提取那就很有用了。如果要从备份里提取,那其实已经有很成熟的了。http://wxbackup.imxfd.com/
    vincentxue
        45
    vincentxue  
       2021-01-15 23:27:13 +08:00
    @vincentxue 好像有人说了,忽略我。
    nalzok
        46
    nalzok  
    OP
       2021-01-16 09:42:47 +08:00
    @vincentxue “如果你这个能直接从 macOS 端提取聊天记录或者从备份到电脑上聊天记录里面提取那就很有用了。” 哈哈,这两个功能 dbcracker.d 都能实现 :)
    Kenny
        47
    Kenny  
       2021-01-17 09:12:29 +08:00
    有没有备份安卓手机的呢
    nalzok
        48
    nalzok  
    OP
       2021-01-17 15:54:59 +08:00
    @Kenny 试试看把安卓手机的聊天记录备份到 macOS 上?我的手机是 iOS,用下来没问题,但是不保证安卓也能成功
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5354 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:51 · PVG 15:51 · LAX 23:51 · JFK 02:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.