You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
BitMono is a free, open-source C# obfuscator designed mainly for Mono, a version of the .NET framework used by Unity and other platforms. You can use it with the full .NET framework, but some features might not work as expected. Some protections work with .NET Core but not Mono.
11
+
BitMono is a free, open-source C# obfuscator that was initially designed and intended mainly for Mono, however, now you're feel free to use it for any .NET app, but, be careful some protections work on .NET Framework, some on .NET, some on Mono, some on Unity only.
12
12
13
-
BitMono uses [AsmResolver][asmresolver] instead of dnlib for handling assemblies. If you have questions or issues, please let us know [here][bitmono_issues]. Download the latest version of BitMono [here][bitmono_releases].
13
+
BitMono uses [AsmResolver][asmresolver] instead of [dnlib][dnlib] (which we used in the past) for handling assemblies. If you have questions or issues, please let us know [here][bitmono_issues]. Download the latest version of BitMono [here][bitmono_releases].
14
14
15
15
You can also use BitMono as an engine to build custom obfuscators. It is built using dependency injection (DI) using Autofac and follows the latest C# best practices.
16
16
@@ -83,6 +83,16 @@ Read the **[docs][bitmono_docs]** to read protection, functionality, and more.
83
83
84
84
## Usage
85
85
86
+
### Download
87
+
88
+
Go and get [Latest BitMono Release][bitmono_latest_release] and download preferred archive file, and make sure to select the similar or same Target Framework of the app that you are going to protect, for example:
89
+
90
+
- Your Target File is for .NET 8 then use BitMono for .NET 8 `BitMono-v0.25.3+e64e54d3-CLI-net8.0-win-x64.zip`
91
+
- Your Target File is for .netstandard then use BitMono for .NET Framework or .NET 8 `BitMono-v0.25.3+e64e54d3-CLI-net8.0-win-x64.zip`
92
+
- Your Target File is .NET Framework then use BitMono for .NET Framework `BitMono-v0.25.3+e64e54d3-CLI-net462-win-x64.zip`
93
+
94
+
If you select wrong BitMono build you have a risk that your file going to be protected incorrectly, because you use different target framework build.
95
+
86
96
### Pre-Require
87
97
88
98
Set one of setting from `protections.json` to `true`.
You're probably stuck on a problem, when you want to use your ``.dll`` after protection, you protect it via BitMono and try to reference it in IDE or whatever else, you're doing a bit wrong, you need to have an original copy and use it as a reference, and as output folder (i.e Release\...) drop there a protected version of your ``.dll``.
4
+
If you're having trouble referencing your ``.dll`` file after protecting it with BitMono, follow these steps:
5
+
6
+
1. **Keep an Original Copy**: Always keep an original, unprotected copy of your ``.dll`` file. This will be used as a reference in your IDE or other tools.
7
+
8
+
2. **Protect the DLL**: Use BitMono to protect your ``.dll`` file.
9
+
10
+
3. **Set Up Output Folder**: In your output folder (e.g., ``Release\...``), place the protected version of your ``.dll`` file.
11
+
12
+
By following these steps, you can ensure that your project references the original ``.dll`` while deploying the protected version.
Copy file name to clipboardexpand all lines: docs/source/protections/antidebugbreakpoints.rst
+7-1
Original file line number
Diff line number
Diff line change
@@ -3,4 +3,10 @@ AntiDebugBreakpoints
3
3
4
4
How it works?
5
5
-------------
6
-
Protection adds things in method bodies that check if from the last execution passed more than the const value, then as a result the program will be crashed.
6
+
7
+
Protection adds things in method bodies that check if from the last execution passed more than the const value, then as a result the program will be crashed.
Copy file name to clipboardexpand all lines: docs/source/protections/antidecompiler.rst
+6
Original file line number
Diff line number
Diff line change
@@ -3,10 +3,16 @@ AntiDecompiler
3
3
4
4
How it works?
5
5
-------------
6
+
6
7
Protection looks for a nested type in <Module> and sets non-public accessibility attributes, according to ECMA CIL standard nested types should always have one of them applied, but Mono doesn't care about this standard.
7
8
8
9
That means if someone will try to analyze the protected nested type, dnSpy will crash, however in a newer version, this exploit was fixed.
Copy file name to clipboardexpand all lines: docs/source/protections/billionnops.rst
+6-1
Original file line number
Diff line number
Diff line change
@@ -16,4 +16,9 @@ As a result when someone will try to analyze this method will cause a crashed dn
16
16
Cons
17
17
----
18
18
19
-
Be careful because this protection will increase a file size a lot, and a bigger file size will cause more questions by users, most of us when see a big file size think that this file is obfuscated.
19
+
Be careful because this protection will increase a file size a lot, and a bigger file size will cause more questions by users, most of us when see a big file size think that this file is obfuscated.
Copy file name to clipboardexpand all lines: docs/source/protections/bitdecompiler.rst
+6
Original file line number
Diff line number
Diff line change
@@ -3,8 +3,14 @@ BitDecompiler
3
3
4
4
How it works?
5
5
-------------
6
+
6
7
This protection works the same as BitDotnet protection, but with some fixes. However, since after Unity 2021 and higher it stopped working correctly and since many of users asked to figure something out we made this protection as a solution =)
Copy file name to clipboardexpand all lines: docs/source/protections/bitdotnet.rst
+6
Original file line number
Diff line number
Diff line change
@@ -3,10 +3,16 @@ BitDotNet
3
3
4
4
How it works?
5
5
-------------
6
+
6
7
The protection uses dnlib exploit and modifies the file metadata (PE) to make it unrecognizable for dnSpy, as the result, at first sight, it will look like not a .NET file, for example, a C++ file.
7
8
8
9
Mono doesn't care about the thing which dnlib care about, and because of that it does what it does
Copy file name to clipboardexpand all lines: docs/source/protections/bitmono.rst
+6
Original file line number
Diff line number
Diff line change
@@ -3,10 +3,16 @@ BitMono
3
3
4
4
How it works?
5
5
-------------
6
+
6
7
Protection modifies the file metadata (PE) to make it unrecognizable for decompilers or other tools such as Detect It Easy, as the result most of the tools will be fooled to think that this is an MS-DOS Executable as Detect It Easy does, decompilers will just not be able to open it up.
7
8
8
9
Mono doesn't care about the things which decompilers/tools care about, and because of that it does what it does.
Copy file name to clipboardexpand all lines: docs/source/protections/fullrenamer.rst
+7-1
Original file line number
Diff line number
Diff line change
@@ -3,8 +3,14 @@ FullRenamer
3
3
4
4
How it works?
5
5
-------------
6
+
6
7
Protection renames types/methods/fields, however, ignores things such as reflection, Unity Methods (Update/FixedUpdate/LateUpdate, i.e all of them), overrides from Thanking (OV_methodName), and the most popular frameworks for plugin development in Unturned and Rust on GitHub - RocketMod, OpenMod, and rust-oxide-umod, you even could specify your methods/types to ignore.
7
8
8
9
If you want you can easily configure `criticals.json` to ignore strings and lot of stuff.
9
10
10
-
Be careful, because renamer is tricky protection, not always useful, and does not always work properly. But, if you configure BitMono correctly Renamer can be a great protection (I'm about big projects, not crackmes).
11
+
Be careful, because renamer is tricky protection, not always useful, and does not always work properly. But, if you configure BitMono correctly Renamer can be a great protection (I'm about big projects, not crackmes).
Copy file name to clipboardexpand all lines: docs/source/protections/stringsencryption.rst
+6
Original file line number
Diff line number
Diff line change
@@ -3,8 +3,14 @@ StringsEncryption
3
3
4
4
How it works?
5
5
-------------
6
+
6
7
Protection encrypts strings using basic AES encryption, but not everyone like it because it makes the worse performance of application, but can be used with AntiDecompiler to crash dnSpy while analyzing the used class, also makes the RVA of the byte[] 0
0 commit comments