Seregon/Hermes

Hermes/Dyforge is a program written in c++ allows you to inject a dll that can analyze all processes in a program, can be used for mod and reverse engeneering

C/3.8 KB/No license
DyForge/src/core/DyForge.cpp
Hermes / DyForge / src / core / DyForge.cpp
1#include "../../include/DyForge.h"
2#include <stdexcept>
3#include <sstream>
4#include <fstream>
5#include <chrono>
6#include <iomanip>
7 
8namespace DyForge {
9 
10// Singleton instance
11DyForge& DyForge::GetInstance() {
12 static DyForge instance;
13 return instance;
14}
15 
16// Constructor
17DyForge::DyForge()
18 : m_initialized(false)
19 , m_processManager(nullptr)
20 , m_injectionManager(nullptr)
21 , m_analysisManager(nullptr)
22 , m_reportingManager(nullptr)
23 , m_uiManager(nullptr) {
24}
25 
26// Destructor
27DyForge::~DyForge() {
28 Cleanup();
29}
30 
31// Core functionality
32bool DyForge::Initialize() {
33 if (m_initialized) {
34 return true;
35 }
36
37 try {
38 // Initialize DyHexInject
39 DyHexInjectError error = DyHexInject_Initialize();
40 if (error != DYHEXINJECT_SUCCESS) {
41 throw std::runtime_error("Failed to initialize DyHexInject: " +
42 std::string(DyHexInject_GetErrorString(error)));
43 }
44
45 // Create managers
46 m_processManager = std::make_unique<ProcessManager>();
47 m_injectionManager = std::make_unique<InjectionManager>(*m_processManager);
48 m_analysisManager = std::make_unique<AnalysisManager>(*m_injectionManager);
49 m_reportingManager = std::make_unique<ReportingManager>(*m_analysisManager);
50 m_uiManager = std::make_unique<UIManager>(*this);
51
52 m_initialized = true;
53 return true;
54 }
55 catch (const std::exception& e) {
56 // Log error
57 std::ofstream logFile("DyForge_error.log", std::ios::app);
58 if (logFile.is_open()) {
59 auto now = std::chrono::system_clock::now();
60 auto time = std::chrono::system_clock::to_time_t(now);
61 logFile << std::put_time(std::localtime(&time), "%Y-%m-%d %H:%M:%S")
62 << " - Error: " << e.what() << std::endl;
63 }
64 return false;
65 }
66}
67 
68void DyForge::Cleanup() {
69 if (!m_initialized) {
70 return;
71 }
72
73 // Cleanup in reverse order
74 m_uiManager.reset();
75 m_reportingManager.reset();
76 m_analysisManager.reset();
77 m_injectionManager.reset();
78 m_processManager.reset();
79
80 // Cleanup DyHexInject
81 DyHexInject_Cleanup();
82
83 m_initialized = false;
84}
85 
86bool DyForge::IsInitialized() const {
87 return m_initialized;
88}
89 
90// Process management
91bool DyForge::OpenProcess(DWORD processId) {
92 if (!m_initialized || !m_processManager) {
93 return false;
94 }
95 return m_processManager->OpenProcess(processId);
96}
97 
98bool DyForge::CloseProcess() {
99 if (!m_initialized || !m_processManager) {
100 return false;
101 }
102 m_processManager->CloseProcess();
103 return true;
104}
105 
106bool DyForge::IsProcessOpen() const {
107 return m_processManager && m_processManager->IsProcessOpen();
108}
109 
110DWORD DyForge::GetCurrentProcessId() const {
111 return m_processManager ? m_processManager->GetCurrentProcessId() : 0;
112}
113 
114// Injection management
115bool DyForge::InjectDll(const std::wstring& dllPath) {
116 if (!m_initialized || !m_injectionManager) {
117 return false;
118 }
119 return m_injectionManager->InjectDll(dllPath);
120}
121 
122bool DyForge::UnloadDll() {
123 if (!m_initialized || !m_injectionManager) {
124 return false;
125 }
126 return m_injectionManager->UnloadDll();
127}
128 
129bool DyForge::IsDllInjected() const {
130 return m_injectionManager && m_injectionManager->IsDllInjected();
131}
132 
133// Analysis management
134bool DyForge::StartAnalysis() {
135 if (!m_initialized || !m_analysisManager) {
136 return false;
137 }
138 return m_analysisManager->StartAnalysis();
139}
140 
141bool DyForge::StopAnalysis() {
142 if (!m_initialized || !m_analysisManager) {
143 return false;
144 }
145 return m_analysisManager->StopAnalysis();
146}
147 
148bool DyForge::IsAnalysisRunning() const {
149 return m_analysisManager && m_analysisManager->IsAnalysisRunning();
150}
151 
152// Reporting
153bool DyForge::GenerateReport(const std::wstring& outputPath) {
154 if (!m_initialized || !m_reportingManager) {
155 return false;
156 }
157 return m_reportingManager->GenerateReport(outputPath);
158}
159 
160bool DyForge::ExportData(const std::wstring& format, const std::wstring& outputPath) {
161 if (!m_initialized || !m_reportingManager) {
162 return false;
163 }
164 return m_reportingManager->ExportData(format, outputPath);
165}
166 
167// Event handling
168void DyForge::RegisterEventCallback(const std::string& eventName, EventCallback callback) {
169 m_eventCallbacks[eventName].push_back(callback);
170}
171 
172void DyForge::UnregisterEventCallback(const std::string& eventName) {
173 m_eventCallbacks.erase(eventName);
174}
175 
176// UI management
177bool DyForge::ShowMainWindow() {
178 if (!m_initialized || !m_uiManager) {
179 return false;
180 }
181 return m_uiManager->ShowMainWindow();
182}
183 
184bool DyForge::HideMainWindow() {
185 if (!m_initialized || !m_uiManager) {
186 return false;
187 }
188 return m_uiManager->HideMainWindow();
189}
190 
191bool DyForge::IsMainWindowVisible() const {
192 return m_uiManager && m_uiManager->IsMainWindowVisible();
193}
194 
195} // namespace DyForge