关于混淆:如何使用ConfuserEx?

How to use ConfuserEx?

我想尝试一下该程序,但不知道如何使用它。

我已经在作者的网站https://github.com/yck1509/ConfuserEx上进行搜索,但是对于像我这样的编程新手来说,该网站上的示例不够清楚。

因此,我在这里提出我的问题,希望有人能向我展示如何使用简单的英语以及一些示例。 这将是非常棒的,非常感谢。


从此处获取最新的二进制版本:
https://github.com/yck1509/ConfuserEx/releases

用于命令行(Confuser.CLI.exe):

1
Confuser.CLI.exe  myProjectFile.crproj

项目文件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<project baseDir="c:" outputDir="c:\Confused" xmlns="http://confuser.codeplex.com">
    <rule preset="none" pattern="true">
        <protection id="anti debug" />
        <protection id="anti dump" />
        <protection id="anti ildasm" />
        <protection id="anti tamper" />
        <protection id="constants" />
        <protection id="ctrl flow" />
        <protection id="invalid metadata" />
        <protection id="ref proxy" />
        <protection id="rename" />
        <protection id="resources" />
    </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>

cmd line

配置文件格式:https://github.com/yck1509/ConfuserEx/blob/master/docs/ProjectFormat.md

与GUI(ConfuserEx.exe)一起使用:

gui

  • 在项目选项卡中

  • 选择一个基本目录
  • 单击+按钮添加DLL(模块)
  • 在设置标签中

  • 点击<全局设置>
  • 单击+按钮。添加了新规则。当模式匹配时,将执行规则,因此" True"表示将始终执行规则。
  • 单击编辑按钮。
  • 选择预设的"最大",然后关闭
  • 在保护标签中

  • 单击保护!

  • 该答案涵盖了以下情况:您有一个具有以下解决方案的解决方案:(A)可能相互引用的多个项目,以及(B)您希望在Visual Studio安装程序项目中自动进行混淆。

    1)在每个项目中直接在项目的文件夹中添加Confuser.crproj文本文件。在此文件夹中,您应该在" bin"," ob"," resources"等文件夹中看到。无需将这些文件附加到Visual Studio中的解决方案。文本文件应如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="utf-8"?>
    <project baseDir="obj
    elease" outputDir="..
    elease" xmlns="http://confuser.codeplex.com">
        <rule preset="none" pattern="true">
            <protection id="anti debug" />
            <protection id="anti dump" />
            <protection id="anti ildasm" />
            <protection id="anti tamper" />
            <protection id="constants" />
            <protection id="ctrl flow" />
            <protection id="invalid metadata" />
            <protection id="ref proxy" />
            <protection id="resources" />
        </rule>
        <module path="MyLibrary.dll" />
        <probePath>..\..\bin
    elease</probePath>
    </project>

    将MyLibrary.dll替换为项目的输出。 (如果是可执行文件,请将.dll替换为.exe。)

    ConfuserEX为相对路径选择了不同的起点,这就是为什么路径在文件中看起来很奇怪的原因。

    此步骤的关键元素是混淆每个项目的" obj"输出。这是为了帮助您的Windows安装程序项目获得混淆的版本。

    2)在每个项目的构建后事件中,添加如下构建后事件:

    1
    if"$(ConfigurationName)" =="Release" $(SolutionDir)..\ConfuserEX\Confuser.CLI.exe $(ProjectDir)Confuser.crproj

    第一个条件是仅在发布版本中进行混淆。在这里,您需要调整路径以匹配Confuser.CLI.exe的路径。我在解决方案的根文件夹旁边有ConfuserEX文件夹。

    3)在您的Setup项目中,我们需要解决的问题是确保包装能够拾取您混淆后的版本。安装程序具有一些模糊的逻辑来决定从哪个文件夹中拾取每个程序集。我们将迫使它选择合适的。为此,您必须:

    (3a)将所有项目添加为"项目输出",这确保" obj"文件夹中的混淆文件将其添加到程序包中。

    (3b)检查安装项目的"检测到的依赖项"部分。每当您看到一个项目生成的依赖项时,请转到其"属性"并将其标记为Exclude = True。这可以确保由于推理过程而不会将软件包中的混淆版本替换为非混淆版本。


    对于其他遇到问题的人:
    我下载了它,但主机丢失了dnlib。您可以单独下载dnlib,将其复制到dnlib文件夹中,然后进行编译。

    这应该适用于大多数情况,但是对我来说,对我的exe来说,它在任何exe上均出现"错误的dos格式"错误。也许是因为我已经更新到vs2015和4.5.3(.net 5或6或他们现在想称呼它的任何东西)。我想也许就是这样。但事实并非如此(最高编译率为4.5)。

    在谷歌上看我的假设是它无法更新文件,所以花了1个小时+将元组从您的类转换为.net 4元组。并将所有项目更新为4.5。

    如果可以的话,你们需要检查您的github分支并点击下载,然后进行编译..它应该从站点进行编译,而不会。我确信这是一个很棒的产品。有点粗糙,因为它不是供初级用户使用的。也许您只可以链接到EXE?这可能会有所帮助,因此人们不必处理编译问题。

    顺便说一句,这是非常好的东西,看起来即使收费的东西也可以做很多事情,而不仅仅是学习上的弯曲。

    另一个注意事项是,看起来其中有一个RuntimeEnvironment.GetSystemVersion()[1] == 4可能应该是RuntimeEnvironment.GetSystemVersion()[1] > 3.9(经过一些解析),所以您得到4和4.5

    **更新。已更新为4.5,并且拖放操作停止,但仍如上所述。
    原本使用4.5.3,但您没有使用任何新功能。

    我最终得到的结果,稍后将进行编辑以指出其是否有效。
    https://onedrive.live.com/redir?resid=88D92E4D40C0593C%21105

    与上面。


    对我来说,这种方法效果最好:

    定义一个crproj:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?xml version="1.0" encoding="utf-8"?>
    <project baseDir="c:\program files\confuserex" outputDir="c:\program files\confuserex\Confused" xmlns="http://confuser.codeplex.com">
        <rule preset="none" pattern="true">
            <protection id="anti debug" />
            <protection id="anti dump" />
            <protection id="anti ildasm" />
            <protection id="anti tamper" />
            <protection id="constants" />
            <protection id="ctrl flow" />
            <protection id="invalid metadata" />
            <protection id="ref proxy" />
            <protection id="rename" />
            <protection id="resources" />
        </rule>
        <module path="C:\Temp\dlhsoft\DlhSoft.HierarchicalData.LightWPF.Controls.dll" />
        <module path="C:\Temp\dlhsoft\DlhSoft.ProjectData.GanttChart.LightWPF.Controls.dll" />
        <module path="C:\Temp\dlhsoft\DlhSoft.ProjectData.PertChart.LightWPF.Controls.dll" />
    </project>

    并使用以下命令从命令行调用此文件:

    1
    "c:\program files\confuserex\confuserex.exe""c:\program files\confuserex\myprojectfile.crproj"