dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
翻译准备中
开源基于CPG的跨过程污点分析 + LLM分流,配备Ghidra风格的审计工作台。完全离线运行。
AI 翻译
Open-source CPG-based interprocedural taint analysis + LLM triage, with a Ghidra-style audit workbench. Runs fully offline.
安全Python · HTMLGitHub @KimJeju自行安装运营者未确认
试用过了吗? 点一下就好,无需登录。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
安装型项目无需部署域名也可验证。个人仓库可通过 GitHub 登录验证,组织仓库可使用上方的仓库验证文件。
正在加载完整 README。 以下为已保存的摘录。
Air-gapped security assessment, from source code to the finished report
CPG-based taint analysis · LLM triage · audit deliverables generated for you — a desktop tool that never phones home
CPGuard = CPG (Code Property Graph) + Guard — it guards your code with a property graph, not a pattern list. That graph is why the logo is three connected nodes.查看完整 README ↗CPGuard = CPG (Code Property Graph) + Guard — it guards your code with a property graph, not a pattern list. That graph is why the logo is three connected nodes.
Pattern-matching scanners drown you in false positives. CPGuard goes deeper — tree-sitter parsing → language-neutral IR → CPG (AST · CFG · def-use · call) → interprocedural taint with function summaries → LLM triage — then hands the result to a three-pane review screen where a human confirms the verdict.
Two detection axes
Vulnerability review screen
Ctrl+P) · context menu · gutter markers.sanitize, then clear them in one action.Running an assessment
Scale: one analyst, hundreds of projects
/projects/) — every project's latest scan in one searchable, sortable, filterable table.Assess against the standard your client asks for
Deliverables you can actually hand over
LLM triage
Deliverables
UX & delivery
| Dashboard | Vulnerability explorer (charts · filters · pagination) |
|---|---|
| Status tiles · severity distribution · top rules | Severity donut · top rule/CWE bars · large-result explorer |
The review screen (code viewer + Source→Sink flow + inspector) is the hero image above.
Download the latest CPGuard-Setup-*.exe from Releases and run it.
It installs per-user (no admin rights) and installs the WebView2 runtime if missing.
To build the installer yourself:
powershell -ExecutionPolicy Bypass -File packaging/build.ps1
It also runs portable — copy the dist/CPGuard folder and run CPGuard.exe.
pip install .
cpguard --help
The engine, the web UI and every report format are pure Python and run on all three platforms.
Only the packaged installer and the native desktop window (WebView2) are Windows-specific.
Korean text in PDF reports needs a Korean font: Windows and macOS have one out of the box, on
Linux install fonts-nanum, or point CPGUARD_PDF_FONT at any TrueType font you prefer.
# CLI scan (SARIF + analysis sheet)
cpguard scan ./project --sarif out.sarif --xlsx out.xlsx
# Assess against one or more standards (mois | efs | owasp | cwe)
cpguard scan ./project --standard mois --standard efs --xlsx out.xlsx
# Re-verify with LLM triage
cpguard scan ./project --triage --provider gemini
# Web dashboard (browser)
cpguard serve
# Native desktop window
cpguard app
In the dashboard: upload zip(s) → progress screen (step checklist + runtime log) → review and mark verdicts → add an LLM key in ⚙️ Settings to enable AI analysis and triage.
Scan on every push and PR, upload SARIF to GitHub Code Scanning so new findings appear inline on the code and the PR. A severity gate can fail the build.
# .github/workflows/cpguard.yml
permissions:
contents: read
security-events: write
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- id: cpguard
uses: KimJeju/[email protected]
with:
path: '.'
fail-on: 'high' # fail the build on high or above (none = no gate)
- if: always()
uses: github/codeql-action/upload-sarif@v3
with: { sarif_file: '${{ steps.cpguard.outputs.sarif }}' }
The CLI gates too: cpguard scan . --sarif out.sarif --fail-on high (exit code 1 at or above that severity).
This repository's .github/workflows/cpguard.yml is a working example.
An AI coding agent (Claude Code, Cursor) can drive CPGuard over MCP: scan, pull the source-to-sink evidence, explain a rule, and dynamically validate a finding — answering the question a static scanner never can, "is this actually exploitable?"
CPGuard does not fire HTTP. Because it knows the sink, it emits a probe plus an
oracle — what to send and, more importantly, what to observe that proves the sink
fired. The agent fires it with its own tools and hands back what it saw; CPGuard
matches that against the oracle and returns a verdict. It is oracle-match, not IAST —
no instrumentation, so it reports "the predicted signal appeared", not "I observed the
real execution path". NOT_REPRODUCED is kept distinct from FALSE_POSITIVE.
──────────────────────────────────────────────────────────────────
CPGuard MCP — proving a SAST finding at runtime
──────────────────────────────────────────────────────────────────
① scan_file → 1 critical · py.command-injection
② finding.evidence → source os.environ.get → … → sink os.system('echo ' + user)
③ probe.get → payload ";sleep 5 #" (posix) · oracle time_delay
④ (agent fires it) → real injection runs · response 5144ms
⑤ validation.submit→ CONFIRMED — delay 5144ms ≥ 5000ms
──────────────────────────────────────────────────────────────────
Nine tools: scan_file · scan_start / scan_status (async whole-repo audit) ·
finding.list · finding.evidence · explain · probe.get · validation.submit ·
verify (did your fix actually close the flow?). The core opens no socket; only the
agent's own web tools touch the network.
pip install "cpguard[mcp]"
claude mcp add cpguard -s user "<env>/bin/cpguard-mcp" # see docs/mcp-server-design.md
Design, boundaries, and the full tool contract: docs/mcp-server-design.md.
Runnable demo: examples/mcp_demo.py.
tree-sitter → language-neutral IR → CPG (AST · CFG · def-use · call) → interprocedural taint (function summaries)
↘ LLM triage → review screen / reports
pattern axis, every language (secrets · PII · config) ─────────↗
Stack: Python 3.11+ · tree-sitter (11 languages) · Django (SSR) · reportlab (PDF) · openpyxl (xlsx) · SARIF 2.1.0 · LLM SDKs (anthropic / openai / google-genai) · pytest.
Measured against labelled ground truth in eight languages — five corpora totalling 138,785 cases, of which 76,866 are scored (the rest are categories excluded below). Score = recall − false-positive rate (the official OWASP metric; random guessing = 0.000).
| Corpus | Language | Scored | Recall | Precision | Score |
|---|---|---|---|---|---|
| OWASP Benchmark v1.2 | Java | 1,572 | 95.8% | 88.7% | 0.826 |
| C# Vulnerability Test Suite | C# | 33,024 | 84.3% | 91.1% | 0.728 |
| OWASP Benchmark for Python | Python | 346 | 82.1% | 83.3% | 0.717 |
| BenchProctor (httplib / standalone) | C++ | 800 | ~79% | 100% | 0.79 |
| BenchProctor (gin / net_http) | Go | 2,000 | ~80% | ~85% | 0.66 |
| BenchProctor (standalone) | C | 500 | 52.0% | 100% | 0.520 |
| BenchProctor (express / koa) | JavaScript | 2,200 | ~66% | ~78% | 0.47 |
| BenchProctor (express_ts / nestjs) | TypeScript | 2,200 | ~62% | ~79% | 0.45 |
| BenchProctor (rails / sinatra) | Ruby | 2,400 | ~56% | ~81% | 0.43 |
| PHP Vulnerability test suite | PHP | 31,824 | 47.0% | 66.4% | 0.369 |
Read it plainly: Java, C++, Python, C# and Go are at working-tool quality; C, JS/TS and Ruby are usable; PHP is not there yet. Where the score is low it is usually recall, not noise (PHP recall is 47.0%).
Values read out of a database or a file count as user input by default — that is where second-order injection and stored XSS come from. Pass --trust-stored-data to turn it off. The default was chosen by measurement, not taste: across 15 suites, treating stored data as a source cost nothing anywhere and bought Go 50 extra true positives for 9 extra false ones.
Do not take the 100% precision on C/C++ at face value. Those corpora are small (400-500 cases each) and their safe variants are generated from exactly two guard idioms (check(x) ? x : default, and "replace with a default when the check fails"). Teaching the engine to read those two took the false positives to zero in one step — that measures how completely the generator's rules were matched, not how varied real C code is. The 52-80% recall is the more honest signal. Kotlin and Swift have no public labelled corpus at all, so they are covered by idiom tests instead (see below).
Config-only categories (weakrand, crypto, hash, securecookie, trustbound) are not data-flow problems and are excluded rather than counted as free wins. Categories that are data-flow problems but that CPGuard has no rule for (NoSQL injection, SSTI, prototype pollution, XXE …) are reported separately from those, so coverage is not quietly inflated.
The benchmarks drove real engine work. Java started at 0.137 and PHP at 0.001; every point since came from a defect the numbers exposed — taint dying inside try blocks, for-each variables losing the collection's taint, no path sensitivity at all, container mutations not propagating, comparison results carrying taint, constructor-to-field-to-method flows missing in every language, by-reference output parameters (fgets(buf, …), Decode(&v)) invisible to a return-value-only model, closures running against an empty environment so anything they captured looked clean, and — most recently — validation applied to a projection of the tainted value (if !allowed[url.Parse(x).Hostname()] { reject }) leaving the original tainted, which was 59% of all Go false positives. Each fix is a general analysis technique, not a tweak aimed at the test cases. The full before/after ledger is in bench/README.md.
Where labelled data does not exist (Kotlin, Swift, and any framework a corpus does not cover), CPGuard ships idiom tests instead: 130 minimal reproductions of shapes that are common in real code, run as part of the test suite. They catch a different class of defect than the benchmarks do — TypeScript parameters were carrying their type annotation into the parameter name, which silently removed every typed function from interprocedural analysis, and no benchmark score moved when it was fixed.
A second measurement on a real application (DVWA, PHP) is also published. Full methodology, per-category tables and limitations: bench/README.md.
Strategies for extreme scale (20–30 GB of source, 50k+ findings) — sink pre-filtering, incremental and summary caches, the finding DB table, aggregation with virtual scrolling, triage clustering — are in docs/large-scale.md.
pip install "cpguard[mcp]", cpguard-mcp)CPGuard is developed in the open by one person. If it is useful to you, you can support its continued development on Fairy @cp-guard.
Apache License 2.0. Free to use, modify and redistribute, commercially included, provided the notice and license are preserved. Includes an express patent grant.
Bundled third-party font: NanumGothic (c) NHN Corporation, under the SIL Open Font License 1.1. It ships with the package so Korean reports render on servers without Korean fonts installed.