Come and join us, we need you!
This report summarizes scanner evidence for ctf-wiki/ctf-wiki, a Python project with 9,745 GitHub stars. SynthScan examined 157,958 lines of code across 794 source files, recording 135 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 0.9 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 89 finding(s).
Are imports declared and package/API names verified? 2 finding(s).
Are wrappers, guards, and repeated structures necessary? 45 finding(s).
Which changes need focused human review? 135 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 135 distinct pattern matches across 5 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/zh/docs/executable/pe/pe-excutable.md | 161 | #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 // 表示文件不包含重定位信息,只能在原定的基址加载。如果原定基址不可用,加载器会报出错误 | COMMENT |
| LOW | docs/zh/docs/executable/pe/pe-excutable.md | 261 | ```c | COMMENT |
| LOW | docs/zh/docs/executable/pe/pe-excutable.md | 281 | // DLL 属性标志 | COMMENT |
| LOW | docs/zh/docs/executable/pe/pe-excutable.md | 381 | #define IMAGE_SCN_ALIGN_2BYTES 0x00200000 // 2-byte 对齐。仅用于目标文件 | COMMENT |
| LOW | docs/zh/docs/executable/elf/linking/symbol-resolve.md | 221 | #define D_PTR(map, i) (map)->i->d_un.d_ptr | COMMENT |
| LOW | docs/zh/docs/crypto/hash/complex.md | 361 | COMMENT | |
| LOW | docs/zh/docs/reverse/tools/static-analyze/ghidra.md | 1 | # Ghidra | COMMENT |
| LOW | docs/zh/docs/reverse/tools/static-analyze/jadx.md | 1 | # jadx | COMMENT |
| LOW | docs/zh/docs/reverse/tools/debug/gdb.md | 1 | # gdb | COMMENT |
| LOW | docs/zh/docs/reverse/tools/debug/ollydbg.md | 1 | # ollydbg | COMMENT |
| LOW | docs/zh/docs/reverse/tools/debug/xdbg.md | 1 | # x64dbg/x32dbg | COMMENT |
| LOW | docs/zh/docs/reverse/tools/debug/windbg.md | 1 | # windbg | COMMENT |
| LOW | docs/zh/docs/reverse/language/go/introduction.md | 1 | # Golang 逆向入门 | COMMENT |
| LOW | docs/zh/docs/reverse/language/python/introduction.md | 1 | # Python 逆向入门 | COMMENT |
| LOW | docs/zh/docs/reverse/language/rust/introduction.md | 1 | # Rust 逆向入门 | COMMENT |
| LOW | …s/android/basic_operating_mechanism/native_layer/so.md | 141 | COMMENT | |
| LOW | docs/zh/docs/pwn/macos/readme.md | 1 | # MacOS | COMMENT |
| LOW | docs/zh/docs/pwn/virtualization/parallels/readmd.md | 1 | # Parallels | COMMENT |
| LOW | docs/zh/docs/pwn/virtualization/virtualbox/readme.md | 1 | # VirtualBox | COMMENT |
| LOW | docs/zh/docs/pwn/virtualization/vmware/readme.md | 1 | # VMWare | COMMENT |
| LOW | docs/zh/docs/pwn/browser/firefox/readme.md | 1 | # Firefox | COMMENT |
| LOW | docs/zh/docs/pwn/browser/safari/readme.md | 1 | # Safari | COMMENT |
| LOW | docs/zh/docs/pwn/sandbox/docker/readme.md | 1 | # Docker | COMMENT |
| LOW | docs/zh/docs/pwn/sandbox/shell/readme.md | 1 | # Shell Sandbox | COMMENT |
| LOW | docs/zh/docs/pwn/sandbox/namespace/readme.md | 1 | # Namespace | COMMENT |
| LOW | docs/zh/docs/pwn/sandbox/chroot/readme.md | 1 | # Chroot | COMMENT |
| LOW | …ocs/pwn/linux/user-mode/uninitialized-memory/readme.md | 1 | # Uninitialized Memory | COMMENT |
| LOW | …ocs/pwn/linux/user-mode/stackoverflow/risc-v/readme.md | 1 | # RISC-V | COMMENT |
| LOW | …/zh/docs/pwn/linux/user-mode/stackoverflow/mips/rop.md | 261 | 最后的 exploit | COMMENT |
| LOW | …/zh/docs/pwn/linux/user-mode/stackoverflow/mips/rop.md | 281 | #.text:000B2F0C jr $ra | COMMENT |
| LOW | …r-mode/stackoverflow/x86/advanced-rop/ret2dlresolve.md | 2261 | rop.raw("a"*(256-len(rop.chain()))) | COMMENT |
| LOW | …s/zh/docs/pwn/linux/user-mode/type-confusion/readme.md | 1 | # Type Confusion | COMMENT |
| LOW | …ocs/pwn/linux/kernel-mode/exploitation/introduction.md | 101 | #include <unistd.h> | COMMENT |
| LOW | …s/pwn/linux/kernel-mode/exploitation/rop/ret2ptregs.md | 321 | * This work is licensed under the terms of the GNU GPL, version 2 or later. | COMMENT |
| LOW | …/linux/kernel-mode/exploitation/heap/buddy/page-uaf.md | 401 | #include <unistd.h> | COMMENT |
| LOW | …/linux/kernel-mode/exploitation/heap/buddy/page-uaf.md | 421 | #define log_error(msg) puts(ERROR_MSG(msg)) | COMMENT |
| LOW | …/linux/kernel-mode/exploitation/heap/buddy/page-uaf.md | 1381 | COMMENT | |
| LOW | …l-mode/exploitation/heap/buddy/cross-cache-overflow.md | 341 | #define _GNU_SOURCE | COMMENT |
| LOW | …kernel-mode/exploitation/heap/buddy/cross-cache-uaf.md | 141 | #define _GNU_SOURCE | COMMENT |
| LOW | …cs/pwn/linux/kernel-mode/exploitation/heap/slub/uaf.md | 221 | #include <stdlib.h> | COMMENT |
| LOW | …pwn/linux/kernel-mode/exploitation/race/userfaultfd.md | 221 | COMMENT | |
| LOW | …pwn/linux/kernel-mode/exploitation/tricks/initramfs.md | 141 | 该操作**是完全处在内核中的操作**,因此不会触发 hardened usercopy 的检查,我们只需要在父进程中设定好搜索的地址之后再开子进程来用 read\_ldt() 读取数据即可。 | COMMENT |
| LOW | …ux/kernel-mode/exploitation/tricks/out-of-mem-shell.md | 81 | COMMENT | |
| LOW | docs/zh-tw/docs/executable/pe/pe-excutable.md | 161 | #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 // 表示文件不包含重定位信息,只能在原定的基址加載。如果原定基址不可用,加載器會報出錯誤 | COMMENT |
| LOW | docs/zh-tw/docs/executable/pe/pe-excutable.md | 261 | ```c | COMMENT |
| LOW | docs/zh-tw/docs/executable/pe/pe-excutable.md | 281 | // DLL 屬性標誌 | COMMENT |
| LOW | docs/zh-tw/docs/executable/pe/pe-excutable.md | 381 | #define IMAGE_SCN_ALIGN_2BYTES 0x00200000 // 2-byte 對齊。僅用於目標文件 | COMMENT |
| LOW | …cs/zh-tw/docs/executable/elf/linking/symbol-resolve.md | 221 | #define D_PTR(map, i) (map)->i->d_un.d_ptr | COMMENT |
| LOW | docs/zh-tw/docs/crypto/hash/complex.md | 361 | COMMENT | |
| LOW | docs/zh-tw/docs/reverse/tools/static-analyze/ghidra.md | 1 | # Ghidra | COMMENT |
| LOW | docs/zh-tw/docs/reverse/tools/static-analyze/jadx.md | 1 | # jadx | COMMENT |
| LOW | docs/zh-tw/docs/reverse/tools/debug/gdb.md | 1 | # gdb | COMMENT |
| LOW | docs/zh-tw/docs/reverse/tools/debug/ollydbg.md | 1 | # ollydbg | COMMENT |
| LOW | docs/zh-tw/docs/reverse/tools/debug/xdbg.md | 1 | # x64dbg/x32dbg | COMMENT |
| LOW | docs/zh-tw/docs/reverse/tools/debug/windbg.md | 1 | # windbg | COMMENT |
| LOW | docs/zh-tw/docs/reverse/language/go/introduction.md | 1 | # Golang 逆向入門 | COMMENT |
| LOW | docs/zh-tw/docs/reverse/language/python/introduction.md | 1 | # Python 逆向入門 | COMMENT |
| LOW | docs/zh-tw/docs/reverse/language/rust/introduction.md | 1 | # Rust 逆向入門 | COMMENT |
| LOW | …s/android/basic_operating_mechanism/native_layer/so.md | 141 | COMMENT | |
| LOW | docs/zh-tw/docs/pwn/macos/readme.md | 1 | # MacOS | COMMENT |
| 25 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/zh/docs/misc/traffic/protocols/http.md | 36 | except Exception: | CODE |
| LOW | docs/zh/docs/crypto/signature/rsa.md | 211 | except Exception as e: | CODE |
| LOW | docs/zh/docs/crypto/asymmetric/rsa/rsa_complex.md | 477 | except Exception as error: | CODE |
| LOW | …/docs/crypto/asymmetric/rsa/rsa_chosen_plain_cipher.md | 148 | except Exception as e: | CODE |
| MEDIUM | …/docs/crypto/asymmetric/rsa/rsa_chosen_plain_cipher.md | 134 | def Challenge(private_key, reader, writer): | CODE |
| LOW | …ocs/pwn/linux/user-mode/stackoverflow/x86/fancy-rop.md | 889 | except Exception as e: | CODE |
| LOW | …ocs/pwn/linux/user-mode/stackoverflow/x86/fancy-rop.md | 1016 | except Exception: | CODE |
| LOW | …ocs/pwn/linux/user-mode/stackoverflow/x86/fancy-rop.md | 1117 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 546 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 576 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 590 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 639 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 662 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 667 | except Exception: | CODE |
| MEDIUM | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 562 | def get_brop_gadget(length, stop_gadget, addr): | CODE |
| MEDIUM | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 581 | def check_brop_gadget(length, addr): | CODE |
| LOW | …r-mode/stackoverflow/x86/advanced-rop/ret2dlresolve.md | 2937 | except Exception as e: | CODE |
| LOW | …r-mode/stackoverflow/x86/advanced-rop/ret2dlresolve.md | 3023 | except Exception as e: | CODE |
| LOW | …s/zh/docs/pwn/linux/user-mode/fmtstr/fmtstr-example.md | 952 | except Exception: | CODE |
| LOW | …s/zh/docs/pwn/linux/user-mode/fmtstr/fmtstr-example.md | 1044 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/heap/ptmalloc2/tcache-attack.md | 2053 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/heap/ptmalloc2/tcache-attack.md | 2117 | except Exception: | CODE |
| LOW | docs/zh-tw/docs/misc/traffic/protocols/http.md | 36 | except Exception: | CODE |
| LOW | docs/zh-tw/docs/crypto/signature/rsa.md | 211 | except Exception as e: | CODE |
| LOW | docs/zh-tw/docs/crypto/asymmetric/rsa/rsa_complex.md | 477 | except Exception as error: | CODE |
| LOW | …/docs/crypto/asymmetric/rsa/rsa_chosen_plain_cipher.md | 148 | except Exception as e: | CODE |
| MEDIUM | …/docs/crypto/asymmetric/rsa/rsa_chosen_plain_cipher.md | 134 | def Challenge(private_key, reader, writer): | CODE |
| LOW | …ocs/pwn/linux/user-mode/stackoverflow/x86/fancy-rop.md | 889 | except Exception as e: | CODE |
| LOW | …ocs/pwn/linux/user-mode/stackoverflow/x86/fancy-rop.md | 1016 | except Exception: | CODE |
| LOW | …ocs/pwn/linux/user-mode/stackoverflow/x86/fancy-rop.md | 1117 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 553 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 583 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 597 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 646 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 669 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 674 | except Exception: | CODE |
| MEDIUM | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 569 | def get_brop_gadget(length, stop_gadget, addr): | CODE |
| MEDIUM | …cs/pwn/linux/user-mode/stackoverflow/x86/medium-rop.md | 588 | def check_brop_gadget(length, addr): | CODE |
| LOW | …r-mode/stackoverflow/x86/advanced-rop/ret2dlresolve.md | 2937 | except Exception as e: | CODE |
| LOW | …r-mode/stackoverflow/x86/advanced-rop/ret2dlresolve.md | 3023 | except Exception as e: | CODE |
| LOW | …h-tw/docs/pwn/linux/user-mode/fmtstr/fmtstr-example.md | 952 | except Exception: | CODE |
| LOW | …h-tw/docs/pwn/linux/user-mode/fmtstr/fmtstr-example.md | 1044 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/heap/ptmalloc2/tcache-attack.md | 2053 | except Exception: | CODE |
| LOW | …cs/pwn/linux/user-mode/heap/ptmalloc2/tcache-attack.md | 2117 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/docs.py | 123 | CODE | |
| LOW | scripts/docs.py | 426 | CODE | |
| LOW | scripts/docs.py | 440 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/docs.py | 3 | CODE | |
| LOW | scripts/docs.py | 17 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/docs.py | 416 | def get_text_with_translate_missing(text: str) -> str: | CODE |