Skip to content

Releases: TheHolyOneZ/SharpMonoInjector-2.7-TheHolyOneZ-Edition-

SharpMonoInjector 2.8.0

22 Mar 12:02
d18207e

Choose a tag to compare

[2.8.0] - Latest Release

Added

  • Injection delay slider: Configurable delay (0–5000 ms) before injection fires — useful for games that need time to finish loading Mono before you inject.
  • Tray icon: Minimizing the window sends it to the system tray. Double-click or right-click the tray icon to restore, quick-inject, or exit.
  • Auto-refresh process list: Checkbox + interval slider (5–60 s, default 10 s) to automatically re-scan for Mono processes on a timer without interrupting the UI.
  • Process status indicator: Green/red dot next to each process in the list, updated every 3 seconds — instantly see if a process has died.
  • Assembly version display: After selecting a DLL the version and architecture (e.g. v1.2.0.0 | MSIL) are shown below the path field.

Bug Fixes

  • Inject panel scrolling: Fixed scroll requiring the user to hover directly over the scrollbar. Mouse wheel now works anywhere over the left panel.
  • Validation feedback: Class name and Method name fields now only highlight red and show a "Required" label after the user actually clicks Inject with the field empty — not on every keystroke. Status bar also reports exactly which field is missing.
  • Auto-refresh reliability: Auto-refresh now uses the exact same scan path as the manual Refresh button, eliminating a silent failure in the previous separate implementation.
  • Startup crash: Fixed NullReferenceException when AutoRefreshEnabled was loaded from settings before the timer was initialized.

SharpMonoInjector 2.7.1

09 Dec 16:36
add58e6

Choose a tag to compare

Changelog

[2.7.1] - Latest Release

Added

  • Keybinds: Comprehensive keyboard shortcuts for improved workflow efficiency:

    • Ctrl+O: Browse for assembly file
    • Ctrl+I: Open assembly inspector
    • F5: Inject assembly
    • F6: Eject assembly
    • F9: Refresh process list
    • Ctrl+L: Open log viewer
  • Inspector Tool: Advanced assembly introspection utility that allows users to:

    • Load and analyze .NET assemblies
    • Browse through namespaces, classes, and methods hierarchically
    • View detailed method signatures including parameters and return types
    • Click on any method to auto-populate the injection fields (namespace, class, method) in the main window
    • Provides a visual interface for exploring assembly structure without manual entry
  • Fixed Eject Button: Resolved functionality issues with the eject button to ensure reliable assembly removal

  • Reload and Force Remove Buttons: Added advanced ejection options:

    • Reload Button (EXPERIMENTAL): Enables hot-reloading of injected assemblies without restarting the target process. This allows for rapid iteration during development but may cause instability in some scenarios.
    • Force Remove Button: Provides a fallback option to forcibly remove assemblies from the tracking list when standard ejection fails
  • Profile Management Enhancements:

    • Moved saved profiles from the eject side to the inject side for better workflow organization
    • Redesigned the saved profiles UI with enhanced profile cards showing detailed information
    • Improved edit name profile UI with better user experience and validation
  • Auto-Inject Dependencies: Implemented dependency management system:

    • Toggle button to enable/disable automatic dependency injection
    • Custom dependency paths input field supporting multiple paths (one per line)
    • Smart path resolution: If auto-inject is enabled but no custom paths are specified, the system automatically searches for dependencies in the same directory as the selected DLL
    • If custom paths are provided, the system searches those specific folders for required assemblies
  • Profile System Integration: All new fields and options (dependencies, paths, etc.) are now saved and loaded via the profile system, ensuring complete configuration persistence

Technical Details

  • Enhanced UI layout with improved visual hierarchy and user experience
  • Better error handling and user feedback for injection operations
  • Persistent settings across application sessions
  • Improved logging for debugging and troubleshooting

SharpMonoInjector 2.7

18 Oct 16:44
fa9e133

Choose a tag to compare


CHANGELOG - 2.7

SharpMonoInjector v2.7 – Smart Injection Router (BepInEx / Thunderstore Support)

🎯 Simple Explanation

Before: SharpMonoInjector always injected directly into the game (unsafe with BepInEx)

After: SharpMonoInjector is now smart and chooses the best injection method automatically, including support for standard BepInEx and Thunderstore Mod Manager installations.


📝 What Was Added

🧩 Pipe Name Constant (Top of File)

private const string PIPE_NAME = "SharpMonoInjectorPipe_THOZE";

What it does: This is the "phone number" the injector uses to call the BepInEx plugin. Both must use the same name to communicate.


⚙️ Smart Injection Router (Main Change)

Old ExecuteInjectCommand():

  • Always used direct memory injection
  • Could crash if BepInEx was present

New ExecuteInjectCommand():

  • Checks three locations for BepInEx / Receiver Plugin:

    1. Standard game folder
    2. Thunderstore Local AppData
    3. Thunderstore Roaming AppData
  • Decides which injection method to use automatically:

┌──────────────────────────────────────────────┐
│  BepInEx + Plugin (Standard OR Thunderstore) │
└─────────────┬────────────────────────────────┘
              │
      ┌───────┴────────┐
      │                │
     YES              NO
      │                │
      ▼                ▼
  Use Pipe        Use Standard
  Injection       Injection
  (Safe!)         (Old Method)

🔍 New Helper Method: FindThunderstoreReceiver()

private string FindThunderstoreReceiver(string gameExecutableName)

What it does: Searches AppData directories for BepInEx installations managed by Thunderstore Mod Manager or r2modman profiles, ensuring injection works even when BepInEx isn't in the main game folder.


📬 New Helper Method: InjectViaPipe()

private bool InjectViaPipe(string assemblyPath, string namespaceName,
                          string className, string methodName)

What it does:

  • Opens a named pipe connection to the BepInEx plugin
  • Sends message: C:\path\to\mod.dll|Namespace.Class|Method
  • Waits 5 seconds for connection
  • Returns success/failure

Analogy: Like sending a text message to the game saying, “Hey, load this DLL for me!”


💾 Original Injection Still Here: ExecuteStandardInjection()

  • All the original injection code moved (not deleted)
  • Works exactly as before — direct memory injection
  • Used only when no BepInEx / Thunderstore setup is detected

🔄 How It All Works Together

🕹️ Scenario 1: Game WITHOUT BepInEx

User clicks "Inject"
↓
ExecuteInjectCommand() checks for BepInEx (Standard/Thunderstore)
↓
"No BepInEx found"
↓
Calls ExecuteStandardInjection()
↓
Normal injection (like always!)

🧩 Scenario 2: Game WITH BepInEx (No Receiver Plugin)

User clicks "Inject"
↓
ExecuteInjectCommand() checks for BepInEx
↓
"BepInEx found, but plugin missing"
↓
Shows warning popup
↓
Suggests installing the plugin

🚀 Scenario 3: Game WITH BepInEx + Plugin (Standard OR Thunderstore)

User clicks "Inject"
↓
ExecuteInjectCommand() checks for BepInEx
↓
"Both BepInEx and plugin found!"
↓
Calls InjectViaPipe()
↓
Sends message through pipe
↓
BepInEx plugin receives message
↓
Plugin safely injects (twice automatically)
↓
✅ Success!

🛡️ Safety Features

🧠 Detection Logic

string gameDirectory = Path.GetDirectoryName(gameProcess.MainModule.FileName);
string bepinexDirectory = Path.Combine(gameDirectory, "BepInEx");
string receiverPluginPath = Path.Combine(bepinexDirectory, "plugins",
                                         "SharpMonoInjectorTheHolyOneZEdition.dll");

bool standardBepInExFound = Directory.Exists(standardBepInExPath);
bool standardReceiverFound = File.Exists(standardReceiverPath);

// NEW: Thunderstore Check
string thunderstoreReceiverPath = FindThunderstoreReceiver(gameExecutableName);
bool thunderstoreReceiverFound = !string.IsNullOrEmpty(thunderstoreReceiverPath);

Translation:

  1. Find where the game .exe is
  2. Check standard BepInEx folder
  3. ✅ NEW: Check Thunderstore AppData locations for the plugin
  4. Use this info to decide which injection method to use

⚠️ Error Handling

try {
    using (var client = new NamedPipeClientStream(..., PIPE_NAME, ...)) {
        client.Connect(5000); // 5-second timeout
        // Send message
    }
} catch (TimeoutException) {
    // Show friendly error: "Is the game running and plugin installed?"
} catch (Exception e) {
    // Log other errors
}

Translation: If pipe communication fails, show a helpful error message instead of crashing.


📊 Code Flow Diagram

┌─────────────────────────────────────────┐
│  User Clicks "Inject" Button            │
└─────────────────┬───────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────┐
│  ExecuteInjectCommand()                 │
│  (Smart Router - Checks Standard/TS)    │
└─────────────────┬───────────────────────┘
                  │
        ┌─────────┴─────────┐
        │   Check All Dirs  │
        └─────────┬─────────┘
                  │
    ┌─────────────┼─────────────┐
    │             │             │
    ▼             ▼             ▼
┌───────┐   ┌──────────┐   ┌────────┐
│  No   │   │ BepInEx  │   │BepInEx │
│BepInEx│   │  Only    │   │+ Plugin│
└───┬───┘   └────┬─────┘   └────┬───┘
    │            │              │
    ▼            ▼              ▼
┌───────┐   ┌──────────┐   ┌────────┐
│Standard│  │  Show    │   │  Pipe  │
│Injection│ │ Warning  │   │Injection│
└────────┘  └──────────┘   └────┬───┘
                                 │
                                 ▼
                    ┌────────────────────┐
                    │ BepInEx Plugin     │
                    │ Receives & Injects │
                    └────────────────────┘

🎓 Key Concepts

🧵 Named Pipes

Simple explanation: Like a telephone line between two programs on the same computer.

  • Client (Injector): Calls the pipe
  • Server (BepInEx Plugin): Answers the pipe
  • Message: Path to DLL + Class + Method

Why not always use pipe?

  • Requires BepInEx to be installed
  • Slightly slower (adds overhead)
  • Direct injection is faster and simpler when safe

But when BepInEx IS installed:

  • Direct injection can cause crashes
  • Pipe injection avoids conflicts
  • ✅ Worth the tiny performance cost

🔍 What Didn't Change

  • ✅ All existing injection code still works
  • ✅ UI remains the same for users
  • ✅ Settings and profiles unchanged
  • ✅ Eject functionality unchanged
  • ✅ Process scanning unchanged

The changes are purely additive — old functionality remains untouched.


💭 Summary

🆕 What We Added

  • Detection system (checks for BepInEx + plugin in standard & Thunderstore paths)
  • Pipe communication method (talks to plugin)
  • Smart routing (chooses safest injection method)

🧩 What Stayed the Same

  • Everything else!

✅ Result

  • One codebase that works with AND without BepInEx
  • Fully automatic — user doesn’t need to think about it
  • Safe — prevents crashes
  • Backward compatible — old games still work

🎯 Bottom Line

Before: “I hope this doesn’t crash if BepInEx is installed…”
After: “I don’t care if BepInEx is there or not — it just works!”

That’s the magic of the Smart Injection Router. ✨

SharpMonoInjector 2.6

17 Oct 20:21
7dbc698

Choose a tag to compare

SharpMonoInjector TheHolyOneZ Edition v2.6

A modern, fully-featured Mono assembly injector with advanced stealth injection, real-time logging, profile management, and a beautiful dark UI designed for both power users and security researchers.

This version builds upon v2.5 TheHolyOneZ Edition, retaining the complete visual overhaul, stealth injection system, and performance optimizations, while introducing new automation tools, real-time insights, and workflow efficiency features.

SharpMonoInjector GUI


🧭 Overview

SharpMonoInjector allows injecting managed assemblies into Mono-embedded applications (most commonly Unity Engine based games). Unlike traditional injectors, the target process does not need to restart after updating your assembly — ideal for debugging or runtime modding.

Both x86 and x64 architectures are supported.


🆕 What's New in v2.6 (Latest Release)

🚀 Major Additions

🖤 Real-Time Logging (NEW)

  • Live log viewer integrated directly into the GUI
  • Color-coded by level: Info, Success, Warning, Error
  • Search and filter logs instantly
  • Export logs to .txt or .log
  • Clear logs with one click
  • Logs also saved to DebugLog.txt for persistence

🧩 Profile Management (NEW)

  • Save, load, rename, and delete multiple injection profiles per game
  • Profiles store process name, assembly path, namespace, class, method, and stealth mode preference
  • Load profiles instantly to auto-fill all injector fields
  • Convenient rename ✏️ and delete ✕ icons next to profiles

🔍 Process Monitor (NEW)

  • Watch processes automatically and trigger injections when targets appear
  • Assign profiles to specific processes for full automation
  • Filter for Mono/Unity-based games only
  • Supports background monitoring with configurable polling interval

🥷 Stealth Injection System (Introduced in v2.5)

Enable Stealth Mode Checkbox

  • One-click toggle for all stealth features
  • Visual indicator in the status bar
  • Displays: Injection successful (STEALTH MODE) upon completion

Stealth Features

  1. Memory Randomization
    Inserts 4–64 random NOP instructions before shellcode execution.
    Prevents signature-based detection and ensures each injection is unique.

  2. Thread Hiding
    Threads are created with CREATE_SUSPENDED and hidden using NtSetInformationThread,
    then safely resumed to evade enumeration and scanning tools.

  3. Execution Delay
    Adds a 150ms randomized delay before injection begins, reducing behavioral detection patterns.

  4. Debugger Detection
    Detects if a debugger is attached to the target process and displays a warning.

  5. Code Obfuscation (Experimental - Disabled by default)
    Encrypts shellcode with XOR and dynamically generates a decoder stub at runtime.


🎨 Visual & UX Improvements (Inherited + Enhanced)

From v2.5: Dark Theme & Layout Enhancements

  • Dark Interface: Deep black and gray tones with neon-green (#00E676) accents
  • Rounded Corners: Subtle 4–8px rounding for all buttons, inputs, and containers
  • Card-Based UI: Inject/Eject/Logs/Profiles sections organized in raised cards (#FF1E1E1E background)
  • Smooth Animations: Hover transitions, click feedback, and fading indicators
  • Premium Typography: Segoe UI font for modern legibility

From v2.6: Extended Usability

  • Resizable panels for log viewer and profile list
  • Scroll synchronization across panels
  • Improved scrollbar styling with consistent green theme
  • Persistent window size and layout memory between sessions

💾 Usage Guide

Method Signature

static void Method()

Both load and unload methods should follow this signature. The unload method is optional but recommended for clean resource management.

How to Inject

  1. Select your target Mono process from the dropdown
  2. Browse and select your DLL assembly
  3. Enter Namespace, Class, and Method
  4. Optionally enable Stealth Mode
  5. Click INJECT
  6. Watch the Log Viewer for injection results

When stealth is active, the status bar will display:

Injection successful (STEALTH MODE)

Administrator Privileges

  • The GUI automatically requests elevation when needed.
  • If denied, a prompt explains manual restart requirements.

⚙️ Performance Impact

Mode Injection Time Detection Risk
Normal ~50–100ms Higher
Stealth ~250–350ms Significantly Lower

Worth the extra 200ms for enhanced stealth.


🧩 Logging System (v2.6)

SharpMonoInjector GUI

Log Levels

Level Color Description
Info Blue Routine actions, refreshes, and general info
Success Green Successful injections/ejections
Warning Orange Debugger detected or minor recoverable issues
Error Red Injection or process-related failures

What Gets Logged

  • Process refresh events
  • Detection and enumeration results
  • Injection/ejection start and completion
  • Warnings and stealth alerts
  • Profile load/save actions
  • Process monitor detections

🗂️ Profile Management (v2.6)

Features

  • Create new profiles or save current injector configuration
  • Rename, duplicate, or delete profiles
  • Automatically load last used profile on startup
  • Organized by process name or custom label

How to Use

  1. Configure your desired injection settings
  2. Click Save Profile and name it
  3. Later, click Load Profile to restore instantly
  4. Rename or delete as needed

🔍 Process Monitor (v2.6)

Overview

Allows SharpMonoInjector to automatically inject when a target process starts.
SharpMonoInjector GUI

How to Use

  1. Add a process to the watch list
  2. Choose between Current Settings or Saved Profile
  3. Start Monitoring
  4. Injection executes automatically when detected

Includes optional filters to show only Mono or Unity-based processes.


📊 Anti-Detection Capabilities

When Stealth Mode is active:

✅ Evades Static Signatures – Random NOP padding breaks consistent patterns
✅ Evades Memory Scanners – Randomized shellcode layout
✅ Evades Thread Enumeration – Threads hidden via NtSetInformationThread
✅ Evades Timing Analysis – Randomized execution delays
✅ Debugger Awareness – Warns if target process has active debugger

Recommended Use Cases

  • Game modding in offline or single-player environments
  • Software security research
  • Dynamic code injection testing in controlled systems

🧾 Version History

v2.6 (TheHolyOneZ Edition)

  • Added real-time log system with color-coded viewer and export
  • Introduced profile management (save/load/rename/delete)
  • Added process monitor for automated injections
  • Extended stealth injection logging
  • Improved UI scaling and performance
  • Minor bug fixes and code cleanup

v2.5 (TheHolyOneZ Edition)

  • Implemented stealth injection system (memory randomization, thread hiding, etc.)
  • Fixed ComboBox process display bug
  • Added debugger detection and better thread lifecycle management
  • Major dark theme UI overhaul and layout improvements
  • Updated to .NET Framework 4.8

Earlier Versions

  • wh0am1 Mod: Fixed x86/x64 detection, process bugs, and privilege handling
  • Warbler Original: Initial Mono injection implementation

👥 Credits

  • TheHolyOneZ – Visual overhaul, stealth system, UI redesign, logging, profiles, and automation
  • wh0am1 – Bug fixes and original modernization (UnknownCheats Thread)
  • Warbler – Original SharpMonoInjector creator (GitHub)

⚠️ Disclaimer

This software is intended for educational and legitimate testing purposes only.
It is not to be used for cheating, bypassing anti-cheat systems, or unauthorized software modification.

Allowed use cases:

  • Game mod development in personal or research contexts
  • Security testing and controlled vulnerability research
  • Reverse engineering for learning purposes

Prohibited use cases:

  • Multiplayer cheating
  • Commercial software exploitation
  • Illegal or unethical activities

📜 License

This project retains the same license as the original SharpMonoInjector by Warbler.


Report Bugs Here:
discord.gg/Wp9Mf4YfTS

Design, modernization, and enhancements by TheHolyOneZ
README enhanced with GPT-5 assistance for structured clarity and extended documentation.

Full Changelog: https://github.com/TheHolyOneZ/SharpMonoInjector-2.6-TheHolyOneZ-Edition-/commits/SharpMonoInjector