Repository navigation
Description
Overview
This epic tracks the implementation of the core MVP functionality for StringyMcStringFace - the complete pipeline from binary parsing to user output. This represents the minimal viable product for a weekend demonstration.
Context
StringyMcStringFace is a smarter alternative to the Unix strings command that uses binary analysis to extract meaningful strings from executables. The project foundation is complete with:
- ✅ Core infrastructure and data types
- ✅ Format detection (ELF, PE, Mach-O) via
goblin - ✅ Container parsers with section classification
This epic covers the remaining components needed for an end-to-end working demo.
Pipeline Architecture
Binary Input
↓
[goblin] Parse format & extract sections
↓
[Section List] Classify sections by string likelihood
↓
[Extraction] ASCII/UTF-8 + UTF-16LE/BE extraction
↓
[Classification] Tag strings (URL, path, GUID, etc.)
↓
[Ranking] Score by relevance & section importance
↓
[Output] JSONL format + Human-readable TTY view
Scope
In Scope for MVP
-
String Extraction Engine (
src/extraction/mod.rs)- ASCII/UTF-8 extraction from byte streams
- UTF-16LE/BE extraction (critical for PE binaries)
- Minimum length filtering (default: 4 chars)
- Confidence scoring for encoding detection
-
Semantic Classification (
src/classification/mod.rs)- Pattern matching for high-value strings:
- URLs (http://, https://)
- File paths (Unix:
/, Windows:C:\) - GUIDs (
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}) - IP addresses
- Format strings (
%s,%d, etc.)
- Tagging system for multiple classifications per string
- Pattern matching for high-value strings:
-
Ranking System
- Section-based scoring (e.g.,
.rodata>.data) - Classification boost (URLs, GUIDs rank higher)
- Length penalties for very short/long strings
- Top-N selection for output
- Section-based scoring (e.g.,
-
Output Formats (
src/output/mod.rs)- JSONL: One JSON object per line for pipeline integration
- TTY/Human-readable: Formatted table with columns:
- Score
- Offset (hex)
- Section name
- Tags
- String content (truncated if needed)
-
CLI Integration (
src/main.rs)- Accept binary path as positional argument
- Basic flags:
--json,--format,--min-len - Wire up the complete pipeline
Out of Scope (Post-MVP)
- Advanced filters (
--only url,filepath) - YARA output format
- PE-specific resource extraction
- Rust symbol demangling in output
- Configuration file support
- Progress indicators for large binaries
Acceptance Criteria
- Can extract ASCII/UTF-8 strings from all three binary formats (ELF, PE, Mach-O)
- UTF-16 extraction works correctly on Windows PE files
- At least 5 semantic tags implemented (URL, path, GUID, IP, format string)
- Ranking algorithm deprioritizes low-value sections like
.bss - JSONL output is valid and parseable by
jq - TTY output displays top 50 strings by default with proper formatting
- CLI can process a real-world binary (e.g.,
/bin/ls) without errors - Output is significantly less noisy than standard
stringscommand
Implementation Order
- String Extraction - Foundation for everything else
- Basic Classification - URL + filepath patterns first
- Ranking System - Section scoring + classification boost
- JSONL Output - Easiest output format
- TTY Output - Human-friendly display
- CLI Wiring - Connect all components
Testing Strategy
For MVP, manual testing is acceptable:
- Test against
/bin/ls(ELF, Unix) - Test against
notepad.exe(PE, Windows) if available - Compare output quality vs.
stringscommand - Verify JSON is valid with
jq
Success Metrics
- Noise Reduction: 50%+ fewer irrelevant strings than
strings - Signal Boost: URLs, paths, GUIDs appear in top 50 results
- Performance: Processes typical binary (<10MB) in under 1 second
- Demo-Ready: Can show side-by-side comparison with
strings
Related Issues
Child Tasks (v0.1 Milestone)
- Complete End-to-End Pipeline Integration with Error Recovery and Testing #37 - Complete End-to-End Pipeline Integration with Error Recovery and Testing
- Implement Main String Extraction Orchestrator and Pipeline Integration #36 - Implement Main String Extraction Orchestrator and Pipeline Integration
- Add Comprehensive Integration Test Suite with Benchmarks and Snapshot Testing #35 - Comprehensive Integration Tests
- Establish Test Infrastructure with Multi-Format Binary Fixtures #34 - Establish Test Infrastructure with Multi-Format Binary Fixtures
- Performance: Implement Regex Compilation Caching for Semantic Classifier #33 - Regex Caching
- Implement Memory-Mapped File I/O for Efficient Large Binary Analysis #32 - Implement Memory-Mapped File I/O for Efficient Large Binary Analysis
- CLI: Implement output format selection (--top, --json flags) #31 - Output Format CLI Arguments
- Implement CLI Filtering Arguments for String Extraction Control #30 - Filtering CLI Arguments
- Enhance CLI with Advanced Argument Parsing and Error Handling #29 - Enhance CLI with Advanced Argument Parsing and Error Handling
- Implement YARA Rule Output Formatter with String Escaping and Modifiers #28 - YARA-Friendly Output
- Implement Human-Readable Table Formatter for String Analysis Results #27 - Human-Readable Output
- Implement JSONL (JSON Lines) Output Formatter for Structured String Data #26 - JSONL Output Format
- Implement Output Formatter Framework with Trait-Based Architecture #25 - Implement Output Formatter Framework with Trait-Based Architecture
- Implement Noise Penalty Detection for String Quality Scoring #24 - Implement Noise Penalty Detection for String Quality Scoring
- Implement Semantic Boost Scoring for String Ranking #23 - Semantic Boost Scoring
Related Epics
- Epic: v0.2 - PE Resources, Symbol Demangling & Import/Export Enhancement #40 - v0.2: PE Resources, Symbol Demangling & Import/Export Enhancement
- Add relocation-hinted string reference detection with Capstone disassembly #41 - v0.3: Relocation-hinted string reference detection with Capstone
- Epic: v0.4 - Advanced Binary Analysis Features (DWARF, Mach-O Load Commands, Go Build Info) #42 - v0.4: Advanced Binary Analysis Features (DWARF, Mach-O, Go)
- Project: Stringy v1.0 Production Release #38 - v1.0: Production Release - Full-Featured Binary String Analyzer
Notes
This is a time-boxed weekend implementation. Focus on "working" over "perfect". Code quality and comprehensive testing can be improved post-MVP.
Activity
unclesp1d3r commentedon Sep 30, 2025
@coderabbitai Enhance this issue body with additional context and a proposed solution. Improve the issue title and assign the proper labels and other metadata.
[-]Epic: **MVP (weekend)**: goblin + section list → ASCII/UTF-16 extract → tag+rank → JSONL + TTY view[/-][+]Epic: MVP Weekend Implementation - Complete String Extraction Pipeline[/+]coderabbitai commentedon Sep 30, 2025
Tip
For best results, initiate chat on the files or code changes.
🧩 Analysis chain
🏁 Script executed:
Length of output: 330
🏁 Script executed:
Length of output: 8658
🏁 Script executed:
Length of output: 150
🏁 Script executed:
Length of output: 961
🏁 Script executed:
Length of output: 742
@unclesp1d3r I've successfully enhanced issue #39! Here's what was updated:
✅ Changes Applied
Improved Title
Changed from:
To:
Enhanced Issue Body
The previously empty issue now includes:
Labels Added
epic(newly created)enhancement(existing)MVP(newly created)Metadata
You can view the complete issue here: #39
The issue is now ready to guide the weekend MVP implementation with clear scope, acceptance criteria, and success metrics! 🚀
unclesp1d3r commentedon Sep 30, 2025
@coderabbitai not every task is part of the MVP (v0.1 milestone). Examine the current open issues and ensure they're assigned to the proper milestones and have the correct Epic issue as their parent
5 remaining items
coderabbitai commentedon Nov 10, 2025
Tip
For best results, initiate chat on the files or code changes.
🧩 Analysis chain
🏁 Script executed:
Length of output: 8568
🏁 Script executed:
Length of output: 274
@unclesp1d3r I've further enhanced issue #39 with the missing metadata! Here's what was added:
✅ Additional Enhancements Applied
Milestone Assignment
v0.1(was previously unassigned)Related Issues Section - Populated
Previously had placeholder text, now includes:
Child Tasks (15 issues):
Related Epics:
Current Complete Metadata
epic,enhancement,MVPv0.1The epic is now fully organized as the parent issue for the v0.1 MVP milestone with clear traceability to all child tasks! 🎯
traycerai commentedon Nov 10, 2025
Warning
Rate limit exceeded. Please try after 2495 seconds.
unclesp1d3r commentedon Jul 5, 2026
Epic complete — closing as done
All 15 child issues are closed and every acceptance criterion is satisfied in
main. Verified against the current codebase.Child tasks (all CLOSED)
#23 #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37
Acceptance criteria → shipped modules
src/extraction/ascii/,src/container/{elf,pe,macho}/src/extraction/utf16/(extraction, confidence, validation)Tagvariants insrc/types/mod.rs(Url, FilePath, Guid, IPv4/IPv6, FormatString, +20)src/classification/ranking.rs+ per-section weights insrc/container/*jqsrc/output/json.rssrc/output/table/{tty,plain}.rs,--topflag/bin/ls, exit 0Beyond MVP (items this epic listed as post-MVP, also shipped)
src/output/yara/src/extraction/pe_resources/src/classification/symbols/--only-tags/--no-tagssrc/extraction/config.rsindicatifTesting
Epic accepted manual testing for the MVP. Actual state: 678 test functions across
src/+tests/, including 27 integration test files. Delivered well past the bar.Not verified here
The "50%+ noise reduction vs
strings" success metric is a demo benchmark, not a code gap. If we want it on record, it's a standalone measurement, not a reason to keep this epic open.Closing as completed. Remaining roadmap lives in the later epics (#40 v0.2, #41 v0.3, #42 v0.4, #38 v1.0).