feat: Organize RyujinGUI project structure
- Aligning the RyujinGUI project structure with the main Ryujin project structure.
This commit is contained in:
753
RyujinGUI/RyujinApp.cc
Normal file
753
RyujinGUI/RyujinApp.cc
Normal file
@@ -0,0 +1,753 @@
|
||||
#include "RyujinApp.hh"
|
||||
|
||||
bool RyujinApp::OnInit() {
|
||||
|
||||
auto* frame = new wxFrame(
|
||||
|
||||
nullptr,
|
||||
wxID_ANY,
|
||||
"Ryujin Obfuscator",
|
||||
wxDefaultPosition,
|
||||
wxSize(
|
||||
|
||||
650,
|
||||
580
|
||||
|
||||
),
|
||||
wxDEFAULT_FRAME_STYLE & ~(wxRESIZE_BORDER | wxMAXIMIZE_BOX)
|
||||
|
||||
);
|
||||
|
||||
frame->SetBackgroundColour(
|
||||
wxColour(
|
||||
|
||||
25,
|
||||
25,
|
||||
25
|
||||
|
||||
));
|
||||
frame->SetFont(
|
||||
wxFont(
|
||||
|
||||
10,
|
||||
wxFONTFAMILY_SWISS,
|
||||
wxFONTSTYLE_NORMAL,
|
||||
wxFONTWEIGHT_NORMAL
|
||||
|
||||
));
|
||||
|
||||
auto* panel = new wxPanel(
|
||||
|
||||
frame,
|
||||
wxID_ANY
|
||||
|
||||
);
|
||||
panel->SetBackgroundColour(
|
||||
|
||||
frame->GetBackgroundColour( )
|
||||
|
||||
);
|
||||
|
||||
auto* topSizer = new wxBoxSizer(
|
||||
|
||||
wxVERTICAL
|
||||
|
||||
);
|
||||
|
||||
if (
|
||||
auto* icon = LoadPngFromRes(
|
||||
|
||||
panel,
|
||||
wxID_ANY,
|
||||
IDB_PNG1
|
||||
|
||||
))
|
||||
topSizer->Add(
|
||||
|
||||
icon,
|
||||
0,
|
||||
wxALIGN_CENTER | wxTOP,
|
||||
10
|
||||
|
||||
);
|
||||
|
||||
topSizer->Add(
|
||||
new wxStaticLine(
|
||||
|
||||
panel
|
||||
|
||||
),
|
||||
0,
|
||||
wxEXPAND | wxLEFT | wxRIGHT | wxTOP,
|
||||
15
|
||||
|
||||
);
|
||||
|
||||
auto* pathBox = new wxStaticBoxSizer(
|
||||
|
||||
wxVERTICAL,
|
||||
panel,
|
||||
"Paths"
|
||||
|
||||
);
|
||||
pathBox->GetStaticBox( )->SetForegroundColour(
|
||||
|
||||
*wxWHITE
|
||||
|
||||
);
|
||||
m_input = DrawnPathRow(
|
||||
|
||||
panel,
|
||||
pathBox,
|
||||
"Input EXE:",
|
||||
wxID_HIGHEST + 1
|
||||
|
||||
);
|
||||
m_pdb = DrawnPathRow(
|
||||
|
||||
panel,
|
||||
pathBox,
|
||||
"PDB File:",
|
||||
wxID_HIGHEST + 2
|
||||
|
||||
);
|
||||
m_output = DrawnPathRow(
|
||||
|
||||
panel,
|
||||
pathBox,
|
||||
"Output EXE:",
|
||||
wxID_HIGHEST + 3
|
||||
|
||||
);
|
||||
topSizer->Add(
|
||||
|
||||
pathBox,
|
||||
0,
|
||||
wxEXPAND | wxALL,
|
||||
15
|
||||
|
||||
);
|
||||
|
||||
auto* optionsBox = new wxStaticBoxSizer(
|
||||
|
||||
wxVERTICAL,
|
||||
panel,
|
||||
"Obfuscation Options"
|
||||
|
||||
);
|
||||
optionsBox->GetStaticBox( )->SetForegroundColour(
|
||||
|
||||
*wxWHITE
|
||||
|
||||
);
|
||||
auto* optionsSizer = new wxGridSizer(
|
||||
|
||||
2,
|
||||
3,
|
||||
10,
|
||||
10
|
||||
|
||||
);
|
||||
m_virtualize = DrawnStyledCheckbox(
|
||||
|
||||
panel,
|
||||
"Virtualize"
|
||||
|
||||
);
|
||||
m_junk = DrawnStyledCheckbox(
|
||||
|
||||
panel,
|
||||
"Junk Code"
|
||||
|
||||
);
|
||||
m_encrypt = DrawnStyledCheckbox(
|
||||
|
||||
panel,
|
||||
"Encrypt"
|
||||
|
||||
);
|
||||
m_randomSection = DrawnStyledCheckbox(
|
||||
|
||||
panel,
|
||||
"Random Section"
|
||||
|
||||
);
|
||||
m_obfuscateIat = DrawnStyledCheckbox(
|
||||
|
||||
panel,
|
||||
"Obfuscate IAT"
|
||||
|
||||
);
|
||||
m_ignoreOriginalCodeRemove = DrawnStyledCheckbox(
|
||||
|
||||
panel,
|
||||
"Ignore Original Code Removal"
|
||||
|
||||
);
|
||||
|
||||
optionsSizer->Add(
|
||||
|
||||
m_virtualize
|
||||
|
||||
);
|
||||
optionsSizer->Add(
|
||||
|
||||
m_junk
|
||||
|
||||
);
|
||||
optionsSizer->Add(
|
||||
|
||||
m_encrypt
|
||||
|
||||
);
|
||||
optionsSizer->Add(
|
||||
|
||||
m_randomSection
|
||||
|
||||
);
|
||||
optionsSizer->Add(
|
||||
|
||||
m_obfuscateIat
|
||||
|
||||
);
|
||||
optionsSizer->Add(
|
||||
|
||||
m_ignoreOriginalCodeRemove
|
||||
|
||||
);
|
||||
optionsBox->Add(
|
||||
|
||||
optionsSizer,
|
||||
0,
|
||||
wxEXPAND | wxALL,
|
||||
10
|
||||
|
||||
);
|
||||
topSizer->Add(
|
||||
|
||||
optionsBox,
|
||||
0,
|
||||
wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,
|
||||
15
|
||||
|
||||
);
|
||||
|
||||
auto* procBox = new wxStaticBoxSizer(
|
||||
|
||||
wxVERTICAL,
|
||||
panel,
|
||||
"Procedures to Obfuscate"
|
||||
|
||||
);
|
||||
procBox->GetStaticBox( )->SetForegroundColour(
|
||||
|
||||
*wxWHITE
|
||||
|
||||
);
|
||||
m_procList = new wxListBox(
|
||||
|
||||
panel,
|
||||
wxID_ANY,
|
||||
wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
0,
|
||||
nullptr,
|
||||
wxBORDER_NONE
|
||||
|
||||
);
|
||||
|
||||
m_procList->SetMinSize(
|
||||
wxSize(
|
||||
|
||||
-1,
|
||||
200
|
||||
|
||||
));
|
||||
m_procList->SetBackgroundColour(
|
||||
wxColour(
|
||||
|
||||
40,
|
||||
40,
|
||||
40
|
||||
|
||||
));
|
||||
m_procList->SetForegroundColour(
|
||||
|
||||
*wxWHITE
|
||||
|
||||
);
|
||||
procBox->Add(
|
||||
|
||||
m_procList,
|
||||
1,
|
||||
wxEXPAND | wxBOTTOM,
|
||||
5
|
||||
|
||||
);
|
||||
|
||||
auto* procBtnRow = new wxBoxSizer(
|
||||
|
||||
wxHORIZONTAL
|
||||
|
||||
);
|
||||
procBtnRow->Add(
|
||||
DrawnRyujinButton(
|
||||
|
||||
panel,
|
||||
"Add",
|
||||
wxID_HIGHEST + 4
|
||||
|
||||
),
|
||||
0,
|
||||
wxRIGHT,
|
||||
10
|
||||
|
||||
);
|
||||
procBtnRow->Add(
|
||||
DrawnRyujinButton(
|
||||
|
||||
panel,
|
||||
"Remove",
|
||||
wxID_HIGHEST + 5
|
||||
|
||||
));
|
||||
procBox->Add(
|
||||
|
||||
procBtnRow,
|
||||
0,
|
||||
wxALIGN_RIGHT
|
||||
|
||||
);
|
||||
topSizer->Add(
|
||||
|
||||
procBox,
|
||||
1,
|
||||
wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,
|
||||
15
|
||||
|
||||
);
|
||||
|
||||
m_progress = new wxGauge(
|
||||
|
||||
panel,
|
||||
wxID_ANY,
|
||||
100
|
||||
|
||||
);
|
||||
m_progress->SetMinSize(
|
||||
wxSize(
|
||||
|
||||
-1,
|
||||
14
|
||||
|
||||
));
|
||||
m_progress->SetForegroundColour(
|
||||
wxColour(
|
||||
|
||||
0,
|
||||
150,
|
||||
255
|
||||
|
||||
));
|
||||
m_progress->SetBackgroundColour(
|
||||
wxColour(
|
||||
|
||||
45,
|
||||
45,
|
||||
45
|
||||
|
||||
));
|
||||
|
||||
auto* runBtn = DrawnRyujinButton(
|
||||
|
||||
panel,
|
||||
"Run Obfuscator",
|
||||
wxID_HIGHEST + 6
|
||||
|
||||
);
|
||||
runBtn->SetMinSize(
|
||||
wxSize(
|
||||
|
||||
160,
|
||||
42
|
||||
|
||||
));
|
||||
runBtn->SetFont(
|
||||
wxFont(
|
||||
|
||||
11,
|
||||
wxFONTFAMILY_SWISS,
|
||||
wxFONTSTYLE_NORMAL,
|
||||
wxFONTWEIGHT_BOLD
|
||||
|
||||
));
|
||||
|
||||
auto* runRow = new wxBoxSizer(
|
||||
|
||||
wxHORIZONTAL
|
||||
|
||||
);
|
||||
runRow->Add(
|
||||
|
||||
runBtn,
|
||||
0,
|
||||
wxRIGHT,
|
||||
20
|
||||
|
||||
);
|
||||
runRow->Add(
|
||||
|
||||
m_progress,
|
||||
1,
|
||||
wxALIGN_CENTER_VERTICAL
|
||||
|
||||
);
|
||||
topSizer->Add(
|
||||
|
||||
runRow,
|
||||
0,
|
||||
wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND,
|
||||
20
|
||||
|
||||
);
|
||||
|
||||
panel->SetSizer(
|
||||
|
||||
topSizer
|
||||
|
||||
);
|
||||
topSizer->SetSizeHints(
|
||||
|
||||
panel
|
||||
|
||||
);
|
||||
frame->Fit( );
|
||||
frame->Centre( );
|
||||
frame->Show( );
|
||||
|
||||
frame->CreateStatusBar( );
|
||||
BindFileDialogs(
|
||||
|
||||
frame
|
||||
|
||||
);
|
||||
BindListEvents(
|
||||
|
||||
frame
|
||||
|
||||
);
|
||||
BindRunEvent(
|
||||
|
||||
frame
|
||||
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
auto RyujinApp::DrawnPathRow(wxWindow* parent, wxBoxSizer* sizer, const wxString& label, int buttonId) -> wxTextCtrl* {
|
||||
|
||||
auto* row = new wxBoxSizer(
|
||||
|
||||
wxHORIZONTAL
|
||||
|
||||
);
|
||||
|
||||
auto* lbl = new wxStaticText(
|
||||
|
||||
parent,
|
||||
wxID_ANY,
|
||||
label
|
||||
|
||||
);
|
||||
lbl->SetForegroundColour(
|
||||
|
||||
*wxWHITE
|
||||
|
||||
);
|
||||
auto* txt = new wxTextCtrl(
|
||||
|
||||
parent,
|
||||
wxID_ANY,
|
||||
"",
|
||||
wxDefaultPosition,
|
||||
wxSize(
|
||||
|
||||
-1,
|
||||
28
|
||||
|
||||
),
|
||||
wxBORDER_NONE
|
||||
|
||||
);
|
||||
txt->SetBackgroundColour(
|
||||
wxColour(
|
||||
|
||||
40,
|
||||
40,
|
||||
40
|
||||
|
||||
));
|
||||
txt->SetForegroundColour(
|
||||
|
||||
*wxWHITE
|
||||
|
||||
);
|
||||
auto* btn = DrawnRyujinButton(
|
||||
|
||||
parent,
|
||||
"Browse",
|
||||
buttonId
|
||||
|
||||
);
|
||||
|
||||
row->Add(
|
||||
|
||||
lbl,
|
||||
0,
|
||||
wxALIGN_CENTER_VERTICAL | wxRIGHT,
|
||||
10
|
||||
|
||||
);
|
||||
row->Add(
|
||||
|
||||
txt,
|
||||
1,
|
||||
wxRIGHT,
|
||||
10
|
||||
|
||||
);
|
||||
row->Add(
|
||||
|
||||
btn
|
||||
|
||||
);
|
||||
sizer->Add(
|
||||
|
||||
row,
|
||||
0,
|
||||
wxEXPAND | wxALL,
|
||||
8
|
||||
|
||||
);
|
||||
|
||||
return txt;
|
||||
}
|
||||
|
||||
auto RyujinApp::DrawnStyledCheckbox(wxWindow* parent, const wxString& label) -> wxCheckBox* {
|
||||
|
||||
auto* box = new wxCheckBox(
|
||||
|
||||
parent,
|
||||
wxID_ANY,
|
||||
label
|
||||
|
||||
);
|
||||
box->SetForegroundColour(
|
||||
|
||||
*wxWHITE
|
||||
|
||||
);
|
||||
|
||||
return box;
|
||||
}
|
||||
|
||||
auto RyujinApp::DrawnRyujinButton(wxWindow* parent, const wxString& label, int id) -> wxButton* {
|
||||
|
||||
auto* btn = new wxButton(
|
||||
|
||||
parent,
|
||||
id,
|
||||
label,
|
||||
wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
wxBORDER_NONE
|
||||
|
||||
);
|
||||
btn->SetBackgroundColour(
|
||||
wxColour(
|
||||
|
||||
60,
|
||||
60,
|
||||
60
|
||||
|
||||
));
|
||||
btn->SetForegroundColour(
|
||||
|
||||
*wxWHITE
|
||||
|
||||
);
|
||||
|
||||
return btn;
|
||||
}
|
||||
|
||||
auto RyujinApp::BindFileDialogs(wxFrame* frame) -> void {
|
||||
|
||||
auto bind = [=](int id, wxTextCtrl* target, const wxString& ext, bool save = false) {
|
||||
|
||||
frame->Bind(wxEVT_BUTTON, [=](wxCommandEvent&) {
|
||||
|
||||
wxFileDialog dlg(frame, save ? "Save file" : "Select file", "", "", "*." + ext + "|*." + ext,
|
||||
save ? wxFD_SAVE | wxFD_OVERWRITE_PROMPT : wxFD_OPEN);
|
||||
|
||||
if (dlg.ShowModal() == wxID_OK)
|
||||
target->SetValue(dlg.GetPath());
|
||||
|
||||
}, id);
|
||||
|
||||
};
|
||||
|
||||
bind(wxID_HIGHEST + 1, m_input, "exe");
|
||||
bind(wxID_HIGHEST + 2, m_pdb, "pdb");
|
||||
bind(wxID_HIGHEST + 3, m_output, "exe", true);
|
||||
|
||||
}
|
||||
|
||||
auto RyujinApp::BindListEvents(wxFrame* frame) -> void {
|
||||
|
||||
frame->Bind(wxEVT_BUTTON, [=](wxCommandEvent&) {
|
||||
|
||||
wxTextEntryDialog dlg(frame, "Enter comma-separated procedures or a unique procedure name:", "Procedures to obfuscate");
|
||||
if (dlg.ShowModal() == wxID_OK) {
|
||||
|
||||
wxArrayString list = wxSplit(dlg.GetValue(), ',');
|
||||
for (auto& p : list)
|
||||
m_procList->Append(p.Trim());
|
||||
|
||||
}
|
||||
|
||||
}, wxID_HIGHEST + 4);
|
||||
|
||||
frame->Bind(wxEVT_BUTTON, [=](wxCommandEvent&) {
|
||||
|
||||
int sel = m_procList->GetSelection();
|
||||
if (sel != wxNOT_FOUND)
|
||||
m_procList->Delete(sel);
|
||||
|
||||
}, wxID_HIGHEST + 5);
|
||||
|
||||
}
|
||||
|
||||
auto RyujinApp::BindRunEvent(wxFrame* frame) -> void {
|
||||
|
||||
frame->Bind(wxEVT_BUTTON, [=](wxCommandEvent&) {
|
||||
|
||||
frame->SetStatusText("Starting obfuscation...");
|
||||
m_progress->Pulse();
|
||||
|
||||
std::thread([=]() {
|
||||
|
||||
RyujinObfuscatorConfig core;
|
||||
|
||||
// Options Configuration
|
||||
core.m_isEncryptObfuscatedCode = m_encrypt->IsChecked();
|
||||
core.m_isIatObfuscation = m_obfuscateIat->IsChecked();
|
||||
core.m_isIgnoreOriginalCodeRemove = m_ignoreOriginalCodeRemove->IsChecked();
|
||||
core.m_isJunkCode = m_junk->IsChecked();
|
||||
core.m_isRandomSection = m_randomSection->IsChecked();
|
||||
core.m_isVirtualized = m_virtualize->IsChecked();
|
||||
|
||||
// Procedures to obfuscate
|
||||
std::vector<std::string> procsToObfuscate;
|
||||
auto count = m_procList->GetCount();
|
||||
procsToObfuscate.reserve(count);
|
||||
|
||||
for (auto i = 0; i < count; ++i) {
|
||||
|
||||
auto item = m_procList->GetString(i);
|
||||
procsToObfuscate.push_back(item.ToStdString());
|
||||
|
||||
}
|
||||
core.m_strProceduresToObfuscate.assign(procsToObfuscate.begin(), procsToObfuscate.end());
|
||||
|
||||
auto bSuccess = core.RunRyujin(m_input->GetValue().ToStdString(), m_pdb->GetValue().ToStdString(), m_output->GetValue().ToStdString(), core);
|
||||
|
||||
frame->CallAfter([=]() {
|
||||
|
||||
if (bSuccess) {
|
||||
|
||||
m_progress->SetValue(100);
|
||||
frame->SetStatusText("Obfuscation complete.");
|
||||
|
||||
} else {
|
||||
|
||||
m_progress->SetValue(50);
|
||||
frame->SetStatusText("Obfuscation error.");
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}).detach();
|
||||
|
||||
}, wxID_HIGHEST + 6);
|
||||
|
||||
}
|
||||
|
||||
auto RyujinApp::LoadPngFromRes(wxWindow* parent, wxWindowID id, int resId) -> wxStaticBitmap* {
|
||||
|
||||
wxImage::AddHandler(
|
||||
|
||||
new wxPNGHandler
|
||||
|
||||
);
|
||||
|
||||
auto hInst = reinterpret_cast<HINSTANCE>(GetModuleHandle(
|
||||
|
||||
_In_ NULL
|
||||
|
||||
));
|
||||
auto rs = FindResource(
|
||||
|
||||
_In_ hInst,
|
||||
_In_ MAKEINTRESOURCE(resId),
|
||||
_In_ wxT("PNG")
|
||||
|
||||
);
|
||||
|
||||
if (!rs) return nullptr;
|
||||
|
||||
auto hGlob = LoadResource(
|
||||
|
||||
_In_opt_ hInst,
|
||||
_In_ rs
|
||||
|
||||
);
|
||||
auto* data = LockResource(
|
||||
|
||||
_In_ hGlob
|
||||
|
||||
);
|
||||
auto size = SizeofResource(
|
||||
|
||||
_In_opt_ hInst,
|
||||
_In_ rs
|
||||
|
||||
);
|
||||
wxMemoryInputStream mis(
|
||||
|
||||
data,
|
||||
size
|
||||
|
||||
);
|
||||
|
||||
wxImage img(
|
||||
|
||||
mis,
|
||||
wxBITMAP_TYPE_PNG
|
||||
|
||||
);
|
||||
|
||||
if (!img.IsOk( )) return nullptr;
|
||||
|
||||
return new wxStaticBitmap(
|
||||
|
||||
parent,
|
||||
id,
|
||||
wxBitmap(
|
||||
|
||||
img
|
||||
|
||||
));
|
||||
}
|
||||
39
RyujinGUI/RyujinApp.hh
Normal file
39
RyujinGUI/RyujinApp.hh
Normal file
@@ -0,0 +1,39 @@
|
||||
#include <wx/wx.h>
|
||||
#include <wx/filedlg.h>
|
||||
#include <wx/gauge.h>
|
||||
#include <wx/textdlg.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/mstream.h>
|
||||
#include <thread>
|
||||
#include "resource.h"
|
||||
#include "RyujinCore.hh"
|
||||
|
||||
class RyujinApp : public wxApp {
|
||||
|
||||
private:
|
||||
wxTextCtrl* m_input = nullptr;
|
||||
wxTextCtrl* m_pdb = nullptr;
|
||||
wxTextCtrl* m_output = nullptr;
|
||||
wxCheckBox* m_virtualize = nullptr;
|
||||
wxCheckBox* m_junk = nullptr;
|
||||
wxCheckBox* m_encrypt = nullptr;
|
||||
wxCheckBox* m_randomSection = nullptr;
|
||||
wxCheckBox* m_obfuscateIat = nullptr;
|
||||
wxCheckBox* m_ignoreOriginalCodeRemove = nullptr;
|
||||
wxListBox* m_procList = nullptr;
|
||||
wxGauge* m_progress = nullptr;
|
||||
|
||||
auto DrawnPathRow(wxWindow* parent, wxBoxSizer* sizer, const wxString& label, int buttonId) -> wxTextCtrl*;
|
||||
auto DrawnStyledCheckbox(wxWindow* parent, const wxString& label) -> wxCheckBox*;
|
||||
auto DrawnRyujinButton(wxWindow* parent, const wxString& label, int id) -> wxButton*;
|
||||
auto BindFileDialogs(wxFrame* frame) -> void;
|
||||
auto BindListEvents(wxFrame* frame) -> void;
|
||||
auto BindRunEvent(wxFrame* frame) -> void;
|
||||
auto LoadPngFromRes(wxWindow* parent, wxWindowID id, int resId) -> wxStaticBitmap*;
|
||||
|
||||
public:
|
||||
bool OnInit() override;
|
||||
|
||||
};
|
||||
|
||||
wxIMPLEMENT_APP(RyujinApp);
|
||||
32
RyujinGUI/RyujinCore.hh
Normal file
32
RyujinGUI/RyujinCore.hh
Normal file
@@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <Windows.h>
|
||||
#include <string>
|
||||
|
||||
class RyujinObfuscatorConfig {
|
||||
|
||||
public:
|
||||
bool m_isRandomSection; // Randomize the name of the new section with the processed code -> ".Ryujin" standard
|
||||
bool m_isVirtualized; // Virtualize the code [Try as much as possible]
|
||||
bool m_isIatObfuscation; //Process IAT Obfuscation
|
||||
bool m_isJunkCode; // Insert junk code to confuse
|
||||
bool m_isIgnoreOriginalCodeRemove; // Do not remove the original code after processing (replace the original instructions with NOPs)
|
||||
bool m_isEncryptObfuscatedCode; // The user wants to encrypt all obfuscated code to avoid detection
|
||||
std::vector<std::string> m_strProceduresToObfuscate; // Names of the procedures to obfuscate
|
||||
|
||||
bool RunRyujin(const std::string& strInputFilePath, const std::string& strPdbFilePath, const std::string& strOutputFilePath, RyujinObfuscatorConfig& config) {
|
||||
|
||||
using tpdRunRyujinCore = BOOL(__stdcall*)(const std::string& strInputFilePath, const std::string& strPdbFilePath, const std::string& strOutputFilePath, RyujinObfuscatorConfig& config);
|
||||
|
||||
auto hModule = LoadLibraryW(L"RyujinCore.dll");
|
||||
|
||||
if (!hModule) return FALSE;
|
||||
|
||||
auto RunRyujinCore = reinterpret_cast<tpdRunRyujinCore>(GetProcAddress(hModule, "RunRyujinCore"));
|
||||
|
||||
if (!RunRyujinCore) return FALSE;
|
||||
|
||||
return RunRyujinCore(strInputFilePath, strPdbFilePath, strOutputFilePath, config);
|
||||
}
|
||||
|
||||
};
|
||||
BIN
RyujinGUI/RyujinGUI.rc
Normal file
BIN
RyujinGUI/RyujinGUI.rc
Normal file
Binary file not shown.
170
RyujinGUI/RyujinGUI.vcxproj
Normal file
170
RyujinGUI/RyujinGUI.vcxproj
Normal file
@@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{04712d9f-1c08-4605-b938-1ec74f2b0acf}</ProjectGuid>
|
||||
<RootNamespace>RyujinGUI</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>..\..\compiled\release</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>..\..\compiled\release</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<OutDir>..\..\compiled\release</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<OutDir>..\..\compiled\release</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(WXWIN)\include\msvc;$(WXWIN)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(WXWIN)\lib\vc_lib;%(AdditionalLibraryDirectories);libwebp.lib</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>libwebp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(WXWIN)\include\msvc;$(WXWIN)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(WXWIN)\lib\vc_lib;%(AdditionalLibraryDirectories);libwebp.lib</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>libwebp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(WXWIN)\include\msvc;$(WXWIN)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(WXWIN)\lib\vc_x64_lib;%(AdditionalLibraryDirectories);libwebp.lib</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>libwebp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(WXWIN)\include\msvc;$(WXWIN)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(WXWIN)\lib\vc_x64_lib;%(AdditionalLibraryDirectories);libwebp.lib</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>libwebp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="RyujinApp.cc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="resource.h" />
|
||||
<ClInclude Include="RyujinApp.hh" />
|
||||
<ClInclude Include="RyujinCore.hh" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="RyujinGUI.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="..\..\imgs\logogui.png" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
49
RyujinGUI/RyujinGUI.vcxproj.filters
Normal file
49
RyujinGUI/RyujinGUI.vcxproj.filters
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="RyujinCore">
|
||||
<UniqueIdentifier>{38744ed6-b50a-4be0-bf17-6128092b44eb}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="RyujinGUI">
|
||||
<UniqueIdentifier>{77bfeccd-c1fb-48af-af85-98b6afe4398c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="RyujinCore.hh">
|
||||
<Filter>RyujinCore</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="RyujinApp.hh">
|
||||
<Filter>RyujinGUI</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="resource.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="RyujinApp.cc">
|
||||
<Filter>RyujinGUI</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="RyujinGUI.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="..\..\imgs\logogui.png">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
16
RyujinGUI/resource.h
Normal file
16
RyujinGUI/resource.h
Normal file
@@ -0,0 +1,16 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by RyujinGUI.rc
|
||||
//
|
||||
#define IDB_PNG1 101
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 102
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
Reference in New Issue
Block a user