Not in the top 1,000 by GitHub stars

freanocank/wechat-decrypt

Agent Skill — WeChat 4.x chat decrypt & query (macOS + Windows): MCP read/search, export, voice transcription.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

f0b3f9f95dda → f0b3f9f95dda

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → f0b3f9f95dda

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit f0b3f9f95dda2d954ee3dbe1d139fb1944a5ecfd

88GitHub stars
7stars in 7 days
1skill in this repository
35commits in 30 days

Heat

5.0
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 5, 202688

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

wechat-decrypt

When your agent uses it

Read, search, summarize, export, and transcribe a user's own local WeChat 4.x history on macOS or Windows; diagnose setup and re-extract the device key after a WeChat update. Use for WeChat messages, chats, contacts, and local archives. Do not use for remote accounts or devices the user is not authorized to access.

What it loads into context

Frontmatter

81 tokens

Always available to the agent

SKILL.md

1,105 tokens

When the skill is activated

Reference documents

27,756 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Resolve the runtime
  2. Route the request
  3. Operational invariants

Scripts executed separately

  • appmsg.py
  • config.py
  • contacts.py
  • crypto.py
  • db.py
  • e2e/check_consistency.py
  • e2e/test_e2e.py
  • message.py
  • scripts/common/crypto_backend.py
  • scripts/common/doctor.py
  • scripts/common/export_chat.py
  • scripts/common/export_media.py
  • scripts/common/media_manifest.py
  • scripts/common/migrate_private_state.py
  • scripts/common/query.py
  • scripts/common/read_doc.py
  • scripts/common/rebuild_from_factory.py
  • scripts/common/repair_factory.py
  • scripts/common/salvage_btree.py
  • scripts/common/salvage_export.py
  • scripts/common/salvage_rebuilt.py
  • scripts/common/sqlcipher_decrypt.py
  • scripts/common/transcribe_db.py
  • scripts/common/transcript_render.py
  • scripts/common/verify_key.py
  • scripts/common/voice_decode.py
  • scripts/common/wal_snapshot.py
  • scripts/legacy/extract_key.ps1
  • scripts/legacy/extract_key_frida.ps1
  • scripts/legacy/find_key.ps1
  • scripts/legacy/find_rawkey_follow.py
  • scripts/legacy/find_rawkey_v2.py
  • scripts/legacy/find_rawkey_via_salt.py
  • scripts/legacy/frida_aob.py
  • scripts/legacy/frida_attach_main.py
  • scripts/legacy/frida_attach_race.py
  • scripts/legacy/frida_brute_k1.py
  • scripts/legacy/frida_brute_rpc.py
  • scripts/legacy/frida_diag_read.py
  • scripts/legacy/frida_disasm.py
  • scripts/legacy/frida_entry_listen.py
  • scripts/legacy/frida_entry_verify.py
  • scripts/legacy/frida_entry_verify_race.py
  • scripts/legacy/frida_enum_dll.py
  • scripts/legacy/frida_enum_modules.py
  • scripts/legacy/frida_find_sha512.py
  • scripts/legacy/frida_find_via_kdfiter.py
  • scripts/legacy/frida_follow_ptr.py
  • scripts/legacy/frida_hook_alloc.py
  • scripts/legacy/frida_hook_bcrypt.py
  • scripts/legacy/frida_hook_entry_race.py
  • scripts/legacy/frida_hook_pbkdf2.py
  • scripts/legacy/frida_hook_sha512.py
  • scripts/legacy/frida_hook_sha512_v2.py
  • scripts/legacy/frida_hook_test.py
  • scripts/legacy/frida_memwatch.py
  • scripts/legacy/frida_memwatch_attach.py
  • scripts/legacy/frida_probe.py
  • scripts/legacy/frida_probe2.py
  • scripts/legacy/frida_sha512_entry_schtask.py
  • scripts/legacy/frida_sha512_race.py
  • scripts/legacy/frida_spawn_antidbg.py
  • scripts/legacy/frida_spawn_hook.py
  • scripts/legacy/frida_xref.py
  • scripts/legacy/hook_sqlite3_key_win.js
  • scripts/legacy/transcribe.swift
  • scripts/legacy/transcribe_voice.sh
  • scripts/legacy/verify_keys.py
  • scripts/macos/extract_key.sh
  • scripts/macos/hook_pbkdf.js
  • scripts/windows/decrypt_all.py
  • scripts/windows/decrypt_read.py
  • scripts/windows/extract_raw_key.py
  • server.py
  • setup.ps1
  • setup.sh
  • tests/conftest.py
  • tests/js/windows_extractor_harness.cjs
  • tests/test_app_messages.py
  • tests/test_chat_list_pages.py
  • tests/test_config.py
  • tests/test_consistency_checker.py
  • tests/test_contact_ambiguity.py
  • tests/test_crypto.py
  • tests/test_db_backend.py
  • tests/test_doctor.py
  • tests/test_export_safety.py
  • tests/test_media_collisions.py
  • tests/test_media_manifest.py
  • tests/test_original_attachment_directory.py
  • tests/test_query_shards.py
  • tests/test_query_windows.py
  • tests/test_search_completeness.py
  • tests/test_search_streaming.py
  • tests/test_sender_identity.py
  • tests/test_sqlcipher_errors.py
  • tests/test_state_migration.py
  • tests/test_system_messages.py
  • tests/test_text_preservation.py
  • tests/test_transcribe_backend.py
  • tests/test_wal_snapshot.py
  • tests/test_windows_data_root.py
  • tests/test_windows_extractor.py
  • tests/test_windows_page_authentication.py

Files

  • .github/workflows/tests.ymlasset1,394 bytes
  • .gitignoreasset205 bytes
  • LICENSEasset1,065 bytes
  • NOTES.mddoc1,116 bytes
  • README.mddoc10,559 bytes
  • README_ZH.mddoc9,928 bytes
  • SKILL.mdcore4,778 bytes
  • SKILL.mdcore4,778 bytes
  • SKILL.mdcore4,778 bytes
  • agents/openai.yamlasset197 bytes
  • appmsg.pyruns12,860 bytes
  • config.pyruns1,325 bytes
  • contacts.example.jsonasset138 bytes
  • contacts.pyruns4,454 bytes
  • crypto.pyruns2,425 bytes
  • db.pyruns11,005 bytes
  • docs/2026-06-05-windows-keyextract-findings.mddoc5,458 bytes
  • docs/2026-06-05-windows-port-design.mddoc6,290 bytes
  • docs/2026-06-05-windows-port-plan.mddoc29,436 bytes
  • docs/2026-06-06-windows-raw-key-journey.mddoc12,165 bytes
  • docs/chat-list-pagination.mddoc649 bytes
  • docs/media-manifest-proposal.mddoc5,419 bytes
  • docs/windows-data-root.mddoc732 bytes
  • docs/windows-wal-snapshots.mddoc990 bytes
  • e2e/README.mddoc1,386 bytes
  • e2e/check_consistency.pyruns4,378 bytes
  • e2e/test_e2e.pyruns6,102 bytes
  • message.pyruns10,896 bytes
  • pyproject.tomlasset375 bytes
  • references/db-repair.mddoc4,722 bytes
  • references/export-transcription.mddoc3,287 bytes
  • references/macos.mddoc2,945 bytes
  • references/windows.mddoc4,496 bytes
  • requirements-windows.txtdoc120 bytes
  • scripts/common/crypto_backend.pyruns1,085 bytes
  • scripts/common/doctor.pyruns11,941 bytes
  • scripts/common/export_chat.pyruns13,149 bytes
  • scripts/common/export_media.pyruns2,912 bytes
  • scripts/common/media_manifest.pyruns12,485 bytes
  • scripts/common/migrate_private_state.pyruns4,532 bytes
  • scripts/common/query.pyruns25,926 bytes
  • scripts/common/read_doc.pyruns7,498 bytes
  • scripts/common/rebuild_from_factory.pyruns5,689 bytes
  • scripts/common/repair_factory.pyruns4,690 bytes
  • scripts/common/salvage_btree.pyruns6,454 bytes
  • scripts/common/salvage_export.pyruns7,182 bytes
  • scripts/common/salvage_rebuilt.pyruns5,749 bytes
  • scripts/common/sqlcipher_decrypt.pyruns3,537 bytes
  • scripts/common/transcribe_db.pyruns5,811 bytes
  • scripts/common/transcript_render.pyruns2,267 bytes
  • scripts/common/verify_key.pyruns1,894 bytes
  • scripts/common/voice_decode.pyruns704 bytes
  • scripts/common/wal_snapshot.pyruns4,102 bytes
  • scripts/legacy/extract_key.ps1runs1,488 bytes
  • scripts/legacy/extract_key_frida.ps1runs792 bytes
  • scripts/legacy/find_key.ps1runs7,561 bytes
  • scripts/legacy/find_rawkey_follow.pyruns2,281 bytes
  • scripts/legacy/find_rawkey_v2.pyruns2,598 bytes
  • scripts/legacy/find_rawkey_via_salt.pyruns2,389 bytes
  • scripts/legacy/frida_aob.pyruns1,340 bytes
  • scripts/legacy/frida_attach_main.pyruns2,852 bytes
  • scripts/legacy/frida_attach_race.pyruns2,104 bytes
  • scripts/legacy/frida_brute_k1.pyruns2,547 bytes
  • scripts/legacy/frida_brute_rpc.pyruns2,454 bytes
  • scripts/legacy/frida_diag_read.pyruns1,950 bytes
  • scripts/legacy/frida_disasm.pyruns1,364 bytes
  • scripts/legacy/frida_entry_listen.pyruns1,349 bytes
  • scripts/legacy/frida_entry_verify.pyruns2,274 bytes
  • scripts/legacy/frida_entry_verify_race.pyruns2,779 bytes
  • scripts/legacy/frida_enum_dll.pyruns1,159 bytes
  • scripts/legacy/frida_enum_modules.pyruns1,364 bytes
  • scripts/legacy/frida_find_sha512.pyruns1,308 bytes
  • scripts/legacy/frida_find_via_kdfiter.pyruns1,615 bytes
  • scripts/legacy/frida_follow_ptr.pyruns2,264 bytes
  • scripts/legacy/frida_hook_alloc.pyruns2,332 bytes
  • scripts/legacy/frida_hook_bcrypt.pyruns2,339 bytes
  • scripts/legacy/frida_hook_entry_race.pyruns2,354 bytes
  • scripts/legacy/frida_hook_pbkdf2.pyruns1,491 bytes
  • scripts/legacy/frida_hook_sha512.pyruns2,155 bytes
  • scripts/legacy/frida_hook_sha512_v2.pyruns1,557 bytes
  • scripts/legacy/frida_hook_test.pyruns1,077 bytes
  • scripts/legacy/frida_memwatch.pyruns2,434 bytes
  • scripts/legacy/frida_memwatch_attach.pyruns1,683 bytes
  • scripts/legacy/frida_probe.pyruns1,581 bytes
  • scripts/legacy/frida_probe2.pyruns1,943 bytes
  • scripts/legacy/frida_sha512_entry_schtask.pyruns2,288 bytes
  • scripts/legacy/frida_sha512_race.pyruns2,366 bytes
  • scripts/legacy/frida_spawn_antidbg.pyruns2,584 bytes
  • scripts/legacy/frida_spawn_hook.pyruns1,827 bytes
  • scripts/legacy/frida_xref.pyruns1,904 bytes
  • scripts/legacy/hook_sqlite3_key_win.jsruns1,049 bytes
  • scripts/legacy/transcribe.swiftruns2,021 bytes
  • scripts/legacy/transcribe_voice.shruns10,000 bytes
  • scripts/legacy/verify_keys.pyruns952 bytes
  • scripts/macos/extract_key.shruns2,359 bytes
  • scripts/macos/hook_pbkdf.jsruns3,119 bytes
  • scripts/windows/decrypt_all.pyruns5,063 bytes
  • scripts/windows/decrypt_read.pyruns1,707 bytes
  • scripts/windows/extract_raw_key.pyruns10,206 bytes
  • server.pyruns2,606 bytes
  • setup.ps1runs4,607 bytes
  • setup.shruns5,105 bytes
  • tests/conftest.pyruns2,225 bytes
  • tests/js/windows_extractor_harness.cjsruns4,180 bytes
  • tests/test_app_messages.pyruns9,936 bytes
  • tests/test_chat_list_pages.pyruns1,731 bytes
  • tests/test_config.pyruns812 bytes
  • tests/test_consistency_checker.pyruns446 bytes
  • tests/test_contact_ambiguity.pyruns3,892 bytes
  • tests/test_crypto.pyruns1,083 bytes
  • tests/test_db_backend.pyruns4,191 bytes
  • tests/test_doctor.pyruns2,754 bytes
  • tests/test_export_safety.pyruns722 bytes
  • tests/test_media_collisions.pyruns1,866 bytes
  • tests/test_media_manifest.pyruns14,364 bytes
  • tests/test_original_attachment_directory.pyruns2,412 bytes
  • tests/test_query_shards.pyruns3,203 bytes
  • tests/test_query_windows.pyruns1,308 bytes
  • tests/test_search_completeness.pyruns2,913 bytes
  • tests/test_search_streaming.pyruns2,284 bytes
  • tests/test_sender_identity.pyruns3,757 bytes
  • tests/test_sqlcipher_errors.pyruns1,463 bytes
  • tests/test_state_migration.pyruns1,894 bytes
  • tests/test_system_messages.pyruns6,438 bytes
  • tests/test_text_preservation.pyruns458 bytes
  • tests/test_transcribe_backend.pyruns2,430 bytes
  • tests/test_wal_snapshot.pyruns7,346 bytes
  • tests/test_windows_data_root.pyruns1,854 bytes
  • tests/test_windows_extractor.pyruns12,380 bytes
  • tests/test_windows_page_authentication.pyruns3,213 bytes
Read SKILL.md

# WeChat local history

Operate only on local WeChat data the user is authorized to access. Keep keys, decrypted databases, voice caches, and exports local. Never print a raw key or include one in chat, logs, commands, or reports.

## Resolve the runtime

Use the directory containing this `SKILL.md` as `SKILL_DIR`; never assume a fixed installation path.

- macOS: prefer `$SKILL_DIR/.venv/bin/python`, otherwise `python3`.
- Windows: prefer `$SKILL_DIR\.venv\Scripts\python.exe`, otherwise `python`.

Before reading chat data, run the read-only diagnostic:

```bash
View the complete source on GitHub

Skills included

  • wechat-decrypt

Repository facts

License
MIT
Created
Jun 5, 2026
Last pushed
Oct 14, 2026
Forks
44
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 2 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 223 signals by file

.gitignore

  • Access to secretsline 7
    [Credential-related source omitted]

README.md

  • Network accessline 3
    [![tests](https://github.com/tzwkb/wechat-decrypt/actions/workflows/tests.yml/badge.svg)](https://github.com/tzwkb/wechat-decrypt/actions/workflows/tests.yml)
  • Network accessline 4
    [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
  • Network accessline 5
    [![Python](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/)
  • Network accessline 9
    A local-first [Codex Skill](https://developers.openai.com/codex/skills) for reading, searching, summarizing, exporting, and transcribing WeChat 4.x history on macOS and Windows. The command-line core also works without MCP; the bundled serv
  • Dangerous shell operationline 48
    sudo codesign --force --deep --sign - /Applications/WeChat.app
  • Network accessline 151
    Thanks to all [code contributors](https://github.com/tzwkb/wechat-decrypt/graphs/contributors) and everyone who helps through issue reports and design proposals. Contributions include:
  • Network accessline 153
    - [@Allen-CDA](https://github.com/Allen-CDA) diagnosed the Windows WeChat 4.1.12.55 key-extraction failure and provided multi-entry SHA-512 hook and process-detection improvement suggestions ([#1](https://github.com/tzwkb/wechat-decrypt/iss
  • Network accessline 154
    - [@Lee-Juntong](https://github.com/Lee-Juntong) contributed complete-text preservation, query validation and streaming, chat-list pagination, relocated Windows data and attachment paths, SQLCipher page authentication, and committed-WAL sna
  • Network accessline 155
    - [@ShiTan-677](https://github.com/ShiTan-677) contributed per-shard sender resolution, unambiguous contact selection, and collision-safe attachment export ([#3](https://github.com/tzwkb/wechat-decrypt/pull/3), [#4](https://github.com/tzwkb

README_ZH.md

  • Network accessline 3
    [![tests](https://github.com/tzwkb/wechat-decrypt/actions/workflows/tests.yml/badge.svg)](https://github.com/tzwkb/wechat-decrypt/actions/workflows/tests.yml)
  • Network accessline 4
    [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
  • Network accessline 5
    [![Python](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/)
  • Network accessline 9
    一个本地优先的 [Codex Skill](https://developers.openai.com/codex/skills):在 macOS 和 Windows 上读取、搜索、总结、导出并转写 WeChat 4.x 聊天记录。命令行核心不依赖 MCP;随附服务提供可选的 [Codex MCP](https://developers.openai.com/codex/mcp) 门面。
  • Dangerous shell operationline 48
    sudo codesign --force --deep --sign - /Applications/WeChat.app
  • Network accessline 146
    感谢所有[代码贡献者](https://github.com/tzwkb/wechat-decrypt/graphs/contributors),也感谢通过问题报告和方案建议帮助改进项目的贡献者。具体贡献包括:
  • Network accessline 148
    - [@Allen-CDA](https://github.com/Allen-CDA):诊断 Windows 微信 4.1.12.55 密钥提取失败问题,并提供多 SHA-512 入口挂钩与进程检测优化建议([#1](https://github.com/tzwkb/wechat-decrypt/issues/1))。
  • Network accessline 149
    - [@Lee-Juntong](https://github.com/Lee-Juntong):贡献完整文本保留、查询参数校验与流式读取、会话列表分页、Windows 自定义数据目录与附件定位、SQLCipher 逐页认证及已提交 WAL 快照支持([#7](https://github.com/tzwkb/wechat-decrypt/pull/7)、[#8](https://github.com/tzwkb/wechat-decrypt/pull/8)、[#9](htt
  • Network accessline 150
    - [@ShiTan-677](https://github.com/ShiTan-677):贡献按数据库分片解析发送者、联系人唯一匹配与附件导出防覆盖修复([#3](https://github.com/tzwkb/wechat-decrypt/pull/3)、[#4](https://github.com/tzwkb/wechat-decrypt/pull/4)、[#5](https://github.com/tzwkb/wechat-decrypt/pull/5)),并

appmsg.py

  • Executable scriptline 1
    Executable file

config.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 33
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]

contacts.py

  • Executable scriptline 1
    Executable file

crypto.py

  • Executable scriptline 1
    Executable file

db.py

  • Executable scriptline 1
    Executable file

docs/2026-06-05-windows-keyextract-findings.md

  • Access to secretsline 80
    [Credential-related source omitted]
  • Network accessline 82
    - **frida spawn 在 ARM 模拟 x64 进程不兼容**(微信卡死 1 进程);**attach 可**。 - **frida 17 API 大变**: `Module.findGlobalExportByName(name)`、`frida.get_local_device().enumerate_processes()`(旧 `Module.findExportByName`/`frida.enumerate_processes` 已删)。 - 装 fri
  • Network accessline 83
    - **frida 17 API 大变**: `Module.findGlobalExportByName(name)`、`frida.get_local_device().enumerate_processes()`(旧 `Module.findExportByName`/`frida.enumerate_processes` 已删)。 - 装 frida 用清华镜像(PyPI 直连 ConnectionReset): `pip install -i https://pyp
  • Network accessline 84
    - 装 frida 用清华镜像(PyPI 直连 ConnectionReset): `pip install -i https://pypi.tuna.tsinghua.edu.cn/simple frida-tools`。

docs/2026-06-05-windows-port-plan.md

  • Network accessline 549
    if (-not (Test-Path $DUMP)) {     Write-Error "缺少 $DUMP —— 从 https://github.com/0xlane/wechat-dump-rs/releases 下载放此处"
  • Network accessline 550
    Write-Error "缺少 $DUMP —— 从 https://github.com/0xlane/wechat-dump-rs/releases 下载放此处"
  • Access to secretsline 580
    [Credential-related source omitted]
  • Network accessline 692
    if (-not (Test-Path $DUMP)) {     Write-Host "[2/4] 缺少 wechat-dump-rs.exe"     Write-Host "  下载: https://github.com/0xlane/wechat-dump-rs/releases -> 放到 $DUMP"
  • Network accessline 693
    Write-Host "[2/4] 缺少 wechat-dump-rs.exe"     Write-Host "  下载: https://github.com/0xlane/wechat-dump-rs/releases -> 放到 $DUMP" } else {
  • Network accessline 694
    Write-Host "  下载: https://github.com/0xlane/wechat-dump-rs/releases -> 放到 $DUMP"

docs/2026-06-06-windows-raw-key-journey.md

  • Access to secretsline 15
    [Credential-related source omitted]

docs/media-manifest-proposal.md

  • Network accessline 3
    Implemented for [issue #6](https://github.com/tzwkb/wechat-decrypt/issues/6).

e2e/check_consistency.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 60
    [Credential-related source omitted]
  • Access to secretsline 125
    [Credential-related source omitted]

e2e/test_e2e.py

  • Executable scriptline 1
    #!/usr/bin/env python3

message.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 80
    _ZSTD_MAGIC = b"\x28\xb5\x2f\xfd"

references/macos.md

  • Dangerous shell operationline 38
    sudo codesign --force --deep --sign - /Applications/WeChat.app

scripts/common/crypto_backend.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/doctor.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 233
    [Credential-related source omitted]
  • Access to secretsline 308
    [Credential-related source omitted]
  • Access to secretsline 309
    [Credential-related source omitted]
  • Access to secretsline 311
    [Credential-related source omitted]

scripts/common/export_chat.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 31
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 33
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Network accessline 70
    def fetch(table, db_paths, since_dt, until_dt):
  • Network accessline 113
    # Determine speaker label (is_me + sender_wxid resolved per-DB in fetch())
  • Network accessline 238
    all_rows = fetch(table, db_paths, start_dt, end_dt)

scripts/common/export_media.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/media_manifest.py

  • Executable scriptline 1
    Executable file

scripts/common/migrate_private_state.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/query.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/read_doc.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/rebuild_from_factory.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Possible obfuscationline 70
    if len(wal) < 32 or wal[:4] != b"\x37\x7f\x06\x82":

scripts/common/repair_factory.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/salvage_btree.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/salvage_export.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/salvage_rebuilt.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 80
    for table in msg_tables:         wxid = name2id.get(table, table)         rows = ec.fetch(table, [src], since, until)
  • Network accessline 81
    wxid = name2id.get(table, table)         rows = ec.fetch(table, [src], since, until)         if not rows:
  • Network accessline 82
    rows = ec.fetch(table, [src], since, until)

scripts/common/sqlcipher_decrypt.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/transcribe_db.py

  • Executable scriptline 1
    Executable file

scripts/common/transcript_render.py

  • Executable scriptline 1
    Executable file

scripts/common/verify_key.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/common/voice_decode.py

  • Executable scriptline 1
    Executable file

scripts/common/wal_snapshot.py

  • Executable scriptline 1
    Executable file
  • Network accessline 3
    The page payload is opaque: this works before SQLCipher page decryption. Format reference: https://www.sqlite.org/fileformat2.html#wal_file_format
  • Network accessline 4
    Format reference: https://www.sqlite.org/fileformat2.html#wal_file_format

scripts/legacy/extract_key.ps1

  • Executable scriptline 1
    Executable file
  • Network accessline 8
    if (-not (Test-Path $DUMP)) {     Write-Error "缺少 $DUMP —— 从 https://github.com/0xlane/wechat-dump-rs/releases 下载放此处"
  • Network accessline 9
    Write-Error "缺少 $DUMP —— 从 https://github.com/0xlane/wechat-dump-rs/releases 下载放此处"

scripts/legacy/extract_key_frida.ps1

  • Executable scriptline 1
    Executable file

scripts/legacy/find_key.ps1

  • Executable scriptline 1
    Executable file

scripts/legacy/find_rawkey_follow.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/find_rawkey_v2.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/find_rawkey_via_salt.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_aob.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_attach_main.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_attach_race.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_brute_k1.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_brute_rpc.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_diag_read.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_disasm.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_entry_listen.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_entry_verify.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_entry_verify_race.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_enum_dll.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_enum_modules.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 3
    [Credential-related source omitted]

scripts/legacy/frida_find_sha512.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_find_via_kdfiter.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_follow_ptr.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_hook_alloc.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_hook_bcrypt.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_hook_entry_race.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_hook_pbkdf2.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_hook_sha512.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_hook_sha512_v2.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_hook_test.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_memwatch.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_memwatch_attach.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_probe.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_probe2.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_sha512_entry_schtask.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_sha512_race.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_spawn_antidbg.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_spawn_hook.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/frida_xref.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/legacy/hook_sqlite3_key_win.js

  • Executable scriptline 1
    Executable file

scripts/legacy/transcribe.swift

  • Executable scriptline 1
    #!/usr/bin/env swift

scripts/legacy/transcribe_voice.sh

  • Executable scriptline 1
    #!/bin/bash
  • Dangerous shell operationline 313
    trap "rm -rf $WORK_DIR" EXIT

scripts/legacy/verify_keys.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/macos/extract_key.sh

  • Executable scriptline 1
    #!/bin/bash
  • Dangerous shell operationline 20
    rm -f "$FRIDA_OUT"
  • Access to secretsline 52
    [Credential-related source omitted]
  • Dangerous shell operationline 58
    echo "  1. sudo codesign --force --deep --sign - /Applications/WeChat.app"
  • Access to secretsline 67
    [Credential-related source omitted]

scripts/macos/hook_pbkdf.js

  • Executable scriptline 1
    Executable file

scripts/windows/decrypt_all.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 78
    [Credential-related source omitted]

scripts/windows/decrypt_read.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/windows/extract_raw_key.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 227
    [Credential-related source omitted]

server.py

  • Executable scriptline 1
    Executable file

setup.ps1

  • Executable scriptline 1
    Executable file

setup.sh

  • Executable scriptline 1
    #!/bin/bash
  • Dangerous shell operationline 111
    rm "$USER_SKILL_DIR"
  • Dangerous shell operationline 141
    echo "  1. sudo codesign --force --deep --sign - /Applications/WeChat.app"

tests/conftest.py

  • Executable scriptline 1
    Executable file

tests/js/windows_extractor_harness.cjs

  • Executable scriptline 1
    Executable file

tests/test_app_messages.py

  • Executable scriptline 1
    Executable file
  • Network accessline 20
    "<des>周杰伦 &amp; 乐队</des>"         "<sourcedisplayname>QQ音乐</sourcedisplayname>"         "<dataurl>https://example.com/song?a=1&amp;b=2</dataurl>"
  • Network accessline 21
    "<sourcedisplayname>QQ音乐</sourcedisplayname>"         "<dataurl>https://example.com/song?a=1&amp;b=2</dataurl>"         "<songalbumurl>https://example.com/cover.jpg</songalbumurl>",
  • Network accessline 22
    "<dataurl>https://example.com/song?a=1&amp;b=2</dataurl>"
  • Network accessline 23
    "<songalbumurl>https://example.com/cover.jpg</songalbumurl>",
  • Network accessline 31
    assert parsed["artist"] == "周杰伦 & 乐队"     assert parsed["source"] == "QQ音乐"     assert parsed["url"] == "https://example.com/song?a=1&b=2"
  • Network accessline 32
    assert parsed["source"] == "QQ音乐"     assert parsed["url"] == "https://example.com/song?a=1&b=2"     assert "夜曲 & Live" in parsed["summary"]
  • Network accessline 33
    assert parsed["url"] == "https://example.com/song?a=1&b=2"
  • Network accessline 43
    "<title><![CDATA[演示视频]]></title>"         "<des><![CDATA[两分钟介绍]]></des>"         "<url><![CDATA[https://example.com/video]]></url>",
  • Network accessline 44
    "<des><![CDATA[两分钟介绍]]></des>"         "<url><![CDATA[https://example.com/video]]></url>",     )
  • Network accessline 45
    "<url><![CDATA[https://example.com/video]]></url>",
  • Network accessline 53
    malformed = (         "<msg><appmsg><type>4</type><title><![CDATA[仍可读取]]></title>"         "<url>https://example.com/video?x=1&y=2</url></appmsg></msg>"
  • Network accessline 54
    "<msg><appmsg><type>4</type><title><![CDATA[仍可读取]]></title>"         "<url>https://example.com/video?x=1&y=2</url></appmsg></msg>"     )
  • Network accessline 55
    "<url>https://example.com/video?x=1&y=2</url></appmsg></msg>"
  • Network accessline 57
    fallback = appmsg.parse_app_message(malformed, _local_type(4))     assert fallback["title"] == "仍可读取"     assert fallback["url"] == "https://example.com/video?x=1&y=2"
  • Network accessline 59
    assert fallback["url"] == "https://example.com/video?x=1&y=2"
  • Network accessline 72
    "<objectId>12345</objectId>"         "<objectNonceId>nonce-1</objectNonceId>"         "<mediaList><media><url>https://example.com/finder.mp4</url>"
  • Network accessline 73
    "<objectNonceId>nonce-1</objectNonceId>"         "<mediaList><media><url>https://example.com/finder.mp4</url>"         "<coverUrl>https://example.com/finder.jpg</coverUrl></media></mediaList>"
  • Network accessline 74
    "<mediaList><media><url>https://example.com/finder.mp4</url>"
  • Network accessline 75
    "<coverUrl>https://example.com/finder.jpg</coverUrl></media></mediaList>"
  • Network accessline 86
    assert parsed["object_id"] == "12345"     assert parsed["object_nonce_id"] == "nonce-1"     assert parsed["url"] == "https://example.com/finder.mp4"
  • Network accessline 87
    assert parsed["object_nonce_id"] == "nonce-1"     assert parsed["url"] == "https://example.com/finder.mp4"     assert parsed["thumb_url"] == "https://example.com/finder.jpg"
  • Network accessline 88
    assert parsed["url"] == "https://example.com/finder.mp4"
  • Network accessline 89
    assert parsed["thumb_url"] == "https://example.com/finder.jpg"
  • Network accessline 98
    "<finderLive><nickname>直播间</nickname><desc>新品发布</desc>"             "<finderUsername>host</finderUsername><liveId>888</liveId>"             "<coverUrl>https://example.com/live.jpg</coverUrl></finderLive>",
  • Network accessline 99
    "<finderUsername>host</finderUsername><liveId>888</liveId>"             "<coverUrl>https://example.com/live.jpg</coverUrl></finderLive>",         ),
  • Network accessline 100
    "<coverUrl>https://example.com/live.jpg</coverUrl></finderLive>",
  • Network accessline 114
    "<weappinfo><username>gh_demo@app</username><appid>wx123</appid>"             "<pagepath>pages/menu</pagepath>"             "<weappiconurl>https://example.com/icon.png</weappiconurl></weappinfo>",
  • Network accessline 115
    "<pagepath>pages/menu</pagepath>"             "<weappiconurl>https://example.com/icon.png</weappiconurl></weappinfo>",         ),
  • Network accessline 116
    "<weappiconurl>https://example.com/icon.png</weappiconurl></weappinfo>",
  • Network accessline 138
    999,             "<title>新型卡片</title><des>未来格式</des>"             "<url>https://example.com/future</url>",
  • Network accessline 139
    "<title>新型卡片</title><des>未来格式</des>"             "<url>https://example.com/future</url>",         ),
  • Network accessline 140
    "<url>https://example.com/future</url>",
  • Network accessline 145
    assert unknown["label"] == "分享卡片"     assert "新型卡片" in unknown["summary"]     assert "https://example.com/future" in unknown["summary"]
  • Network accessline 147
    assert "https://example.com/future" in unknown["summary"]
  • Network accessline 188
    3,         "<title><![CDATA[测试歌曲]]></title><des>测试歌手</des>"         "<dataurl>https://example.com/song</dataurl>",
  • Network accessline 189
    "<title><![CDATA[测试歌曲]]></title><des>测试歌手</des>"         "<dataurl>https://example.com/song</dataurl>",     )
  • Network accessline 190
    "<dataurl>https://example.com/song</dataurl>",
  • Network accessline 208
    assert "[音乐分享] 测试歌曲" in exported     assert "测试歌手" in exported     assert "https://example.com/song" in exported
  • Network accessline 210
    assert "https://example.com/song" in exported

tests/test_chat_list_pages.py

  • Executable scriptline 1
    Executable file

tests/test_config.py

  • Executable scriptline 1
    Executable file

tests/test_consistency_checker.py

  • Executable scriptline 1
    Executable file

tests/test_contact_ambiguity.py

  • Executable scriptline 1
    Executable file

tests/test_crypto.py

  • Executable scriptline 1
    Executable file

tests/test_db_backend.py

  • Executable scriptline 1
    Executable file

tests/test_doctor.py

  • Executable scriptline 1
    Executable file

tests/test_export_safety.py

  • Executable scriptline 1
    Executable file

tests/test_media_collisions.py

  • Executable scriptline 1
    Executable file

tests/test_media_manifest.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 14
    PNG = base64.b64decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+aK1sAAAAASUVORK5CYII=')
  • Possible obfuscationline 19
    return b'\x12\x22\x0a\x20' + identifier.encode()
  • Network accessline 62
    return {'_db': str(storage / 'message' / shard), 'local_id': local_id,                     'server_id': server_id, 'create_time': stamp, 'local_type': 3,                     'msg_hex': ('<msg><img md5="' + 'f'*32 + '" aeskey="SECRET" cdnurl
  • Network accessline 64
    'msg_hex': ('<msg><img md5="' + 'f'*32 + '" aeskey="SECRET" cdnurl="https://example.invalid/private"/></msg>').encode().hex()}, location
  • Network accessline 282
    def test_html_and_markdown_do_not_interpret_message_markup():     import transcript_render     line='<script>alert(1)</script> ![remote](https://example.invalid/pixel)'
  • Network accessline 283
    import transcript_render     line='<script>alert(1)</script> ![remote](https://example.invalid/pixel)'     html=''.join(transcript_render.render('<header>',[(line,None)],'html'))
  • Network accessline 284
    line='<script>alert(1)</script> ![remote](https://example.invalid/pixel)'

tests/test_original_attachment_directory.py

  • Executable scriptline 1
    Executable file

tests/test_query_shards.py

  • Executable scriptline 1
    Executable file

tests/test_query_windows.py

  • Executable scriptline 1
    Executable file

tests/test_search_completeness.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 65
    blob = b"\x28\xb5\x2f\xfd" + b"\x00" * 24
  • Possible obfuscationline 91
    blob = b"\x28\xb5\x2f\xfd" + b"\x00" * 8

tests/test_search_streaming.py

  • Executable scriptline 1
    Executable file

tests/test_sender_identity.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 48
    (b'\x28\xb5\x2f\xfd' + b'\x00' * 8,))

tests/test_sqlcipher_errors.py

  • Executable scriptline 1
    Executable file

tests/test_state_migration.py

  • Executable scriptline 1
    Executable file

tests/test_system_messages.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 102
    blob = b"\x28\xb5\x2f\xfd" + b"\x00" * 6 + content.encode() + b"\x01\x00tail"
  • Possible obfuscationline 134
    blob = b"\x28\xb5\x2f\xfd" + b"\x00" * 6 + content.encode() + b"\x01\x00tail"
  • Possible obfuscationline 151
    pat_blob = b"\x28\xb5\x2f\xfd" + b"\x00" * 6 + pat_content.encode() + b"\x01\x00"

tests/test_text_preservation.py

  • Executable scriptline 1
    Executable file

tests/test_transcribe_backend.py

  • Executable scriptline 1
    Executable file

tests/test_wal_snapshot.py

  • Executable scriptline 1
    Executable file

tests/test_windows_data_root.py

  • Executable scriptline 1
    Executable file

tests/test_windows_extractor.py

  • Executable scriptline 1
    Executable file

tests/test_windows_page_authentication.py

  • Executable scriptline 1
    Executable file

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 222 facts

and 172 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.