0

我知道这个问题之前出现过几次,但我无法为我们的简单案例找到答案:

是否有免费工具可以将小型 .NET C# 应用程序编译为本机可执行文件?

到目前为止,我发现的是昂贵的工具,它们剥离了 .NET 框架并将其编译为可执行文件,但在我们的案例中,这不是必需的。安装 .NET 框架是没有问题的,我们只是想预编译一个 C# 项目,以便用户出于安全原因无法反编译 IL 代码。.NET 的 obsucator 是不够的,因为我们有敏感的代码部分。

Mono-AOT 不是一个选项,因为它需要在我所了解的目标机器上安装单声道。

Ngen.exe 似乎是最接近我们需要的,但是我们如何分发输出文件呢?它似乎也包含 IL 代码,正如它所说的“每当 NGen 生成的图像在不兼容的环境中运行时,.NET 框架都会自动恢复为使用 JIT”。

这种情况下是否有任何实用的工作流程?

EDIT2:我真的很想知道为什么这个问题被关闭了......

解决方案是来自 Mono 项目的mkbundle:

我找到了一个 shell 脚本,它使用 Mono 的 mkbundle 将 .NET 应用程序编译为独立的本机可执行文件,并将其修改为最新版本,截至 2013 年 5 月,您可以按如下方式使用该脚本:

https://gist.github.com/tebjan/5581296

1.) 安装 cygwin 并确保选择以下软件包: - gcc-mingw - pkg-config - mingw-zlib1 - mingw-zlib-devel

2.) 安装 Mono 发行包:“Mono for Windows, Gtk#, and XSP”

3.) 下载脚本并将其放在您的应用程序旁边并对其进行修改以适应您的环境(仔细阅读文件中的注释)。

4.) 打开 cygwin 并导航到可执行文件和 scipt 所在的应用程序的输出文件夹,例如 YourProject/bin/Release

5.) 使用以下命令执行脚本:./mkbundle_cygwin.sh

故障排除:如果捆绑的可执行文件无法运行,请确保原始 .NET 应用程序在单声道上运行。您可以通过调用 mono.exe 并将您的 .NET 应用程序传递给它或通过安装 XamarinStudio 并从那里运行您的项目来测试它(确保将 mono 设置为运行时)。

4

2 回答 2

1

对于您的特定情况,似乎最简单的方法是将魔术字节放入单独的本机 DLL 中,并让托管代码使用 p/invoke 来检索它们。这符合您提到的两个要求:

  • 将魔术数据与使用它的代码分开
  • 将魔术数据排除在 .NET 程序集之外
于 2013-05-13T18:55:53.447 回答
0

有一些商业混淆器可以产生非常好的结果,请在最大设置下尝试 Esiriz .NET Reactor。

当然,最终会有人能够扭转它,但我很确定如果你真的需要隐藏你的东西,这是你能做的最好的事情。

于 2013-05-13T17:33:18.617 回答