added readme
This commit is contained in:
Родитель
9e120dff55
Коммит
00a0b8a9c2
|
@ -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.
|
|
@ -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.
|
|
@ -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!
|
|
@ -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>
|
|
@ -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>
|
Загрузка…
Ссылка в новой задаче