50 Commits

Author SHA1 Message Date
keowu
04063714da feat: Refactored code for Ryujin console arguments, fixed typos, and resolved instruction-padding logic issues. Fixed temporary variable bug in MBA equivalence generation and more
- Fixed bugs reported by third parties (instruction-override issues, padding-space logic, and more)
- Corrected typos (translated comments/examples to English)
- Fully refactored the Ryujin console (arguments now handled via the argparser library)
- MBA pass: fixed equivalence-logic issues when generating MBA instructions for original operations
- Updated DemoObfuscation usage examples
2025-11-19 21:07:19 -03:00
keowu
b50f2cebc1 feat: Add Test Binary into Ryujin Solution, Test Binary Code improvements and Output configs
- Now DemoObfuscation for TestBinary is part of Ryujin main Solution and able to compile together.
- Some code typos was fixed into DemoObfuscation.
- Output solution paths configs fix and more.
2025-11-05 16:57:44 -03:00
keowu
47b30de23c feat: Update README and Code Comments
- Updating README.md.
- Commenting on the code for explain the scope of RyujinMBAObfuscationPass.
2025-11-04 22:16:16 -03:00
keowu
22813fcd07 feat: Introducing Ryujin Custom Passes header, bug fixies and much more
- Now Ryujin have a independent header file to organize all Custom Passes.
- Some bug fixies when detecting "mba_" prefix procedures was made.
2025-10-29 22:47:06 -03:00
keowu
09075db2f3 feat: Limit mba feature to run only on "mba_" prefix and translating
- Now the mba feature pass is limited to run only in functions with "mba_" prefix to be more stable.
- Translating comments from the code to english.
2025-10-28 22:34:05 -03:00
keowu
0a51b98c8d feat: Begin implementing MBA Obfuscation Pass and bug fixies on RunMiniVMObfuscation
- Started working on the feature to add a custom standalone pass that adds support for MBA obfuscation in arithmetic operators with guaranteed equivalence and semantics.
- Now Ryujin requires Z3 for MBA Obfuscation equivalence..
- Fixed context and flag handling issues in RunMiniVMObfuscation.
2025-10-27 21:06:08 -03:00
keowu
093569f7b5 feat: Migrate codebase to VS2026 Insider
- Migrating the Ryujin project solution from VS2022 to the newest VS2026 Insider and make it full compatible to use the newer features of MSVC.
2025-09-12 18:02:50 -03:00
keowu
2f5f9e2bd5 feat: New HVPass (extension for code obfuscation) + MiniVM code mutation (for HVPass and standard MiniVM); Bug fixes for extracted unused registers (with future XMM support); Bug fixes for junk/mutation overwriting the RAX register unexpectedly; Improvements and added support for fixing relocation offsets in memory mov instructions; articles/projects diagrams and more.
- New HVPass feature – This feature allows the code VM to run through Microsoft’s Hypervisor API, adding an extra layer of analysis difficulty.
- MiniVM (normal) or MiniVM + HVPass – Now support junk/mutation in the stub, making the logic and instructions randomized at each interaction, further protecting the stub’s code.
- Bug fix – Fixed an issue in the extraction of unused registers from candidate procedures, where some registers were not being handled correctly.
- Bug fix – Fixed an issue in the extraction of XMM registers to enable junk/mutation support for multimedia registers.
- Bug fix – Fixed a problem in the junk/mutation logic for the instructions cdqe and cbw, which were incorrectly overwriting the RAX register, breaking results even when the registers were in use.
- Bug fix – Some instructions were not having relocations properly fixed by the RIP-relative relocation algorithm; this has now been corrected.
- Articles + Project Diagrams as well.

Some of these issues, as well as feature suggestions like HVPass, were discovered or suggested by the reviewers of Ryujin’s article.
2025-08-28 21:20:58 -03:00
keowu
d8c37b2d4c feat: Improve Custom Pass feature code, docs, and demos
- Improved the Custom Pass code to align with Ryujin coding standards.
- Added clear and helpful comments for better understanding of how RyujinCustomPassDemo works.
- Improved README.md for better structure and readability as user-facing documentation.
- Updated demo images for Ryujin and added more visual examples.
2025-07-27 11:10:32 -03:00
keowu
64cdfe6e71 feat: Add custom pass support for Ryujin users via callback
- Ryujin users can now register their own callbacks following the standard interface to create custom passes and extend Ryujin’s behavior.
- Updated configuration files to support safe usage.
- Adjusted README.md.
2025-07-27 09:12:11 -03:00
keowu
ffe6cb9655 feat: Improved pointer safety and performance for better adaptability. Also updated the README.
- Improved and organized pointer safety.
- Removed old, unused fields from the config.
- Introduced RyuJinConfigInternal to separate internal fields not directly related to the exposed config, used only by the Ryujin core.
- Updated README.md.
2025-07-26 22:16:21 -03:00
keowu
487f061d6c feat: Finalize memory protection logic, add GUI/CLI options, and fix README typos
- Added the original source code that generates the memory protection stub as a comment in the stub.
- Added a memory protection flag to the CLI and an option to the GUI.
- Improved CLI help text to be more detailed and explanatory.
- Updated README.md.
2025-07-25 20:30:20 -03:00
keowu
0988e8e078 feat: Working on the base for Memory CRC32 Protection
- Working on a new feature to allow users to protect obfuscated code with a memory protection mechanism, inspired by VMProtect, where the protector uses CRC32 to validate if a page was modified on disk or in memory.
- This is just the base to start building the feature. It’s still in development and I hope it evolves a lot.
2025-07-19 22:06:32 -03:00
keowu
a9bdbb1bdd feat: Start implementing the base for the "AntiDump" feature
- Begin work on the foundational structure for the "AntiDump" feature
- Introduced a new capability in Ryujin called "RyujinRunOncePass", which runs only on the first obfuscated function — ideal for volatile features
- Updated "RyujinCoreConfiguration" structures
 - Updated "RyujinGUI" to include the "AntiDump" option
- Updated "RyujinConsole" to display the "AntiDump" feature
- Updated "README.md" accordingly
2025-07-12 21:26:12 -03:00
keowu
a96d97b9b0 feat: MSVC optimization bug fixes, FFI standard support, and Anti-Debug options in RyujinGui
- Fixed a bug related to MSVC optimizations that broke Ryujin's relocation algorithm and its fix-up logic.
- Introduced a standardized FFI argument-passing method for Ryujin Core; the legacy method remains compatible.
- Ryujin GUI now fully supports the Anti-Debug features.
- Various minor bug fixes and improvements to project structure.
2025-07-10 20:55:39 -03:00
keowu
bc265c6d6b feat: Begin working on AntiDebug + TrollReversers features
- Started working on the initial concept and base implementation for AntiDebug detection.
- The goal is to use stealthy techniques (similar to Themida) to detect debugging attempts.
- An additional feature is being developed to troll reverse engineers by triggering a forced BSOD upon detection, causing them to lose their analysis progress.
2025-07-04 16:39:43 -03:00
keowu
e17e54ef1e feat: Organize RyujinGUI project structure
- Aligning the RyujinGUI project structure with the main Ryujin project structure.
2025-07-03 19:41:42 -03:00
keowu
9d5c6fb06c feat: Improve RyujinGUI to support RyujinCore
- RyujinGUI now uses RyujinCore to properly obfuscate code with full configuration support.
- Added new Ryujin logo.
- Added new Ryujin banner.
- Improved UI design, components, and more.
2025-07-03 09:37:46 -03:00
keowu
6d146f06bf feat: Initialize Ryujin GUI with basic layout and functionality
- Set up base GUI project structure using wxWidgets.
- Implement main window with custom styles and fixed dimensions.
- Add input fields for EXE, PDB, and output paths.
- Include obfuscation options with styled checkboxes.
- Add procedure list with add/remove functionality.
- Implement progress bar and "Run Obfuscator" button.
- Bind events for file selection, procedure management, and obfuscation run.
2025-07-01 21:17:23 -03:00
keowu
b078160d6b feat: Complete RyujinConsole implementation with full CLI support
The implementation of RyujinConsole is now complete. Users can fully customize the obfuscation process using a wide range of command-line options.
- Added full command-line interface support for RyujinConsole.
- Users can now specify input and output paths, and provide a PDB file for symbol mapping.
- Supports various obfuscation techniques via flags:
  - --virtualize: Enables code virtualization.
  - --junk: Inserts junk code.
  - --encrypt: Encrypts the obfuscated code.
  - --iat: Enables Import Address Table obfuscation.
  - --random-section: Uses a randomized PE section for output.
  - --keep-original: Preserves the original code (does not remove it).
- Allows fine-grained control over which procedures to obfuscate via --procs.
- Includes a --help option that provides detailed usage information.
- Example usage is provided in the built-in help message.
2025-06-28 20:53:53 -03:00
keowu
3683e8dbba feat: Improved project structure, added Ryujin includer header, export definitions, and more.
- The Ryujin console can now include the Ryujin core through a dedicated header file.
- Exporting is now standardized using a definition file.
- The project's compiled output is now placed in a folder named compiled, organized by the desired configuration (Release or Debug).
- Some code organization improvements have been made.
2025-06-24 21:23:15 -03:00
keowu
cbd7fb67f7 feat: Independent "Ryujin Core as a library" for better usability
- Ryujin now includes a component called Core, where the main obfuscator logic resides. It functions as an independent library that can be used anywhere.
- RyujinConsole now operates by loading the RyujinCore library to run the obfuscator.
- This is a preparation step for additional Ryujin components, such as a future Ryujin GUI and more features like passes and advanced obfuscation options.
2025-06-22 13:48:30 -03:00
keowu
eb6d14c4f2 feat: Improve the "Encrypt Obfuscated Code" feature to use TeaDelKew for encryption
- The "Encrypt Obfuscated Code" feature is now complete, using a new encryption algorithm called TeaDelKew, which is based on XTEA, to encrypt all obfuscated code and decrypt it at the entry point before execution.
- Some code improvements were also made.
2025-06-21 19:52:37 -03:00
keowu
83a8d2a2b9 feat: Implement full logic for the "Encrypt Obfuscated Code" feature
- The encryption feature in Ryujin is now fully implemented and functional. Currently, it uses a simple XOR-based algorithm for encryption and decryption. This approach will be improved in the future to enhance security.
- The feature overrides the Original Entry Point (OEP) with a new stub that decrypts all obfuscated code at runtime, then transfers control to the original entry point to continue normal execution.
2025-06-20 16:01:10 -03:00
keowu
06d5d8751b feat: Base for implementing the "Encrypt obfuscated code" feature.
- Started working on the logic to obfuscate opcodes in the Ryujin section to prevent static analysis. This is just the initial groundwork for the feature.
2025-06-19 18:37:41 -03:00
keowu
52f5cb1b11 feat: Ryujin MiniVM encrypted constants
- Ryujin MiniVM can now hide its immediate constants and bytecode from static analysis.
2025-06-18 21:31:29 -03:00
keowu
0b5c9b3808 feat: Improve Ryujin MiniVM to support dual arguments for better compatibility and more
- Ryujin MiniVM now supports dynamic register values, allowing it to store immediate values and registers using dual arguments: the first as the register operand (argument one) and the VM bytecode as the second (argument two).
- Code improvements and bug fixes.
2025-06-17 21:12:15 -03:00
keowu
da1c91d07a feat: Functional MiniVM Entry and Stable VM Stub for Running Virtualized Bytecode (To Be Improved in Future Commits)
- Ryujin can now interpret MiniVM bytecode. It inserts the MiniVM entry routine's RVA to enable execution of the VM interpreter.
- This is just the initial implementation and will be significantly improved in future commits. We're pushing our first working solution for now.
2025-06-16 21:32:34 -03:00
keowu
3a3a92f7ca feat: Initial implementation of Ryujin MiniVM virtualization
- Ryujin can now locate candidate instructions, convert them into VM bytecode, and insert the MiniVM entry point to enable execution of these bytecodes.
- Minor bug fixes.
2025-06-15 18:23:55 -03:00
keowu
b1b309d32f feat: Base for Simple-Virtualization Feature
- Prepare the codebase for the upcoming simple-virtualization feature for Ryujin.
2025-06-10 20:59:53 -03:00
keowu
a3a4f9884a feat: Completed implementation of dynamic junk code obfuscation algorithm
- Ryujin can now generate dynamic junk code instructions that are truly random on every iteration.
- Fixed several constants used in junk code obfuscation.
2025-06-10 20:20:30 -03:00
keowu
c1d6e48682 feat: add base for dynamic junk code obfuscation algorithm
- Implemented the base for Junk Code dynamic generation.
- Implemented logic for ZydisRegister to GP register conversion.
- Fixed a heuristic analysis feature that stored unused stack registers.
- Ignored reserved stack registers.
- Increased the number of obfuscation passes.
2025-06-09 21:21:53 -03:00
keowu
a337df3096 feat: Junk Code Insertion Obfuscation feature, fixed typos, and more
- Completed the core Junk Code Insertion feature.
-Translated comments.
- Made minor code improvements.
- Planned future enhancements for the Junk Code Insertion feature.
2025-06-09 11:10:01 -03:00
keowu
2c1bcbe4fe feat: Code improvements, new obfuscation options, and initial junk code insertion logic
- Some parts of the code have been organized.
- A new obfuscation option to encrypt the obfuscated code is now available.
- The foundation for junk code insertion has been implemented.
2025-06-08 12:04:43 -03:00
keowu
21cd08a327 feat: Finalized IAT Obfuscation Feature Implementation
- Completed the implementation of the IAT obfuscation logic.
- Integrated AsmJit-based code emission for obfuscation.
- Obfuscated the PEB and its offset entries to evade automated scanning.
 - Added a randomized algorithm to generate a unique key for each iteration.
- Implemented runtime polymorphic IAT resolution to disrupt disassemblers and decompilers.
2025-06-08 11:45:59 -03:00
keowu
351756a1b4 feat: Initial implementation of IAT obfuscation feature
- Initial IAT obfuscation feature, Ryujin can now obfuscate the IAT for the configured procedures.
- New basic block context generation.
- Bug fixes.
 - Improved obfuscation logic for better organization.
2025-06-07 21:55:58 -03:00
keowu
5b004bff54 feat: Enable "Ignore Remove Original Code After Obfuscation"
Users can now enable an option in the obfuscation config to "ignore the removal of the original code" after obfuscation.
2025-06-04 20:55:23 -03:00
keowu
a02c72a5e5 feat: Handle multiple procedures at once, remove and redirect original code after obfuscation, and fix bugs
- Now Ryujin removes all the original procedure code after obfuscation.
- Now Ryujin redirects the original procedure to the correct obfuscated location for execution.
- Now Ryujin can handle multiple procedures at once and their relocation, organizing each obfuscated procedure sequentially in the new section.
- Fixed the bug in "RyujinObfuscationCore::fix_branch_near_far_short" that could break in some unexpected branching cases.
2025-06-03 20:58:00 -03:00
keowu
caf7a199db feat: Fixing full obfuscated opcode relocations, Obfuscated section improvements and much more
- Now after processing the obfuscated opcodes the ryujin can fix all the relocations for the obfuscated code turning this code valid again after obfuscating considering all possible relocation cases.
- The section generator was been improved as well
- The logic to handle obfuscated opcodes and function is also improved.
- Some unused field for our logic has been removed.
2025-06-01 12:58:04 -03:00
keowu
3f8bced350 feat: Begin working on Ryuujin core
- Working on obfuscated core
- Optimizing Ryuujin
2025-05-30 09:25:43 -03:00
keowu
dff74ed8b9 feat: Finished logic for add new section, Fixed variable bugs, New Utils functions and mroe
- Finished the logic for add new segments.
- Moved the segments code to a independent class for PESections.
- New method utils.
- Bug fixies.
- Code organization.
2025-05-25 11:22:15 -03:00
keowu
43b50dffe4 feat: IatObfuscation option, Section Name Randomizing, New Section Logic
- Adding a new option on obfuscator for IAT obfuscation support.
- Adding a new logic to randomize section names.
- Adding the initial logic to add a new section in the PE file. and writing some ideas and some things to be able to continue the logic in a correct way.
2025-05-24 22:03:30 -03:00
keowu
ee3025b942 feat: Ryujin Basic Blocks, Opcode extractor and disassembler.
- Working on Ryujin Basic Block parsing feature.
- Opcodes Extractor.
- Disassembler.
- Fixing some bugs when printing names.
2025-05-24 19:50:25 -03:00
keowu
8c10fd6088 del: Removed duplicated file
- Removing the duplicated file from the last organization commit.
2025-05-24 10:04:14 -03:00
keowu
61fe4c93ac feat: Organizing all Ryujin code
- Improving the code organization to make Ryujin more EASY to port, in the future.
2025-05-24 10:02:58 -03:00
keowu
2fa8db0f98 feat: Ryujin configuration, procedures choise, and more
- Now we can configure the obfuscator. identify the functions to work and what kind of action to do.
2025-05-24 09:52:40 -03:00
keowu
8d91117554 feat: Ryujin pdb parsing
Finishing the Ryujin PDB parsing feature implementation.
2025-05-24 09:19:01 -03:00
keowu
82a15d5358 feat: Ryujin Models, PDB, Utils
- Organizing Ryujin code models
- PDB Parsing
- Utils
- More
2025-05-23 22:04:08 -03:00
keowu
4aa9381177 feat: Ryujin Core Logic
- Ryujin core logic, class organization.
- Ryujin Utils.
2025-05-23 17:52:19 -03:00
keowu
0a15f20bc1 add: RyujinConsole
Added the first version of Ryujin Console.
2025-05-23 16:34:51 -03:00