Skip to content

Releases: lupingQAQ/JGD

JGD v2.1.1 — Standalone binaries (exe / Linux) + packaging fixes

Choose a tag to compare

@lupingQAQ lupingQAQ released this 08 Oct 10:32

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/ and examples/ next to the binary; all artifacts are written next to it. Set JGD_ROOT to relocate the workspace.
  • Runtime requirements unchanged: JDK 11 & 17 on PATH for dynamic probes and PoC firing; LLM credentials via config/models.json (template: config/models.example.json) or JGD_* environment variables.
  • chromadb is 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 through sys.executable) keeps working inside a frozen binary
  • Portable PROJECT_ROOT: executable directory when frozen, JGD_ROOT env override
  • chromadb is now genuinely optional (VStore no-op fallback instead of ImportError)
  • 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.error is not an OSError subclass)
  • Fix: pocs/ directory creation on fresh workspaces

JGD v2.0.0 — New Release

Choose a tag to compare

@lupingQAQ lupingQAQ released this 19 Sep 11:15

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

Choose a tag to compare

@lupingQAQ lupingQAQ released this 13 Sep 17:33

What's New

Package Structure (Breaking)

  • 18 flat .py files → proper jgd/ package with 4 subpackages
  • pip install . supported (setup.py + pyproject.toml)
  • Console scripts: jgd (CLI) and jgd-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

Choose a tag to compare

@lupingQAQ lupingQAQ released this 13 Sep 15:46

⚡ 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