File | Date | Author | Commit |
---|---|---|---|
BitMono | 2022-11-07 |
![]() |
[fdc450] Update DotNetHook.cs |
resources | 2022-10-23 |
![]() |
[05064f] Add BitMono preview |
.gitattributes | 2022-09-18 |
![]() |
[64a2c2] Initial commit |
.gitignore | 2022-09-18 |
![]() |
[caacf9] Create .gitignore |
CHANGELOG.md | 2022-11-07 |
![]() |
[fec3d8] Create CHANGELOG.md |
README.md | 2022-11-05 |
![]() |
[8427be] Update README.md |
Free open-source protector for Mono, empty decompilers? bits? crashes?!
All this and even more is right here
## 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
}
]
}
[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()
{
}
}
{
// 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"
},
}
{
"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"
]
}