分类: Anki

  • Anki 加密 Deck 解密 Key 查找指南

    背景说明

    某些 Anki deck 使用了加密保护,需要找到解密的 keyiv 才能提取内容。这些加密 deck 通常还包含防调试代码,会在检测到开发者工具时循环刷新页面。

    完整操作步骤

    第一步:绕过防调试代码

    1. 先打开 Chrome DevTools(按 F12
    2. 立即禁用所有断点
      • Sources 面板,按快捷键 F8(或 Ctrl+F8 / Cmd+F8
      • 或点击右上角的 “Deactivate breakpoints” 按钮(蓝色暂停图标)
      • 此时按钮应该变灰,表示断点已禁用
    3. 进入 Deck 页面(现在不会被防调试代码拦截)

    第二步:定位解密函数

    1. Ctrl+Shift+F(Mac: Cmd+Shift+F)打开全局搜索
    2. 搜索关键词≯#(加密内容的标记符)
    3. 找到类似这样的代码段
    _0x3dc22f[_0x5271('0x47')]( (_0x3d4b22, _0x1e99f3) => {
        let _0xe83f49 = this['akDecrypt'](
            _0x3d4b22[_0x5271('0x1e')](0x2)[_0x5271('0x1e')](0x0, ...),
            _0x292030,                    // ← key
            _0x384624[_0x5271('0xd6')]    // ← iv
        );
        _0x36a462 = _0x36a462[_0x5271('0x4a')](_0x3d4b22, _0xe83f49);
    });

    第三步:打断点(关键!)

    重要:断点要打在 forEach 或循环的外层,不要打在箭头函数内部

    在这行打断点:

    _0x3dc22f[_0x5271('0x47')]( (_0x3d4b22, _0x1e99f3) => {  // ← 点击行号打断点

    或者打在更外层的 if 语句:

    if (_0x3dc22f) {  // ← 也可以在这里打断点

    第四步:重新启用断点并触发解密

    1. F8 重新启用断点(按钮变回蓝色)
    2. 点击卡片翻转(Front → Back 或 Back → Front)
    3. 代码会在断点处暂停

    第五步:查看 Key 和 IV

    方法一:查看 Scope 面板(推荐)

    在右侧 Scope 面板中:

    1. 展开 Closure 部分(而不是 Local)
    2. 找到:
      • _0x292030这是 key
      • _0x384624 ← 展开这个对象,找到 iv 相关的值

    方法二:直接在 Console 查询

    在下方 Console 中输入:

    javascript

    _0x292030  // 查看 key
    _0x384624  // 查看包含 iv 的对象

    第六步:保存结果

    将找到的 keyiv 复制保存,格式通常是:

    • key: 一串字符串(如 "somekey123"
    • iv: 通常是 "12345679abcdefgj" 或类似字符串

    替代方法:使用 Logpoint(无需暂停)

    如果不想让代码暂停执行:

    1. 在断点位置右键行号 → 选择 “Add logpoint”
    2. 输入表达式

    javascript

    'Key:', _0x292030, 'IV:', _0x384624
    1. 点击翻转卡片
    2. Console 会直接打印出值,不会暂停执行

    快速参考

    步骤操作快捷键打开 DevTools开发者工具F12禁用/启用断点切换断点状态F8全局搜索搜索代码Ctrl+Shift+F打断点点击行号鼠标点击

    常见问题

    Q: 只看到箭头函数内的局部变量?
    A: 断点打错位置了,应该打在 forEach 外层,然后查看 Closure 作用域。

    Q: 页面一直刷新?
    A: 进入页面前先按 F8 禁用断点,进入后再启用。

    Q: 找不到 ≯# 符号?
    A: 尝试搜索 akDecryptdecrypt,找到调用这些函数的地方。

    Q: Scope 里没有想要的变量?
    A: 直接在 Console 输入变量名查看,或者展开 Closure 作用域。


    参考资料


    提示:找到 key 和 iv 后,可以使用解密脚本批量处理加密内容,具体使用方法参考上述 GitHub Gist。