Static insight. Dynamic visibility.
RingForge Analyzer is a malware/software analysis toolkit for Windows executables and installers that supports both static triage and early-stage dynamic behavior analysis. It generates structured case artifacts, IOC output, persistence-diff data, dropped-file triage results, signing results, API behavior analysis, and analyst-facing reports for triage, training, and investigation.
Current release: v1.1
RingForge Analyzer is designed to help analysts quickly triage Windows software samples such as EXE, DLL, installer, launcher, and related package files. It combines metadata extraction, strings analysis, capa behavior analysis, IOC extraction, signing validation, VirusTotal reputation, executable API import analysis, and controlled dynamic runtime behavior collection into a single workflow.
The pipeline creates a case folder for each run and produces structured outputs such as JSON artifacts, CSV IOC files, Markdown and HTML reports, PDF reports when supported, Procmon-derived runtime artifacts, persistence diffs, and dynamic findings summaries.
RingForge Analyzer v1.1 builds on the v1.0 hybrid static + dynamic workflow and adds a more polished analyst experience for dynamic triage and reporting.
- separate Dynamic Analysis GUI window
- Procmon-backed dynamic capture workflow
- dynamic HTML report export
- browser-based PDF fallback workflow
- Procmon configuration file support
- improved dynamic findings noise reduction
- improved progress/status wording for optional steps
- early UI theming updates aligned to report styling
- MD5, SHA1, and SHA256 hashing
filesignature identification- strings extraction
- PE metadata extraction
- LIEF metadata extraction
- IOC extraction
- capa analysis
- Authenticode verification via
osslsigncode - verified timestamp handling
- signer subject and issuer extraction
- signing cache support
- improved parser handling for valid signed files
- VirusTotal hash lookup
- verdict classification
- risk scoring with benign-context dampening
- installer and launcher-aware false-positive reduction
- imported DLL and API extraction
- API behavior category mapping
- API behavior chain detection
api_analysis.jsonartifact generation- report integration
- light API-chain scoring support
- Procmon-backed runtime capture
- Procmon CSV export
- normalized Procmon JSON parsing
- interesting-event filtering
- dropped-file candidate triage
- scheduled task snapshotting and diffing
- Windows service snapshotting and diffing
- analyst-facing findings summaries
- live GUI status output during dynamic runs
- dynamic HTML report export
- Markdown report
- HTML report
- PDF report when environment supports it
- browser-based PDF fallback from HTML
- structured summary and runlog outputs
- dynamic findings output
- persistence diff outputs
- embedded payload extraction
- recursive extraction support
- extracted payload manifest
- optional extracted PE subfile triage
Executable API import analysis is supported for Windows PE files.
This feature:
- extracts imported DLLs and API functions
- groups APIs into behavior categories
- detects API behavior chains such as:
- possible process injection
- possible service installation
- possible registry persistence
- possible memory execution
- writes results to
api_analysis.json - includes findings in the Markdown and HTML reports
API-chain findings can contribute lightly to the final risk score. For trusted benign contexts such as signed clean installers or launchers, API-chain impact is automatically dampened so legitimate software is less likely to be over-scored.
The project includes an early-stage dynamic-analysis pipeline focused on practical analyst visibility rather than full sandbox emulation.
- build per-sample case folders
- collect sample metadata and hashes
- start and stop Procmon capture
- export Procmon CSV data
- parse Procmon CSV into structured JSON
- generate filtered interesting-event output
- triage dropped-file candidates from suspicious or user-writable paths
- snapshot and diff scheduled tasks
- snapshot and diff Windows services
- generate analyst-facing findings summaries
- display live phase/status updates in the GUI
- export polished HTML reports from dynamic summaries
- Run inside an isolated Windows 11 VM
- Test first with a simple benign executable
- Test with a small benign installer
- Then test the target installer or sample
- Review findings, persistence diffs, dropped files, Procmon summaries, and the HTML report
- host-side background activity can create significant noise when run on a personal workstation
- Procmon filtering is still intentionally conservative
- dynamic analysis is designed as a practical triage layer, not a full malware sandbox replacement
- automatic PDF generation on Windows may require additional WeasyPrint system dependencies
- Select a Windows executable, DLL, installer, or launcher
- Create a new case name
- Run static triage
- Review:
- signing results
- VirusTotal summary
- capa findings
- API Analysis
- IOC output
- final score and verdict
- Export or archive the case folder
- Open the Dynamic Analysis window from the GUI
- Select a sample path
- Select or create a case folder
- Set timeout and Procmon options
- Run dynamic analysis
- Review:
- highlights
- top written paths
- top network processes
- scheduled task diffs
- service diffs
- dropped-file output
- final dynamic summary
- Export the HTML report and optionally print it to PDF from the browser
A typical static case folder may contain:
cases/<case>/
analysis.log
api_analysis.json
capa.json
capa.txt
extracted/
extracted_manifest.json
file.txt
iocs.csv
iocs.json
lief_metadata.json
pe_metadata.json
report.html
report.md
report.pdf
runlog.json
signing.json
strings.txt
subfiles/
summary.json
virustotal.json
On some environments, report.pdf may not be generated. In that case, open report.html and use your browser’s Print to PDF option.
A dynamic-analysis run can produce a structure like:
cases/<case_name>/
metadata/
run_config.json
sample_info.json
run_summary.json
procmon/
raw.pml
export.csv
parsed_events.json
interesting_events.json
persistence/
tasks_before.json
tasks_after.json
task_diffs.json
services_before.json
services_after.json
service_diffs.json
files/
dropped_files.json
dropped_files_summary.json
reports/
dynamic_findings.json
dynamic_report.html
dynamic_report.pdf
run_config.json— execution settings used for the runsample_info.json— sample hashes, size, and metadatarun_summary.json— final summarized run outputparsed_events.json— normalized Procmon event datainteresting_events.json— reduced high-value Procmon eventstask_diffs.json— before/after scheduled task changesservice_diffs.json— before/after Windows service changesdropped_files.json— candidate dropped-file detailsdynamic_findings.json— analyst-facing highlights and summariesdynamic_report.html— themed analyst-facing HTML reportdynamic_report.pdf— PDF report when PDF backend is available
RingForge-Analyzer/
docs/
scripts/
static_triage_engine/
dynamic_analysis/
__init__.py
orchestrator.py
models.py
procmon_runner.py
procmon_parser.py
dropped_file_triage.py
findings.py
html_report.py
report_theme.py
snapshot_tasks.py
diff_tasks.py
snapshot_services.py
diff_services.py
utils.py
tools/
procmon-configs/
cases/ # generated locally, usually gitignored
logs/ # generated locally, usually gitignored
.gitignore
LICENSE
README.md
requirements.txt
triage_inbox.py
RingForge_Analyzer_v1.1/
RingForgeAnalyzer.exe
scripts/
static_triage_engine/
dynamic_analysis/
README.md
LICENSE
RingForge Analyzer is being expanded from a static triage utility into a more complete multi-stage software analysis platform. The roadmap below outlines the planned direction for static, dynamic, API, scoring, and reporting capabilities.
- Static analysis workflow with case-based output
- Dynamic analysis window and execution workflow
- API analysis window for manual request testing
- HTML reporting for static and API analysis
- Organized case folder structure for saved artifacts and reports
- Security API presets for common enrichment services
- VirusTotal
- AbuseIPDB
- urlscan
- Shodan
- Raw JSON response saving for API tests
- Parsed API result summaries for faster triage
- Improved HTML export formatting for API analysis
- Auto-fill options using the selected sample, MD5, SHA1, or SHA256
- Separate scoring for each analysis area
- Static Analysis Score
- Dynamic Analysis Score
- API / Intelligence Score
- Combined weighted maliciousness score across completed modules
- Confidence rating based on analysis coverage
- Standardized verdict categories
- Likely Benign
- Low Suspicion
- Suspicious
- Malicious Likely
- Highly Malicious
- Combined assessment output in JSON and HTML formats
- Stronger static suspiciousness heuristics
- Expanded dynamic behavior scoring
- Better IOC enrichment and reputation correlation
- Improved persistence and execution pattern detection
- Correlation between static findings, dynamic behavior, and external intelligence
- Combined analyst report covering all completed modules
- Executive-style summary view
- Key findings and evidence summary sections
- Analyst notes section
- Easier export and case-deliverable workflow
- File and hash lookup presets
- File upload presets for executables, DLLs, MSIs, and archives
- IOC-specific enrichment workflows for:
- File
- Hash
- IP
- Domain
- URL
- API key validation and connectivity testing
- Automated chaining between enrichment tools
- Local YARA integration
- Certificate and signature trust analysis
- Entropy and packer detection improvements
- Expanded PE metadata scoring
- Multi-tool intelligence orchestration
- More advanced malware triage and recommendation engine
The long-term goal is to evolve RingForge Analyzer into a unified triage platform that can combine static artifacts, runtime behavior, and external intelligence into a single assessment workflow. This will allow analysts to move from isolated test results to a more complete and defensible maliciousness determination.
This is the most reliable packaging model right now.
- Python 3.11 or 3.12 recommended
Typical dependencies include:
requestspefileliefpyyamlpyinstallerweasyprint(optional for direct PDF generation)- any packages listed in
requirements.txt
Common external tools:
filestringsosslsigncodecabextractp7zip-fullbinutils
Optional:
innoextractmsitoolsunar
For dynamic analysis on Windows, Procmon is required for full runtime capture.
Typical setup:
- Procmon obtained separately from Microsoft Sysinternals
- optional Procmon config file under
tools/procmon-configs - a dedicated Windows VM for execution and observation
- administrative rights where required for capture and snapshotting
You should also have:
tools/capa-rulestools/capa/sigs
cd D:\ring_forge_analyzer
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install liefOptional PDF support:
pip install weasyprintIf WeasyPrint dependencies are unavailable on Windows, HTML export still works and can be printed to PDF from the browser.
cd ~/analysis/RingForge-Analyzer
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pefile pyyaml lief flare-capa
bash scripts/bootstrap_capa_rules.shcd D:\ring_forge_analyzer
.\.venv\Scripts\Activate.ps1
python .\scripts\static_triage_gui_v10.pycd ~/analysis/RingForge-Analyzer
source .venv/bin/activate
python scripts/static_triage_gui_v10.pyThe GUI includes a separate Dynamic Analysis window with:
- sample path selection
- case folder selection
- timeout configuration
- Procmon path selection
- Procmon config selection
- Procmon enable/disable toggle
- live output pane
- phase/status progress messages
- findings summary output
- HTML report export
- browser-based PDF fallback
Example help command:
python scripts/static_triage.py --helpExample analysis run:
python scripts/static_triage.py "/path/to/sample.exe"Example PyInstaller build:
pyinstaller --onedir --windowed --name RingForgeAnalyzer --paths . --collect-submodules dynamic_analysis scripts/static_triage_gui_v10.pyCreate the release folder and copy:
- built executable
scriptsstatic_triage_enginedynamic_analysisREADME.mdLICENSErequirements.txtif needed
cd release
Compress-Archive -Path .\RingForge_Analyzer_v1.1 -DestinationPath .\RingForge_Analyzer_v1.1.zip -Force- dynamic HTML report export
- browser-open workflow for reviewing dynamic reports
- browser-based PDF fallback workflow
- Procmon configuration file support
- shared dark/blue HTML report theme foundation
- improved dynamic GUI controls for report actions
- dynamic findings noise reduction on non-isolated hosts
- cleaner dynamic findings presentation
- better handling for optional or non-applicable analysis steps
- initial GUI theming work aligned to report styling
- report export path resolution for dynamic runs
- issues caused by duplicate or broken Dynamic Analysis helper methods
- improved report button integration inside the Dynamic Analysis window
Make sure:
static_triage_engine/api_analysis.pyexistsengine.pyimports and runsanalyze_apis()pefileis installed in the active Python environment
Linux example:
source .venv/bin/activate
pip install pefileThis usually means the analysis ran with an older engine.py that did not yet call the API analysis step, or the case folder was generated before the feature was added.
Use a fresh case name and rerun.
Clear the signing cache and rerun so the updated signing parser can re-evaluate the sample:
rm -f logs/signing_cache.jsonCheck that:
- the GUI worker thread is starting correctly
- the sample path is valid
- the case path is writable
- Procmon path is valid if Procmon capture is enabled
Check:
- Procmon is present at the configured path
- Procmon is not already running in a conflicting session
- the analysis is being performed in a Windows environment with required permissions
Check:
- PowerShell is available
- the process has sufficient rights to query scheduled tasks and services
- temporary JSON output can be written successfully
Check:
tools/capa-rulesexiststools/capa/sigsexists- capa is installed in the active virtual environment
Make sure LIEF is installed in the active virtual environment:
pip install liefCommon reasons:
VT_API_KEYis not set- network/DNS failure
- rate limit or API response issue
If the HTML report is created successfully but PDF generation fails on Windows, WeasyPrint system dependencies are likely missing. Open the HTML report in your browser and use Print → Save as PDF.
Use Linux-style paths in the GUI, not Windows paths.
- dynamic analysis should only be performed inside an isolated, revertible Windows VM or other controlled sandbox
- do not run unknown samples on a personal daily-use host
- Procmon-backed execution and persistence snapshotting can generate significant host noise on non-isolated systems
- legitimate software can still contain powerful APIs, installer behaviors, or autorun-related logic; scoring and findings should always be reviewed in context
- API analysis currently applies to Windows PE executables and DLLs through import/API-chain analysis
- dynamic analysis in RingForge Analyzer v1.1 is intended as a practical triage layer, not a full sandbox replacement
- future work may include a dedicated API Analysis window, tighter Procmon filtering, cleaner VM-first tuning, installer-monitor expansion, and broader behavior correlation
See LICENSE.