Commit Graph

20 Commits

Author SHA1 Message Date
BlackSnufkin a609527c0b Add HTML smuggling analyzer, surface macro detail, split per-type modules 2026-05-05 06:01:58 -07:00
BlackSnufkin 96ced766e6 Add 'All' pipeline + EDR saved-view + Whiskers chunked XOR
- New 'All' analysis mode: client-side coordinator runs Static + every EDR
  profile in parallel; Dynamic waits only for Static (EDR is on a remote
  VM, no local resource contention). New /analyze/all/<target> route +
  analyze_all.html + analyze-all/core.js. Done banner exposes per-result
  jump links; rows linkify to their saved detail views (no auto-redirect).

- /results/edr/<profile>/<target>: saved-view route that loads the saved
  JSON and renders via the same tools/edr.js module the live page uses,
  so the saved view shows MITRE chips, call stack, triggering API,
  memory region, expandable per-alert detail and raw _source. New
  edr_info.html embeds findings as window.__edrSavedResults; new
  edr-saved.js bootstraps the renderer.

- Whiskers: chunked XOR write (64 KiB working buffer) replaces the
  byte-by-byte loop that was timing out the orchestrator on multi-MB
  payloads. AgentClient gains a separate exec_timeout (180s) for the
  multipart upload + agent-side decode path.

- file_info.html: Dynamic button uses lb-btn-primary to match Static and
  EDR (drops the orphan yellow styling).
2026-04-30 02:52:55 -07:00
BlackSnufkin 966d14104c EDR: XOR-on-the-wire, DLL via rundll32, Whiskers page, kill-detection fix 2026-04-30 01:27:51 -07:00
BlackSnufkin 36eab29536 Add Elastic EDR integration (Whiskers agent + orchestrator) 2026-04-29 14:57:38 -07:00
BlackSnufkin e2f192720a Adjust colors to softer palette 2026-04-29 01:23:15 -07:00
BlackSnufkin 75ec5a8e05 Shift UI terminology toward operator-flavored, observation-based language
Reframes verdict/score language across templates, JS renderers, MCP and
GrumpyCats client docs so findings read as feedback on the operator's own
payload rather than threat judgments. Risk Score becomes Detection Score,
Risk Factors becomes Triggering Indicators, Suspicious Imports becomes
Sensitive Imports, CheckPlz "Threat detected" becomes "Signature triggered",
HolyGrail "Dangerous Imports" becomes "Critical Imports". Dynamic-analysis
warning modal on the static results page now accepts command-line arguments
(pre-populated from last run) and persists them via localStorage, matching
the upload-page flow.
2026-04-28 08:01:48 -07:00
BlackSnufkin ff4f2ca2e2 Redesign UI on terminal/IDE shell with per-tool scanner modules and Tailwind v4
Full visual redesign onto a dense terminal/IDE layout: breadcrumb titlebar,
iconed sidebar, optional tab row, IDE-style status bar, JetBrains Mono
throughout, semantic severity palette, and a calm-red rule that reserves
bright red for severity tags, destructive buttons, and the brand dot.

Splits the 1,598-line tools.js into a 66-line registry plus one module per
scanner under app/static/js/results/tools/ (yara, checkplz, stringnalyzer,
pe_sieve, moneta, patriot, hsb, rededr, summary), with shared rendering
helpers in tools/_shared.js. Each module exports
{id, elementId, statsElementId?, render(results, ctx)}, and the registry
does lazy DOM lookups so a module loaded on a page that doesn't have its
tab silently no-ops.

Switches Tailwind from the precompiled v2.2.19 file (~2.8MB) to a v4 build
generated locally by the standalone CLI binary (~284KB). End-user setup is
unchanged: the committed tailwind.min.css ships ready to use; only the
maintainer needs the binary, which lives outside the repo.

Fixes:
- ModalHandler crash on dynamic results pages (null-deref against the old
  .bg-gray-900 selector)
- AnalysisCore.updateStageToComplete null-deref against removed
  stage-indicator markup
- summary.render silently skipped because elementId pointed at the
  removed summaryWrapper div — points at scannerResultsBody now
- Per-tool render failures no longer suppress the rest of the rendering
- Drag-and-drop highlight no longer null-derefs against the removed
  .upload-icon selector
- Upload "Unsupported file type" false positive — extensions now sourced
  from window.serverConfig instead of DOM scraping
- XSS hardening at user-data interpolation sites in results renderers
2026-04-28 02:42:12 -07:00
BlackSnufkin f0ab1323a5 Unify UI design system and rewrite the downloadable report
Visual unification:
- New :root design tokens + .lb-* component classes in style.css
  (cards, buttons, badges, section headers, hash display, empty
  state, animated grid backdrop, critical-state pulse).
- holygrail.html and byovd_info.html lose their cyber-themed inline
  <style> blocks (567 + 164 lines) and the cyber-card / cyber-chip /
  cyber-button / verdict-* classes; both pages now draw from the
  shared lb-* vocabulary. The cyber-glow accent is preserved but
  applied only on critical/severe states instead of page-wide.
- Templates swept to use component classes: file_info, summary,
  results, dynamic_info, static_info, doppelganger, error, upload,
  partials/_macros. JS renderers in results/tools.js,
  results/renderers.js, and the holygrail/byovd/upload core.js
  modules updated to emit the new classes. Risk-level 4-way
  conditional in file_info.html collapsed to a single
  lb-badge-{{ risk_level|lower }} lookup.
- Bug fix: duplicate .logo-wrapper rule in style.css merged.

Self-contained report (report.html rewritten):
- Drops the https://cdn.tailwindcss.com runtime-JIT dependency and
  the inline tailwind.config script. No <script> tags anywhere.
- All CSS inlined in a single <style> block: design tokens, the
  subset of lb-* component classes the report uses, and only the
  layout rules the report itself needs.
- Hand-written typography and layout: tabular-numeric risk scores,
  restrained pill badges, severity-coded detection chips,
  generous whitespace, dedicated @media print.
- Status icons use locked SVG dimensions so the green checkmark on
  clean scans no longer renders at default-huge size.
- The LitterBox logo is embedded as a base64 PNG data URI so the
  brand strip displays correctly when the file is downloaded and
  opened offline. Logo sized at 64x64 in the brand strip.

CHANGELOG.md: v4.2.0 entry extended with "UI design system &
visual unification" and "Fully self-contained downloadable report"
sections.

No backend or API changes. Setup story unchanged. No new
dependencies; deploy stays Python-only with the precompiled
tailwind.min.css.
2026-04-27 07:50:55 -07:00
BlackSnufkin ce9a926246 Refactor backend into blueprints/services/utils package and frontend into ES6 modules
Backend (Python):
- Split app/routes.py (1,389 lines) into 6 Flask blueprints (upload, analysis,
  results, doppelganger, management, api) under app/blueprints/, plus
  service modules (rendering, summary, tool_check, error_handling) under
  app/services/, and the shared RouteHelpers class in app/helpers.py.
  app/__init__.py wires shared deps via app.extensions['litterbox'].
- Split app/utils.py (1,400 lines) into the app/utils/ package with
  single-concern modules: file_io, validators, path_manager, risk_analyzer,
  forensics, json_helpers, reporting. No facade — every caller migrated.
- Extracted BaseSubprocessAnalyzer in app/analyzers/base.py; refactored 9
  subprocess analyzers (yara/checkplz/stringnalyzer static; yara/pe_sieve/
  moneta/patriot/hsb/hollows_hunter dynamic) as thin subclasses that only
  declare config + implement _parse_output.

Frontend (JS):
- Split results.js (2,060), holygrail.js (1,025), byovd_info.js (1,069),
  and upload.js (974) into per-concern ES6 modules under
  app/static/js/{results,holygrail,byovd,upload}/.
- Added app/static/js/utils/ with shared helpers: escape, formatters,
  severity, fetch, modals, dom (single source of truth for escapeHtml,
  formatBytes, severity-color mapping, etc.).
- Converted base.js, summary.js, blender.js, fuzzy.js to ES6 modules;
  every <script> tag now uses type="module". window.X assignments preserved
  so inline onclick handlers in templates keep resolving.
- Targeted XSS hardening at user-data interpolation sites in results
  renderers (str.data, hex_dump, scan_info.target, list items).

Templates:
- New app/templates/partials/_macros.html with reusable scanner-table
  macros + 3-card status grid; static_info.html and dynamic_info.html
  migrated to use them, eliminating identical-HTML duplication.

CSS:
- Fixed broken @apply in .drag-over (no Tailwind build pipeline → @apply
  was silently ignored, leaving drag-and-drop visual feedback broken).
  Replaced with raw CSS equivalent.
- Dedented stray 8-space-indented block (lines 127-end) for consistency.
- Added header comment documenting the no-build-pipeline constraint.

Gitignore:
- Anchored Results/, Uploads/, DoppelgangerDB/Blender/, and Scanners/*
  patterns to repo root with leading slash so they don't shadow same-
  named directories elsewhere (notably the new app/static/js/results/
  module directory and app/blueprints/results.py).
- Added /Scanners/PE-Sieve/process_*/ for runtime scan artifacts.
2026-04-27 06:41:19 -07:00
BlackSnufkin b544d8f5b9 LitterBox v4.0.0 2025-08-19 09:40:05 -07:00
carved4 17e923a880 fix go bin analysis 2025-08-07 11:07:26 -07:00
BlackSnufkin 9c7d0426de LitterBox v3.0.1 2025-05-20 13:56:56 -07:00
BlackSnufkin e23126daab LitterBox v2.5.2 2025-05-09 08:37:34 -07:00
BlackSnufkin 4b3715bae6 LitterBox v1.6.1 2025-01-28 07:14:06 -08:00
BlackSnufkin 3af82c562d LitterBox v1.6.1 2025-01-27 07:02:05 -08:00
BlackSnufkin 531d9a7fea LitterBox v1.6.0 2025-01-26 12:58:16 -08:00
BlackSnufkin 23dd88339d LitterBox v1.5.1 2025-01-25 14:03:44 -08:00
BlackSnufkin a1f71f0e4e LitterBox v1.5 RedEdr Scanner 2025-01-11 06:17:59 -08:00
BlackSnufkin 06dcf32832 Threat Hunting Methods for PE-files analysis 2025-01-02 01:53:03 -08:00
BlackSnufkin 3c07874abc LitterBox v1.0 2024-12-27 05:02:19 -08:00