From d102c11b163d663b46ca0f0b143a20a2cb2c100a Mon Sep 17 00:00:00 2001 From: Boran Date: Sun, 21 Jun 2026 01:18:45 +0300 Subject: [PATCH] feat: add suspicious DLL summary --- include/analyzer/pe_parser.hpp | 1 + src/pe_parser.cpp | 52 +++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/include/analyzer/pe_parser.hpp b/include/analyzer/pe_parser.hpp index 3ab63c0..300ac83 100644 --- a/include/analyzer/pe_parser.hpp +++ b/include/analyzer/pe_parser.hpp @@ -76,6 +76,7 @@ struct SuspiciousApiReport { std::string apiName; std::string category; std::string severity; + std::string dllName; }; class PEParser { diff --git a/src/pe_parser.cpp b/src/pe_parser.cpp index c5d504f..42aa5d3 100644 --- a/src/pe_parser.cpp +++ b/src/pe_parser.cpp @@ -525,7 +525,8 @@ bool PEParser::parseImports() { suspiciousApiReports.push_back({ function, category, - severity + severity, + dllName }); std::cout << " -> \033[33m[INCELE] [" @@ -812,6 +813,8 @@ bool PEParser::exportTextReport() const { for (const auto& api : suspiciousApiReports) { report << api.apiName + << " | DLL: " + << api.dllName << " | Category: " << api.category << " | Severity: " @@ -824,10 +827,12 @@ bool PEParser::exportTextReport() const { std::map categoryCounts; std::map severityCounts; + std::map suspiciousDllCounts; for (const auto& api : suspiciousApiReports) { ++categoryCounts[api.category]; ++severityCounts[api.severity]; + ++suspiciousDllCounts[api.dllName]; } report @@ -866,6 +871,24 @@ bool PEParser::exportTextReport() const { report << "\n"; } + report + << "Suspicious DLL Summary\n"; + + if (suspiciousDllCounts.empty()) { + report + << "No suspicious DLLs found.\n\n"; + } else { + for (const auto& [dllName, count] : suspiciousDllCounts) { + report + << dllName + << ": " + << count + << "\n"; + } + + report << "\n"; + } + report << "Overall Risk\n" << "Risk Score: " @@ -930,6 +953,7 @@ bool PEParser::exportJsonReport() const { std::map sectionRiskCounts; std::map categoryCounts; std::map severityCounts; + std::map suspiciousDllCounts; for (const auto& section : sectionReports) { ++sectionRiskCounts[section.risk]; @@ -938,6 +962,7 @@ bool PEParser::exportJsonReport() const { for (const auto& api : suspiciousApiReports) { ++categoryCounts[api.category]; ++severityCounts[api.severity]; + ++suspiciousDllCounts[api.dllName]; } const int staticRiskScore = @@ -1061,6 +1086,9 @@ bool PEParser::exportJsonReport() const { << " \"api\": \"" << escapeJsonString(api.apiName) << "\",\n" + << " \"dll\": \"" + << escapeJsonString(api.dllName) + << "\",\n" << " \"category\": \"" << escapeJsonString(api.category) << "\",\n" @@ -1116,6 +1144,28 @@ bool PEParser::exportJsonReport() const { ++riskIndex; } + report + << " },\n" + << " \"suspiciousDlls\": {\n"; + + std::size_t suspiciousDllIndex = 0; + + for (const auto& [dllName, count] : suspiciousDllCounts) { + report + << " \"" + << escapeJsonString(dllName) + << "\": " + << count; + + if (suspiciousDllIndex + 1 < + suspiciousDllCounts.size()) { + report << ","; + } + + report << "\n"; + ++suspiciousDllIndex; + } + report << " },\n" << " \"categories\": {\n";