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
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.
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
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 tokensAlways available to the agent
SKILL.md
1,105 tokensWhen the skill is activated
Reference documents
27,756 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Resolve the runtime
- Route the request
- Operational invariants
Scripts executed separately
appmsg.pyconfig.pycontacts.pycrypto.pydb.pye2e/check_consistency.pye2e/test_e2e.pymessage.pyscripts/common/crypto_backend.pyscripts/common/doctor.pyscripts/common/export_chat.pyscripts/common/export_media.pyscripts/common/media_manifest.pyscripts/common/migrate_private_state.pyscripts/common/query.pyscripts/common/read_doc.pyscripts/common/rebuild_from_factory.pyscripts/common/repair_factory.pyscripts/common/salvage_btree.pyscripts/common/salvage_export.pyscripts/common/salvage_rebuilt.pyscripts/common/sqlcipher_decrypt.pyscripts/common/transcribe_db.pyscripts/common/transcript_render.pyscripts/common/verify_key.pyscripts/common/voice_decode.pyscripts/common/wal_snapshot.pyscripts/legacy/extract_key.ps1scripts/legacy/extract_key_frida.ps1scripts/legacy/find_key.ps1scripts/legacy/find_rawkey_follow.pyscripts/legacy/find_rawkey_v2.pyscripts/legacy/find_rawkey_via_salt.pyscripts/legacy/frida_aob.pyscripts/legacy/frida_attach_main.pyscripts/legacy/frida_attach_race.pyscripts/legacy/frida_brute_k1.pyscripts/legacy/frida_brute_rpc.pyscripts/legacy/frida_diag_read.pyscripts/legacy/frida_disasm.pyscripts/legacy/frida_entry_listen.pyscripts/legacy/frida_entry_verify.pyscripts/legacy/frida_entry_verify_race.pyscripts/legacy/frida_enum_dll.pyscripts/legacy/frida_enum_modules.pyscripts/legacy/frida_find_sha512.pyscripts/legacy/frida_find_via_kdfiter.pyscripts/legacy/frida_follow_ptr.pyscripts/legacy/frida_hook_alloc.pyscripts/legacy/frida_hook_bcrypt.pyscripts/legacy/frida_hook_entry_race.pyscripts/legacy/frida_hook_pbkdf2.pyscripts/legacy/frida_hook_sha512.pyscripts/legacy/frida_hook_sha512_v2.pyscripts/legacy/frida_hook_test.pyscripts/legacy/frida_memwatch.pyscripts/legacy/frida_memwatch_attach.pyscripts/legacy/frida_probe.pyscripts/legacy/frida_probe2.pyscripts/legacy/frida_sha512_entry_schtask.pyscripts/legacy/frida_sha512_race.pyscripts/legacy/frida_spawn_antidbg.pyscripts/legacy/frida_spawn_hook.pyscripts/legacy/frida_xref.pyscripts/legacy/hook_sqlite3_key_win.jsscripts/legacy/transcribe.swiftscripts/legacy/transcribe_voice.shscripts/legacy/verify_keys.pyscripts/macos/extract_key.shscripts/macos/hook_pbkdf.jsscripts/windows/decrypt_all.pyscripts/windows/decrypt_read.pyscripts/windows/extract_raw_key.pyserver.pysetup.ps1setup.shtests/conftest.pytests/js/windows_extractor_harness.cjstests/test_app_messages.pytests/test_chat_list_pages.pytests/test_config.pytests/test_consistency_checker.pytests/test_contact_ambiguity.pytests/test_crypto.pytests/test_db_backend.pytests/test_doctor.pytests/test_export_safety.pytests/test_media_collisions.pytests/test_media_manifest.pytests/test_original_attachment_directory.pytests/test_query_shards.pytests/test_query_windows.pytests/test_search_completeness.pytests/test_search_streaming.pytests/test_sender_identity.pytests/test_sqlcipher_errors.pytests/test_state_migration.pytests/test_system_messages.pytests/test_text_preservation.pytests/test_transcribe_backend.pytests/test_wal_snapshot.pytests/test_windows_data_root.pytests/test_windows_extractor.pytests/test_windows_page_authentication.py
Files
.github/workflows/tests.ymlasset1,394 bytes.gitignoreasset205 bytesLICENSEasset1,065 bytesNOTES.mddoc1,116 bytesREADME.mddoc10,559 bytesREADME_ZH.mddoc9,928 bytesSKILL.mdcore4,778 bytesSKILL.mdcore4,778 bytesSKILL.mdcore4,778 bytesagents/openai.yamlasset197 bytesappmsg.pyruns12,860 bytesconfig.pyruns1,325 bytescontacts.example.jsonasset138 bytescontacts.pyruns4,454 bytescrypto.pyruns2,425 bytesdb.pyruns11,005 bytesdocs/2026-06-05-windows-keyextract-findings.mddoc5,458 bytesdocs/2026-06-05-windows-port-design.mddoc6,290 bytesdocs/2026-06-05-windows-port-plan.mddoc29,436 bytesdocs/2026-06-06-windows-raw-key-journey.mddoc12,165 bytesdocs/chat-list-pagination.mddoc649 bytesdocs/media-manifest-proposal.mddoc5,419 bytesdocs/windows-data-root.mddoc732 bytesdocs/windows-wal-snapshots.mddoc990 bytese2e/README.mddoc1,386 bytese2e/check_consistency.pyruns4,378 bytese2e/test_e2e.pyruns6,102 bytesmessage.pyruns10,896 bytespyproject.tomlasset375 bytesreferences/db-repair.mddoc4,722 bytesreferences/export-transcription.mddoc3,287 bytesreferences/macos.mddoc2,945 bytesreferences/windows.mddoc4,496 bytesrequirements-windows.txtdoc120 bytesscripts/common/crypto_backend.pyruns1,085 bytesscripts/common/doctor.pyruns11,941 bytesscripts/common/export_chat.pyruns13,149 bytesscripts/common/export_media.pyruns2,912 bytesscripts/common/media_manifest.pyruns12,485 bytesscripts/common/migrate_private_state.pyruns4,532 bytesscripts/common/query.pyruns25,926 bytesscripts/common/read_doc.pyruns7,498 bytesscripts/common/rebuild_from_factory.pyruns5,689 bytesscripts/common/repair_factory.pyruns4,690 bytesscripts/common/salvage_btree.pyruns6,454 bytesscripts/common/salvage_export.pyruns7,182 bytesscripts/common/salvage_rebuilt.pyruns5,749 bytesscripts/common/sqlcipher_decrypt.pyruns3,537 bytesscripts/common/transcribe_db.pyruns5,811 bytesscripts/common/transcript_render.pyruns2,267 bytesscripts/common/verify_key.pyruns1,894 bytesscripts/common/voice_decode.pyruns704 bytesscripts/common/wal_snapshot.pyruns4,102 bytesscripts/legacy/extract_key.ps1runs1,488 bytesscripts/legacy/extract_key_frida.ps1runs792 bytesscripts/legacy/find_key.ps1runs7,561 bytesscripts/legacy/find_rawkey_follow.pyruns2,281 bytesscripts/legacy/find_rawkey_v2.pyruns2,598 bytesscripts/legacy/find_rawkey_via_salt.pyruns2,389 bytesscripts/legacy/frida_aob.pyruns1,340 bytesscripts/legacy/frida_attach_main.pyruns2,852 bytesscripts/legacy/frida_attach_race.pyruns2,104 bytesscripts/legacy/frida_brute_k1.pyruns2,547 bytesscripts/legacy/frida_brute_rpc.pyruns2,454 bytesscripts/legacy/frida_diag_read.pyruns1,950 bytesscripts/legacy/frida_disasm.pyruns1,364 bytesscripts/legacy/frida_entry_listen.pyruns1,349 bytesscripts/legacy/frida_entry_verify.pyruns2,274 bytesscripts/legacy/frida_entry_verify_race.pyruns2,779 bytesscripts/legacy/frida_enum_dll.pyruns1,159 bytesscripts/legacy/frida_enum_modules.pyruns1,364 bytesscripts/legacy/frida_find_sha512.pyruns1,308 bytesscripts/legacy/frida_find_via_kdfiter.pyruns1,615 bytesscripts/legacy/frida_follow_ptr.pyruns2,264 bytesscripts/legacy/frida_hook_alloc.pyruns2,332 bytesscripts/legacy/frida_hook_bcrypt.pyruns2,339 bytesscripts/legacy/frida_hook_entry_race.pyruns2,354 bytesscripts/legacy/frida_hook_pbkdf2.pyruns1,491 bytesscripts/legacy/frida_hook_sha512.pyruns2,155 bytesscripts/legacy/frida_hook_sha512_v2.pyruns1,557 bytesscripts/legacy/frida_hook_test.pyruns1,077 bytesscripts/legacy/frida_memwatch.pyruns2,434 bytesscripts/legacy/frida_memwatch_attach.pyruns1,683 bytesscripts/legacy/frida_probe.pyruns1,581 bytesscripts/legacy/frida_probe2.pyruns1,943 bytesscripts/legacy/frida_sha512_entry_schtask.pyruns2,288 bytesscripts/legacy/frida_sha512_race.pyruns2,366 bytesscripts/legacy/frida_spawn_antidbg.pyruns2,584 bytesscripts/legacy/frida_spawn_hook.pyruns1,827 bytesscripts/legacy/frida_xref.pyruns1,904 bytesscripts/legacy/hook_sqlite3_key_win.jsruns1,049 bytesscripts/legacy/transcribe.swiftruns2,021 bytesscripts/legacy/transcribe_voice.shruns10,000 bytesscripts/legacy/verify_keys.pyruns952 bytesscripts/macos/extract_key.shruns2,359 bytesscripts/macos/hook_pbkdf.jsruns3,119 bytesscripts/windows/decrypt_all.pyruns5,063 bytesscripts/windows/decrypt_read.pyruns1,707 bytesscripts/windows/extract_raw_key.pyruns10,206 bytesserver.pyruns2,606 bytessetup.ps1runs4,607 bytessetup.shruns5,105 bytestests/conftest.pyruns2,225 bytestests/js/windows_extractor_harness.cjsruns4,180 bytestests/test_app_messages.pyruns9,936 bytestests/test_chat_list_pages.pyruns1,731 bytestests/test_config.pyruns812 bytestests/test_consistency_checker.pyruns446 bytestests/test_contact_ambiguity.pyruns3,892 bytestests/test_crypto.pyruns1,083 bytestests/test_db_backend.pyruns4,191 bytestests/test_doctor.pyruns2,754 bytestests/test_export_safety.pyruns722 bytestests/test_media_collisions.pyruns1,866 bytestests/test_media_manifest.pyruns14,364 bytestests/test_original_attachment_directory.pyruns2,412 bytestests/test_query_shards.pyruns3,203 bytestests/test_query_windows.pyruns1,308 bytestests/test_search_completeness.pyruns2,913 bytestests/test_search_streaming.pyruns2,284 bytestests/test_sender_identity.pyruns3,757 bytestests/test_sqlcipher_errors.pyruns1,463 bytestests/test_state_migration.pyruns1,894 bytestests/test_system_messages.pyruns6,438 bytestests/test_text_preservation.pyruns458 bytestests/test_transcribe_backend.pyruns2,430 bytestests/test_wal_snapshot.pyruns7,346 bytestests/test_windows_data_root.pyruns1,854 bytestests/test_windows_extractor.pyruns12,380 bytestests/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:
```bashView the complete source on GitHubSkills 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 shellAutomated 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:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 8 dangerous shell commandsin 6 files: scripts/macos/extract_key.sh:20 setup.sh:111 README.md:48 and 3 more
- 79 network referencesin 11 files: tests/test_app_messages.py:20 README.md:3 README_ZH.md:3 and 8 more
- 10 obfuscation signalsin 6 files: tests/test_system_messages.py:102 tests/test_media_manifest.py:14 tests/test_search_completeness.py:65 and 3 more
- No instruction overrides
- 104 executable scriptsin 104 files: appmsg.py:1 config.py:1 contacts.py:1 and 101 more
- 22 references to secretsin 12 files: scripts/common/doctor.py:233 scripts/common/export_chat.py:31 config.py:17 and 9 more
- No requests to vote in Hot
Show all 223 signals by file
.gitignore
- Access to secretsline 7
[Credential-related source omitted]
README.md
- Network accessline 3
[](https://github.com/tzwkb/wechat-decrypt/actions/workflows/tests.yml) - Network accessline 4
[](LICENSE) - Network accessline 5
[](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
[](https://github.com/tzwkb/wechat-decrypt/actions/workflows/tests.yml) - Network accessline 4
[](LICENSE) - Network accessline 5
[](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
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
e2e/test_e2e.py
- Executable scriptline 1
#!/usr/bin/env python3
message.py
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
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
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
scripts/legacy/extract_key.ps1
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
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
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
scripts/windows/decrypt_read.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/windows/extract_raw_key.py
server.py
- Executable scriptline 1
Executable file
setup.ps1
- Executable scriptline 1
Executable file
setup.sh
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>周杰伦 & 乐队</des>" "<sourcedisplayname>QQ音乐</sourcedisplayname>" "<dataurl>https://example.com/song?a=1&b=2</dataurl>" - Network accessline 21
"<sourcedisplayname>QQ音乐</sourcedisplayname>" "<dataurl>https://example.com/song?a=1&b=2</dataurl>" "<songalbumurl>https://example.com/cover.jpg</songalbumurl>", - Network accessline 22
"<dataurl>https://example.com/song?a=1&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> ' - Network accessline 283
import transcript_render line='<script>alert(1)</script> ' html=''.join(transcript_render.render('<header>',[(line,None)],'html')) - Network accessline 284
line='<script>alert(1)</script> '
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
tests/test_search_streaming.py
- Executable scriptline 1
Executable file
tests/test_sender_identity.py
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
- Network access in prose of documentationREADME.md:3Low confidence
- Network access in prose of documentationREADME.md:4Low confidence
- Network access in prose of documentationREADME.md:5Low confidence
- Network access in prose of documentationREADME.md:9Low confidence
- Dangerous shell operation in code of documentationREADME.md:48Low confidence
- Network access in prose of documentationREADME.md:151Low confidence
- Network access in prose of documentationREADME.md:153Low confidence
- Network access in prose of documentationREADME.md:154Low confidence
- Network access in prose of documentationREADME.md:155Low confidence
- Network access in prose of documentationREADME_ZH.md:3Low confidence
- Network access in prose of documentationREADME_ZH.md:4Low confidence
- Network access in prose of documentationREADME_ZH.md:5Low confidence
- Network access in prose of documentationREADME_ZH.md:9Low confidence
- Dangerous shell operation in code of documentationREADME_ZH.md:48Low confidence
- Network access in prose of documentationREADME_ZH.md:146Low confidence
- Network access in prose of documentationREADME_ZH.md:148Low confidence
- Network access in prose of documentationREADME_ZH.md:149Low confidence
- Network access in prose of documentationREADME_ZH.md:150Low confidence
- Executable script in prose of a file that runsappmsg.py:1Low confidence
- Executable script in prose of a file that runsconfig.py:1Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueconfig.py:17Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueconfig.py:33Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueconfig.py:34Low confidence
- Executable script in prose of a file that runscontacts.py:1Low confidence
- Executable script in prose of a file that runscrypto.py:1Low confidence
- Executable script in prose of a file that runsdb.py:1Low confidence
- Access to secrets in prose of documentation: reads a credential storedocs/2026-06-05-windows-keyextract-findings.md:80Low confidence
- Network access in prose of documentationdocs/2026-06-05-windows-keyextract-findings.md:82Low confidence
- Network access in prose of documentationdocs/2026-06-05-windows-keyextract-findings.md:83Low confidence
- Network access in prose of documentationdocs/2026-06-05-windows-keyextract-findings.md:84Low confidence
- Network access in code of documentationdocs/2026-06-05-windows-port-plan.md:549Low confidence
- Network access in code of documentationdocs/2026-06-05-windows-port-plan.md:550Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuedocs/2026-06-05-windows-port-plan.md:580Low confidence
- Network access in code of documentationdocs/2026-06-05-windows-port-plan.md:692Low confidence
- Network access in code of documentationdocs/2026-06-05-windows-port-plan.md:693Low confidence
- Network access in code of documentationdocs/2026-06-05-windows-port-plan.md:694Low confidence
- Access to secrets in prose of documentation: reads a credential storedocs/2026-06-06-windows-raw-key-journey.md:15Low confidence
- Network access in prose of documentationdocs/media-manifest-proposal.md:3Low confidence
- Executable script in code of a file that runse2e/check_consistency.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuee2e/check_consistency.py:60Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuee2e/check_consistency.py:125Low confidence
- Executable script in code of a teste2e/test_e2e.py:1Low confidence
- Executable script in prose of a file that runsmessage.py:1Low confidence
- Possible obfuscation in code of a file that runsmessage.py:80High confidence
- Dangerous shell operation in code of documentationreferences/macos.md:38Low confidence
- Executable script in code of a file that runsscripts/common/crypto_backend.py:1High confidence
- Executable script in code of a file that runsscripts/common/doctor.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/common/doctor.py:233Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/common/doctor.py:308Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/common/doctor.py:309Low confidence
and 172 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard 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.