diff --git a/README.md b/README.md index 005166d..79a8947 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - Anti-Dump - Anti-Disassembly + Anti-Decompiler - Memory Protection(CRC32) -- Custom Passes(Planned - **TODO**) +- Custom Passes(**TODO**) --- diff --git a/RyujinConsole/RyujinConsole/RyujinCore.hh b/RyujinConsole/RyujinConsole/RyujinCore.hh index 3266617..76724d0 100644 --- a/RyujinConsole/RyujinConsole/RyujinCore.hh +++ b/RyujinConsole/RyujinConsole/RyujinCore.hh @@ -25,7 +25,6 @@ public: bool m_isAntiDump; // Enable Anti Dump technic for Ryujin protected binary bool m_isMemoryProtection; // Memory CRC32 protection RyujinObfuscatorProcs m_strProceduresToObfuscate; // Names of the procedures to obfuscate - std::vector m_strdProceduresToObfuscate; // Names of the procedures to obfuscate static bool RunRyujin(const std::string& strInputFilePath, const std::string& strPdbFilePath, const std::string& strOutputFilePath, RyujinObfuscatorConfig& config) { diff --git a/RyujinCore/Ryujin/Models/RyujinObfuscatorConfig.hh b/RyujinCore/Ryujin/Models/RyujinObfuscatorConfig.hh index 8c9e3b0..c231ad9 100644 --- a/RyujinCore/Ryujin/Models/RyujinObfuscatorConfig.hh +++ b/RyujinCore/Ryujin/Models/RyujinObfuscatorConfig.hh @@ -9,6 +9,13 @@ struct RyujinObfuscatorProcs { char procedures[MAX_PROCEDURES][MAX_PROCEDURE_NAME_LEN]; }; +class RyuJinConfigInternal { + +public: + std::vector m_strdProceduresToObfuscate; // Names of the procedures to obfuscate + +}; + class RyujinObfuscatorConfig { public: @@ -22,8 +29,7 @@ public: bool m_isTrollRerversers; // The user wants to trick and use a special feature to troll reversers when their debugs be detected making they loose all the progress bool m_isAntiDump; // Enable Anti Dump technic for Ryujin protected binary bool m_isMemoryProtection; // Memory CRC32 protection - RyujinObfuscatorProcs m_strProceduresToObfuscate; // Names of the procedures to obfuscate - FFI - std::vector m_strdProceduresToObfuscate; // Names of the procedures to obfuscate + RyujinObfuscatorProcs m_strProceduresToObfuscate; // Names of the procedures to obfuscate // todo: passes }; \ No newline at end of file diff --git a/RyujinCore/Ryujin/Ryujin.cc b/RyujinCore/Ryujin/Ryujin.cc index 25e8b7f..c15ffb0 100644 --- a/RyujinCore/Ryujin/Ryujin.cc +++ b/RyujinCore/Ryujin/Ryujin.cc @@ -44,7 +44,7 @@ Ryujin::Ryujin(const std::string& strInputFilePath, const std::string& strPdbFil } -bool Ryujin::run(const RyujinObfuscatorConfig& config) { +bool Ryujin::run(const RyujinObfuscatorConfig& config, const std::shared_ptr& ryujConfigInternal) { auto imgDos = reinterpret_cast(m_mappedPE.get()); @@ -83,7 +83,7 @@ bool Ryujin::run(const RyujinObfuscatorConfig& config) { return FALSE; } - if (config.m_strdProceduresToObfuscate.size() == 0) { + if (ryujConfigInternal->m_strdProceduresToObfuscate.size() == 0) { ::OutputDebugStringA( @@ -98,9 +98,9 @@ bool Ryujin::run(const RyujinObfuscatorConfig& config) { std::vector processed_procs; for (auto& proc : m_ryujinProcedures) { - auto it = std::find(config.m_strdProceduresToObfuscate.begin(), config.m_strdProceduresToObfuscate.end(), proc.name); + auto it = std::find(ryujConfigInternal->m_strdProceduresToObfuscate.begin(), ryujConfigInternal->m_strdProceduresToObfuscate.end(), proc.name); - if (it == config.m_strdProceduresToObfuscate.end()) continue; + if (it == ryujConfigInternal->m_strdProceduresToObfuscate.end()) continue; std::printf( diff --git a/RyujinCore/Ryujin/Ryujin.hh b/RyujinCore/Ryujin/Ryujin.hh index f95dcf3..1c484ed 100644 --- a/RyujinCore/Ryujin/Ryujin.hh +++ b/RyujinCore/Ryujin/Ryujin.hh @@ -26,7 +26,7 @@ private: public: Ryujin(const std::string& strInputFilePath, const std::string& strPdbFilePath, const std::string& strOutputFilePath); - bool run(const RyujinObfuscatorConfig& config); + bool run(const RyujinObfuscatorConfig& config, const std::shared_ptr& ryujConfigInternal); void listRyujinProcedures(); ~Ryujin() { } diff --git a/RyujinCore/RyujinCore.cc b/RyujinCore/RyujinCore.cc index 494c3b0..5ad1866 100644 --- a/RyujinCore/RyujinCore.cc +++ b/RyujinCore/RyujinCore.cc @@ -8,24 +8,21 @@ RYUJINCORE_API BOOL __stdcall RunRyujinCore(const char* strInputFilePath, const if (!strInputFilePath || !strPdbFilePath || !strOutputFilePath) return FALSE; - if (config.m_strdProceduresToObfuscate.empty()) { + std::vector strProcsProcessed; - std::vector strProcsProcessed; + strProcsProcessed.reserve(config.m_strProceduresToObfuscate.procedureCount); - strProcsProcessed.reserve(config.m_strProceduresToObfuscate.procedureCount); + for (int i = 0; i < config.m_strProceduresToObfuscate.procedureCount; ++i) + strProcsProcessed.emplace_back(config.m_strProceduresToObfuscate.procedures[i]); - for (int i = 0; i < config.m_strProceduresToObfuscate.procedureCount; ++i) - strProcsProcessed.emplace_back(config.m_strProceduresToObfuscate.procedures[i]); - - config.m_strdProceduresToObfuscate.assign(strProcsProcessed.begin(), strProcsProcessed.end()); - - } + std::shared_ptr ryujConfigInternal = std::make_shared(); + ryujConfigInternal->m_strdProceduresToObfuscate.assign(strProcsProcessed.begin(), strProcsProcessed.end()); std::unique_ptr ryujin = std::make_unique(strInputFilePath, strPdbFilePath, strOutputFilePath); ryujin.get()->listRyujinProcedures(); - ryujin.get()->run(config); + ryujin.get()->run(config, ryujConfigInternal); ryujin.reset(); diff --git a/RyujinGUI/RyujinCore.hh b/RyujinGUI/RyujinCore.hh index 9ab0dfc..52d2dea 100644 --- a/RyujinGUI/RyujinCore.hh +++ b/RyujinGUI/RyujinCore.hh @@ -24,8 +24,7 @@ public: bool m_isTrollRerversers; // The user wants to trick and use a special feature to troll reversers when their debugs be detected making they loose all the progress bool m_isAntiDump; // Enable Anti Dump technic for Ryujin protected binary bool m_isMemoryProtection; // Memory CRC32 protection - RyujinObfuscatorProcs m_strProceduresToObfuscate; // Names of the procedures to obfuscate - FFI - std::vector m_strdProceduresToObfuscate; // Names of the procedures to obfuscate + RyujinObfuscatorProcs m_strProceduresToObfuscate; // Names of the procedures to obfuscate static bool RunRyujin(const std::string& strInputFilePath, const std::string& strPdbFilePath, const std::string& strOutputFilePath, RyujinObfuscatorConfig& config) {