Menu

Tree [fec3d8] dev /
 History

HTTPS access


File Date Author Commit
 BitMono 2022-11-07 sunnamed434 sunnamed434 [fdc450] Update DotNetHook.cs
 resources 2022-10-23 sunnamed434 sunnamed434 [05064f] Add BitMono preview
 .gitattributes 2022-09-18 sunnamed434 sunnamed434 [64a2c2] Initial commit
 .gitignore 2022-09-18 sunnamed434 sunnamed434 [caacf9] Create .gitignore
 CHANGELOG.md 2022-11-07 sunnamed434 sunnamed434 [fec3d8] Create CHANGELOG.md
 README.md 2022-11-05 sunnamed434 sunnamed434 [8427be] Update README.md

Read Me

BitMono logo
Free open-source protector for Mono, empty decompilers? bits? crashes?!
All this and even more is right here

Before and after obfuscation preview by BitMono

GUI

CLI

Configuration ## Documentation Open **[wiki](https://github.com/sunnamed434/BitMono/wiki)** to read protections functionnality and more. ## How your app will look since BitMono obfuscation - just in a few-words * Seems to C++ application but this is actual C# application * Crash of decompilers when analyzing types * Broken decompilers * Broken IL Code * Invisible types * No code ## Obfuscation Features * StringsEncryption * **[BitDotNet](https://github.com/0x59R11/BitDotNet)** (based and improved on existing protection) * **[BitMethodDotnet](https://github.com/sunnamed434/BitMethodDotnet)** (based and improved on existing protection) * **[DotNetHook](https://github.com/Elliesaur/DotNetHook)** (based on existing protection) * Call to calli * FieldsHiding * ObjectReturnType * NoNamespaces * FullRenamer * AntiDebugBreakpoints ## Quick Start `BitMono.CLI <path to="" file="">/drag-and-drop/first file in Base directory or use BitMono.GUI (GUI Windows only)` Drop dependencies in `base` directory ## Configuring Protections Use `protections.json` - by default all protections are configured as it should, if something works not as it intentional you always may disable something or enable or even remove. _Executing of protections depends how they are located in `protections.json` (protections order is up-to-down, sometimes order may ignored by special protection executing order eg `IStageProtection` as well as `BitDotNet`, `FieldsHiding`, `CallToCalli` and `DotNetHook` - they are executing always at their own order)._ Lets look at this example, first will be executed `AntiILdasm` then `AntiDe4dot` and `ControlFlow` and `BitDotNet` and `FieldsHiding`. Always you could write in `protections.json` - protections which are doesnt mentioned here or if you create protection by yourself. How to **[edit](https://github.com/sunnamed434/BitMono/tree/main/BitMono/BitMono.Host#imporving-obfuscation-process-for-everyone)** </path>

{
  "Protections": [
    {
      "Name": "BitDotNet", // Executing always after all protections
      "Enabled": true,
    }
    {
      "Name": "AntiILdasm",
      "Enabled": true
    },
    {
      "Name": "AntiDe4dot",
      "Enabled": true
    },
    {
      "Name": "ControlFlow",
      "Enabled": true
    },
    {
      "Name": "FieldsHiding", // Executing always after all protections
      "Enabled": true
    }
  ]
}
## Excluding Protection(s) More info about excluding - ctor, cctor, interfaces etc to read is **[here](https://github.com/sunnamed434/BitMono/wiki/Excluding-Protection(s))**
[assembly: Obfuscation(Feature = "Name")] // Ignoring whole assembly or in the AssemblyInfo.cs (sometimes it would not exist in your project)
namespace Project
{
}

[Obfuscation(Feature = "CallToCalli")]
public class ProductModel
{
    [Obfuscation(Feature = "Renamer")]
    public string Name { get; set; }

    [MethodImpl(MethodImplOptions.NoInlining)] // Add this attribute to ignore renaming of method
    void Method()
    {
    }
}
## No required dependency (Deprecated file for obfuscation) Failed to resolve dependency Assembly-CSharp-firstpass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Use `appsettings.json` and set `FailOnNoRequiredDependency` to false, be careful with this parameter, change it in cases when file truly deprecated How to **[edit](https://github.com/sunnamed434/BitMono/tree/main/BitMono/BitMono.Host#imporving-obfuscation-process-for-everyone)**
{
  // Adding visible things that shows you have been used BitMono to protect your app
  "Watermark": true,

  // Excluding from obfuscation if method has [MethodImpl(MethodImplOptions.NoInlining)] attribute
  "NoInliningMethodObfuscationExcluding": true,

  // Excluding from obfuscation if it is a type/method and etc 
  // should has an [Obfuscation(Feature = "Name")] attribute with Protection name (Feature) and Excluding set to true
  "ObfuscationAttributeObfuscationExcluding": true,

  // Sometimes when you don`t have needed dependency for your app, a tons of reasons could be for that, 
  // if you got error that says you don`t have needed dependency first of all atleast try to add this dependency
  // otherwise if this is deprecated - you can set this to false to ignore error and continue obfuscation
  // NB! but be aware of kind a weird errors and issues that breaking you app and it stop working after that
  // Stay it true if it possible!
  "FailOnNoRequiredDependency": true,

  "Logging": {
    "LogsFile": "logs.txt"
  },
}
## Excluding of Having issues with third-parties (API/Libraries) Use `criticals.json` Add to `CriticalMethods`, `CriticalInterfaces` or `CriticalBaseTypes` your potential critical things if you have it.
There is already supported all `Unity` methods and third-party frameworks as `RocketMod`, `rust-oxide-umod`, `OpenMod`. How to **[edit](https://github.com/sunnamed434/BitMono/tree/main/BitMono/BitMono.Host#imporving-obfuscation-process-for-everyone)**
{
  "CriticalMethods": [
    // Unity
    "Awake",
    "OnEnable",
    "Start",
    "FixedUpdate",
    // .. etc

  ],
  "CriticalInterfaces": [
    // RocketMod
    "IRocketPlugin",
    "IRocketCommand",
    "IRocketPluginConfiguration",
    "IDefaultable",

    // OpenMod
    "IOpenModPlugin"
  ],
  "CriticalBaseTypes": [
    // RocketMod
    "RocketPlugin",

    // OpenMod
    "OpenModUnturnedPlugin",
    "OpenModUniversalPlugin",
    "Command",

    // rust-oxide-umod
    "RustPlugin"
  ]
}
Credits ------- **[0x59R11](https://github.com/0x59R11)** for his acquaintance in big part of **[BitDotNet](https://github.com/0x59R11/BitDotNet)** that breaks files for mono executables! **[Gazzi](https://github.com/GazziFX)** for his help that [me](https://github.com/sunnamed434) asked a lot! **[Elliesaur](https://github.com/Elliesaur)** for his acquaintance in **[DotNetHook](https://github.com/Elliesaur/DotNetHook)** that hides methods execution.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.