在WPF应用程序中混淆嵌入式dll的方法

时间:2015-10-08 06:01:07

标签: c# wpf obfuscation embedded-resource

我有一个WPF应用程序,其输出是a.exe。此应用程序依赖于外部b.dll(我可以访问其源代码)。

要求:

  1. 输出应该只是应该包含dll的a.exe。我不想为我的用户提供单独的dll(如果可以避免的话)

  2. 我应该能够混淆代码。 (我不希望任何人能够修改它。)

  3. 尝试了方法:

    1. 我在a.exe中嵌入了b.dll,它有效。但我无法对exe进行模糊处理,因为它发出错误,无法找到b.dll。

    2. 我对a.exe和b.dll进行了模糊处理,但它无效。它无法找到b.dll。

    3. 替代方法:

      有没有办法可以将b.dll的云杉代码添加到我的项目中,并将dll编译为exe本身而不是单独的dll。

      是否可以使这种替代方法有效或有其他方法吗?

      如果没有任何作用,我知道我可以单独编译a和b,混淆a并将b作为单独的文件提供(我正在努力避免)。

      为格式化问题道歉,如果有的话,我正在使用Android应用程序。如果您需要任何细节,请告诉我。

2 个答案:

答案 0 :(得分:1)

我过去在Eazfuscator.Net取得了巨大的成功。

http://www.gapotchenko.com/eazfuscator.net

要从命令行运行它,请输入以下命令:

Eazfuscator.Net.exe -n a.exe b.dll

它会将两个文件合并为一个exe文件。主程序将能够访问dll。

您甚至可以设置Visual Studio,以便上面的命令行作为后编译事件运行。

答案 1 :(得分:0)

程序集嵌入可能看起来很混乱,所以这里通常是这样做的:

  1. 如果需要,依赖项会被混淆。
  2. 目标程序集被混淆。此时,还指示混淆器将某些依赖项嵌入到混淆过程中。
  3. 因此,嵌入式程序集将存储为目标程序集的资源。
  4. 为了在运行时加载依赖项,混淆器通常会为CLR在无法自动解析程序集时引发的AppDomain.AssemblyResolve事件安装处理程序。
  5. 处理程序从资源中提取并加载嵌入式程序集。
  6. 那就是它。一个好的混淆工具可以很容易地实现这一点。我不明白为什么在使用WPF应用程序的情况下它不起作用。如果有问题,我建议您联系产品支持。

    另一个选项是程序集合并。与嵌入式不同,合并的程序集成为目标程序集代码不可分割的一部分。因此,与嵌入相比,汇编合并通常有助于实现更好的混淆覆盖和应用程序启动时间。虽然它看起来可能是更好的选择,但合并有时可能会破坏应用程序的功能。