This commit is contained in:
yck1509 2014-03-28 19:39:37 +08:00
Родитель 9e120dff55
Коммит 00a0b8a9c2
5 изменённых файлов: 271 добавлений и 0 удалений

23
LICENSE Normal file
Просмотреть файл

@ -0,0 +1,23 @@
ConfuserEx is licensed under MIT license.
----------------
Copyright (c) 2014 yck1509
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

144
ProjectFormat.md Normal file
Просмотреть файл

@ -0,0 +1,144 @@
ConfuserEx Project Format
=======================
ConfuserEx projects (*.crproj) is an XML formatted document describing the ConfuserEx project.
For details of the format, please refer to the XML schema at `Confuser.Core\Project\ConfuserPrj.xsd`.
Element `project`
-----------------
Element `project` is the root element of the project document.
**Attributes:**
`outputDir`:
The directory which ConfuserEx stores the output files.
`baseDir`:
The base directory of all relative path used in the project document.
If this attribute value is also a relative path, the result depends on the implementation.
In the offical implementation (Confuser.CLI), it would be based on the location of project file.
`seed`:
The seed of the random generator in protection process.
`debug`:
Indicates whether the debug symbols (*.pdb) are generated.
Currently unused.
**Elements:**
`rule`:
The global protection rules applied to all modules.
Optional.
`packer`:
The packer setting.
Optional.
Currently unused.
`module`:
The settings of individual modules.
`probePath`:
The directories in which ConfuserEx searches for dependencies.
Element `module`
----------------
Element `module` describes the settings of individual modules.
**Attributes:**
`path`:
The path of the module.
`snKey`:
The path to the Strong Name Key used to sign the module.
Optional.
`snKeyPass`:
The password of the SNK if a PFX container is used in `snKey`.
Optional.
**Elements:**
`rule`:
The protection rules applied to the module.
Element `rule`
--------------
Element `rule` describes a rule that determine how the protections are applied.
**Attributes:**
`inherit`:
Indicates whether this rule inherits the settings from the previous rules.
Default to `true`.
`pattern`:
The RegEx pattern used to match the target components of this rule.
`preset`:
The protection preset of the rule.
Possible values are `none`, `minimum`, `normal`, `aggressive` and `maximum`.
Default to `none`.
**Elements:**
`protection`:
The protection settings.
Element `protection` and `packer`
---------------------------------
Element `protection` and `packer` describe the settings of individual protection/packer.
**Attributes:**
`action`:
Indicates whether the protection are to be added or removed from settings.
Possible values are `add` and `remove`.
Default to `add`.
`id`:
The identifier of the protection/packer.
**Elements:**
`argument`:
The arguments that passed to the protection.
Optional.
Applying rules
--------------
The rules are applied from local to global, from begin to end.
ConfuserEx will keep a list of protections for every components, and applies matching rules in order.
For each rules, ConfuserEx will do:
1. If the component does not match with the rule's pattern, skip the rule.
2. If the rule does not inherit previous settings (i.e. no `inherit`), clear the current protection list.
3. Fill the protection list with the protections contained in the specified `preset` value of the rule.
4. For each protection settings in the rule:
5. If `action` is remove, remove the protection from the list.
6. If `action` is add, add the protection settings to the list.
The value of the component that used to match with rules' patterns is basically the full name provided by dnlib.
Here's some examples:
Type: `Namespace.Type/NestedType`
Method: `System.Void Namespace.Type::Method<!!0,!!1>(System.String,System.Int32)`
Field: `System.String Namespace.Type::Field`
Property: `System.String Namespace.Type::Property`
Indexer: `System.String Namespace.Type::Items(System.Int32)`
Event: `System.EventHandler Namespace.Type::Event`
Examples
----------------
ConfuserEx projects that are working for ILSpy and PaintDotNet can be found under `additional` directory as examples.

45
README.md Normal file
Просмотреть файл

@ -0,0 +1,45 @@
ConfuserEx
========
ConfuserEx is a open-source protector for .NET applications.
It is the successor of [Confuser](http://confuser.codeplex.com) project.
Features
--------
* Supports .NET Framework 2.0/3.0/3.5/4.0/4.5
* Symbol renaming
* Protection against debuggers/profilers
* Protection against memory dumping
* Control flow obfuscation
* Reference hiding proxies
* Extensible plugin API
* Many more are coming!
Usage
-----
`Confuser.CLI <path to project file>`
The project file is a ConfuserEx Project (*.crproj).
The format of project file can be found in ProjectFormat.md
Bug Report
----------
If your application does not work with ConfuserEx, feel free to submit a bug report!
If you decided to submit a bug report, please include the following information:
1. The version of ConfuserEx you are using.
2. The protection and packer settings you used.
3. The input and output sample files that does not work.
If you can't disclose the application, you can try reducing it to a minimum case that does not work in ConfuserEx,
or you can sent it to me through email to <confuser.net@gmail.com> if you prefer not to disclose it publicly.
4. If it sometimes works and sometimes does not work, it might be better to include the seed since ConfuserEx uses random mechanism in protection.
License
-------
See LICENSE file for details.
Credits
-------
**[0xd4d](http://bitbucket.org/0xd4d)** for his awesome work and extensive knowledge!
Members of **[Black Storm Forum](http://board.b-at-s.info/)** for their help!

26
additional/ilspy.crproj Normal file
Просмотреть файл

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<project baseDir="." outputDir="Confused" xmlns="http://confuser.codeplex.com">
<rule preset="none" pattern=".*">
<protection id="rename">
<argument name="mode" value="unicode" />
</protection>
<protection id="anti ildasm" />
<protection id="anti debug" />
<protection id="rename">
<argument name="mode" value="unicode" />
</protection>
<protection id="ref proxy" />
<protection id="ctrl flow" />
</rule>
<module path="ICSharpCode.AvalonEdit.dll" />
<module path="ICSharpCode.Decompiler.dll" />
<module path="ICSharpCode.NRefactory.dll" />
<module path="ICSharpCode.NRefactory.CSharp.dll" />
<module path="ICSharpCode.NRefactory.VB.dll" />
<module path="ICSharpCode.TreeView.dll" />
<module path="ILSpy.BamlDecompiler.Plugin.dll" />
<module path="ILSpy.exe" />
<module path="ILSpy.SharpDevelop.LGPL.dll" />
<module path="Mono.Cecil.dll" />
<module path="Mono.Cecil.Pdb.dll" />
</project>

33
additional/pdn.crproj Normal file
Просмотреть файл

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<project baseDir="." outputDir="Confused" xmlns="http://confuser.codeplex.com">
<rule preset="none" pattern=".*">
<protection id="rename">
<argument name="mode" value="unicode" />
</protection>
<protection id="anti ildasm" />
<protection id="anti debug" />
<protection id="rename">
<argument name="mode" value="unicode" />
</protection>
<protection id="ref proxy" />
<protection id="ctrl flow" />
</rule>
<rule preset="none" pattern="PaintDotNet.Menus\..*Menu(|Item|Base)$">
<protection id="rename" action="remove" />
</rule>
<rule preset="none" pattern="PaintDotNet.Menus\..*Menu::menu.*$">
<protection id="rename" action="remove" />
</rule>
<rule preset="none" pattern="PaintDotNet.Tools\..*Tool(|Base)$">
<protection id="rename" action="remove" />
</rule>
<rule preset="none" pattern="PaintDotNet.IndirectUI\..*PropertyControl.*\(\)$">
<protection id="rename" action="remove" />
</rule>
<module path="PaintDotNet.Base.dll" />
<module path="PaintDotNet.Core.dll" />
<module path="PaintDotNet.Data.dll" />
<module path="PaintDotNet.Effects.dll" />
<module path="PaintDotNet.exe" />
<module path="PaintDotNet.SystemLayer.dll" />
</project>