gpt4 book ai didi

c# - .Net 应用程序的源代码真的可以这么简单地获取吗?

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:59 25 4
gpt4 key购买 nike

概览

我有 Delphi 背景,但最近我想学习一门新语言来测试自己。一旦您熟悉了语言和语法,编程就会变得有些容易,所以我想学习 C# 以了解我作为开发人员是否真的取得了进步,或者我是否只是依靠自己的内存如何完成某些编码任务。

考虑到这一点,我是 C#/Visual Studio 2015 的新手,过去几天我已经花了几个小时使用它,除了解决语法差异之外,如何编程的逻辑思维还没有改变或消失。

我正处于 C# 的早期阶段,虽然我非常喜欢走出自己的舒适区并学习这门新语言,但我觉得我可能需要停下来。出现这种情况的原因是我没有意识到构建的应用程序源似乎是多么容易获得(除非我遗漏了一些明显的东西)。

它始于我的第一个简单的 C# 项目 - 记事本克隆。我将它加载到 Ida 中只是为了看一眼,看看我能找到什么,第一个引人注目的是在函数名称下它列出了我所有的控件和方法名称:

enter image description here

这促使我查看函数名称的混淆等问题,似乎有很多关于此的帖子。但这还不是最令人惊讶的事情,我发现了一个名为 dnSpy 的开源应用程序(我假设代表 .Net spy )

所以我将我的 C# 文本编辑器可执行文件加载到 dnSpy 中,当我看到源代码就在那里并且易于阅读时,我感到非常震惊:

enter image description here

有一些细微差别,但代码非常相似:

/// <summary>
/// Create a new text document.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mnuNew_Click(object sender, EventArgs e)
{
// Check if the editor has been modified.
if (_dirty)
{
// Prompt the user if they would like to save the document or not.
DialogResult dialogResult = MessageBox.Show(String.Format("Do you want to save changes to {0}?", _fileName), "Text Editor", MessageBoxButtons.YesNoCancel);
if (dialogResult == DialogResult.Yes)
{
mnuSave_Click(null, null);
}
else if (dialogResult == DialogResult.No)
{
// Create the new document.
NewDocument();
}
}
}

在 Visual Studio 中构建的记事本应用程序我设置为 Release 模式,我认为它没有调试信息等。

以上内容足以让我完全放弃 C#/Visual Studio。 Delphi 编译为机器代码,我相信 .Net 是某种解释型语言(通过 .Net 翻译和运行?)。

我的问题是,查看使用 C#/Visual Studio 构建的 .Net 编写的应用程序的源代码真的那么简单吗?这似乎太容易了,我收到了警告,告诉我停止在 .Net 中编码并返回到 Delphi,否则任何 future 的工作都可能被盗。

我知道应用程序可以被逆向,如果它们是用 Delphi、C++ 等编译的并不重要它们都可以被逆向但是源代码很容易从 .Net/C#/Visual Studio 中构建的应用程序中查看似乎相当奇怪,正如我所说,这正在扼杀我学习更多有关 C# 和 .Net 编程的心情。

是否需要从 Visual Studio IDE 中采取其他步骤来使已发布的项目不包含公开可见的源代码?我是不是在某处错过了一个简单的步骤,还是查看 .Net 应用程序的源代码真的这么简单?

最佳答案

构建 C# 时的默认行为是将 C# 代码编译为 CIL,这很容易转换回 C#。 CIL 代码将在运行时由即时编译器转换为 native 代码。

.Net to Native code

您可以将您的 C# 代码直接编译为 native 代码,但是您将失去同时针对多个体系结构的优势: Compiling C# to Native?

另一种选择是使用混淆器: https://en.wikipedia.org/wiki/List_of_obfuscators_for_.NET

关于c# - .Net 应用程序的源代码真的可以这么简单地获取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38376152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com