【问题标题】:How to use ConfuserEx?如何使用ConfuserEx?
【发布时间】:2014-08-01 00:19:28
【问题描述】:

我想试试这个程序,但我不知道如何使用它。

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

所以我在这里发布我的问题,希望有人能告诉我如何用简单的英语和一些例子来使用它。这将是非常棒的,非常感谢。

【问题讨论】:

  • 据我所知,您在编译的可执行文件所在的目录中创建了一个.crproj 文件(请参阅ProjectFormat.mdadditional/ 中的示例之一),然后只需调用ConfuserEX从命令行。

标签: obfuscation


【解决方案1】:

从这里获取最新的二进制版本: https://github.com/mkaring/ConfuserEx/releases

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

Confuser.CLI.exe  myProjectFile.crproj

项目文件示例:

<?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>

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

用于 GUI (ConfuserEx.exe):

  1. 在项目选项卡中
    1. 选择一个基本目录
    2. 点击+按钮添加DLL(模块)
  2. 在“设置”选项卡中
    1. 点击
    2. 单击 + 按钮。添加了一条新规则。当模式匹配时,规则就会被执行,所以“True”意味着规则会一直被执行。
    3. 点击编辑按钮。
    4. 选择预设的“最大值”然后关闭
  3. 在“保护”选项卡中
    1. 点击保护!

【讨论】:

  • 直到我读到这篇文章,我才意识到我必须添加一条规则。添加规则后,它很好地混淆了来源。
  • 感谢您提供有用的信息。在您提供的 xml 中,不应该将预设设置为“最大”而不是“无”,预设 =“最大”?
  • 混淆文件的大小应该大于原始文件的大小??
  • 使用预设时,您不必指定要在规则节点中使用的保护措施。使用最大值将是:。尺寸可以小一点。
  • 我很困惑?我该如何使用ConfuserEx ;)
【解决方案2】:

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

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

<?xml version="1.0" encoding="utf-8"?>
<project baseDir="obj\Release" outputDir="..\Release" 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\Release</probePath>
</project>

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

ConfuserEX 为相对路径选择不同的起点,因此文件中的路径看起来很奇怪。

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

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

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

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

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

(3a) 将所有项目添加为“项目输出”,这样可以确保“obj”文件夹中的混淆文件进入包中。

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

【讨论】:

  • 更新:我最终放弃了 Visual Studio 安装项目并改用 Wix,就像 StackOverflow 上的每个人都说你应该做的那样。然后,混淆和签署程序集变得更加容易。
【解决方案3】:

对于其他遇到问题的人: 我下载了它,主人缺少dnlib。可以单独下载dnlib拷贝到dnlib文件夹下编译。

这应该适用于大多数人,但是对我来说,我的 exe 在任何 exe 上都会出现“不正确的 dos 格式”错误。想可能是因为我已经更新到 vs2015 和 4.5.3(.net 5 或 6 或他们现在想调用的任何内容)。我想也许就是这样。但事实并非如此(最高编译为 4.5)。

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

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

顺便说一句,这真是个好东西,看起来这可以做很多事情,即使是付费的也不只是学习曲线。

另一个注意,您似乎有一个RuntimeEnvironment.GetSystemVersion()[1] == 4,它可能应该是(经过一些解析)RuntimeEnvironment.GetSystemVersion()[1] &gt; 3.9,所以您得到 4 和 4.5

**更新。更新到 4.5 并且拖放停止工作,仍然像上面描述的那样工作。 与 4.5.3 一起使用,但您没有使用任何新功能。

我最终得到的结果,我稍后会编辑以说明它是否有效。 https://onedrive.live.com/redir?resid=88D92E4D40C0593C%21105

与上面一起去。

【讨论】:

  • 项目正在使用 git 子模块。要获取 dnlib,请执行 git submodule init 然后 git submodule update
【解决方案4】:

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

定义一个 crproj:

<?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>

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

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

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2017-01-08
    相关资源
    最近更新 更多