Repository navigation
Releases: lupingQAQ/JGD
Releases · lupingQAQ/JGD
Release list
JGD v2.1.1 — Standalone binaries (exe / Linux) + packaging fixes
Standalone binaries
No Python installation required — single-file executables (PyInstaller + UPX) with the full agent pipeline inside:
| Asset | Platform | Size | SHA-256 |
|---|---|---|---|
jgd-v2.1.1-windows-x64.exe |
Windows x64 | 8.6 MB | 35aefa9a0ac46173ef729a70cd85aad93ea8876aaeffca09a95726198d7f3b85 |
jgd-v2.1.1-linux-x64 |
Linux x64 | 7.5 MB | 7265a0dff171afedc721c70c4741ca8e96bb18d76513344d91346a6bf94ebd76 |
Quick start:
# audit any JAR directory (report -> audit_report/, state -> data/, PoCs -> pocs/)
./jgd --target /path/to/jars --name "your-product"
# interactive chain-tree TUI
./jgd --tui
Notes:
- First run provisions
config/andexamples/next to the binary; all artifacts are written next to it. SetJGD_ROOTto relocate the workspace. - Runtime requirements unchanged: JDK 11 & 17 on
PATHfor dynamic probes and PoC firing; LLM credentials viaconfig/models.json(template:config/models.example.json) orJGD_*environment variables. chromadbis optional and not bundled — RAG persistence degrades to a no-op store; the mining / verification / PoC pipeline runs normally without it.- Windows: use Windows Terminal for full TUI colors. SmartScreen may warn on unsigned binaries.
Changes
jgd/__main__unified entry: audit CLI,--tui, and-m <module>stage dispatch — the multi-stage pipeline (stages spawned throughsys.executable) keeps working inside a frozen binary- Portable
PROJECT_ROOT: executable directory when frozen,JGD_ROOTenv override chromadbis now genuinely optional (VStoreno-op fallback instead ofImportError)- Console-encoding robustness: UTF-8 output regardless of host codepage; stage output decoded as UTF-8
- Fix: TUI crash in English mode (negative format width on the 65-char subtitle)
- Fix: TUI crash on non-tty stdin under POSIX (
termios.erroris not anOSErrorsubclass) - Fix:
pocs/directory creation on fresh workspaces
JGD v2.0.0 — New Release
What's New
19 Novel Chains (all RCE_DEMO_FIRED, ds CONFIRM novel=True)
- Vavr family (7): Tuple1-8, Either, Option, Validation, HashArrayMappedTrie
- Spring AOP family (6): ComposablePointcut, MethodMatchers, TargetSource
- Guava family (3): Functions, Predicates, Present
- Others (3+): clojure proxy, jackson annotation, snakeyaml
155-Chain Known Chain Database (SQLite)
- Per-chain: family, source, CVE, trigger, sink, JDK range, conditions, jar gates
- Multi-version coexistence: per-jar verdicts
Core Fixes
- bcdisasm branch offset correctness (bridge surface doubled)
- Map-dispatch bridging (static + interface forms)
- heq (equals carrier) PoC mode
- Jackson POJONode tail
- Evidence per-item persistence
- Incremental verify checkpoint
- Adaptive scaling
- Self-explanatory code naming (no more R-round labels)
JGD v1.1.0 — Package Structure + PriorityQueue/TreeMap Carriers
What's New
Package Structure (Breaking)
- 18 flat
.pyfiles → properjgd/package with 4 subpackages pip install .supported (setup.py + pyproject.toml)- Console scripts:
jgd(CLI) andjgd-tui(TUI)
PriorityQueue / TreeMap Carriers (R53)
Closes fatal trigger family gap — these are now implemented:
- PriorityQueue carrier:
readObject → heapify → compare()/compareTo() - TreeMap carrier:
readObject → put → compare()/compareTo() - Auto-selected for bridges with compare/compareTo trigger methods
- Mechanism verified: PriorityQueue deserialization triggers compareTo
5 Carriers Total
| Carrier | Trigger | Chain Family |
|---|---|---|
| BAVE | toString() |
ROME direct |
| HashMap | hashCode() |
HashMap rehash |
| HashMap_EQ | equals() |
Hash collision |
| PriorityQueue | compare()/compareTo() |
CC2/CB1 Comparator |
| TreeMap | compare()/compareTo() |
TreeMap sorted |
Other
- WeChat:
Security丨Art→IndexSec - Path fixes for external tools after restructure
- README honest boundaries: neutral tone (Yes/No)
JGD v1.0.0 — Initial Release
⚡ JGD v1.0.0 — JavaGadgetDigger
Solving the Last Mile of Deserialization Vulnerability Discovery
What's Inside
- 🔍 Autonomous mining: Input any JAR directory → output chains + weaponized PoCs
- 📊 Static analysis: Bytecode disassembly + operand-stack symbolic execution (receiver/argument bridges)
- ⚡ Dynamic probes: Batch-parallel JVM, 3 carriers (BAVE/HashMap/HashMap_EQ), field-contract synthesis
- 🤖 Dual-model adversarial auditing: Finder ≠ Verifier, acceptance-gated terminal verdict
- 🔫 Weaponized PoC: Auto-derived chains → tail candidate loop → RCE closure demo (benign)
- 📋 Public chain determination: Four-state (PRESENT/VERSION/ASSEMBLE/FIRE) with version gates
- 🖥️ TUI + CLI: Interactive chain visualization (EN/CN) + one-shot batch audit
🆕 Discovered Chains
| Tier | Count | Status |
|---|---|---|
| T1 (Novel Entry) | 1 | ✅ RCE Closed |
| T2 (New Carriers) | 6 | ✅ RCE Closed |
| T3 (Variants) | 1 | ⏳ Pending |
Quick Start
# CLI mode
python3 audit_target.py --target /path/to/jars --name "your-product"
# TUI mode
python3 tui.py --lang zh
**Full Changelog**: https://github.com/lupingQAQ/JGD/commits/v1.0.0