1

我在 MSMobiles.com 博客上看到了这篇文章,其中包含以下内容

.Net 在很多方面都很棒,但对于商业应用程序?没门!任何人都可以查看您的源代码。一个高端的混淆器会有很大帮助,但任何坚定的黑客都会在不到一天的时间内修复你的代码。尽管在反盗版和混淆工具上花费了 1000 美元,但我从悲惨的经历中了解到这一点。

然后它说以下关于在 .NET 中开发商业 Windows Mobile 应用程序的内容:

准备好 1 天的延迟,之后您的竞争对手将复制您的功能并在 Skymarket 中放置具有相同功能的自己的应用程序

对于那些熟悉 .NET 的人:这是真的还是胡说八道?这个问题是 Windows Mobile 特有的,还是也适用于 Windows 上的 .NET?这让我感到惊讶,因为我知道微软用 .NET 编写了大量自己的客户端软件(而且许多供应商用 Java 编写昂贵的应用程序,显然也有同样的问题),而且他们的IP很容易被盗。

4

11 回答 11

9

我认为这在很大程度上是无意义的,原因很简单,如果您的竞争优势和业务成功取决于代码中的某些算法,那么您已经被搞砸了。成功的应用程序不仅仅是代码,它是众多部分之一。

如果这是你真正担心的事情,那么我会投资混淆并预付一些法律顾问(不管你信不信很便宜),他们会代表你向你认为窃取你的代码的竞争对手发送停止和停止信函。虽然这在法律上几乎无处可去 - 采取行动的威胁只是你最有效的工具。

于 2009-01-31T01:43:58.420 回答
5

反编译 .NET 应用程序的难易程度是有一定道理的。(这适用于任何 .NET 应用程序,而不仅仅是在 Windows Mobile 上运行的应用程序。)

使用免费和商业工具获取已编译的程序集并获取源代码相对容易。(只需看看 Reflector。)话虽如此,您可以使用混淆器,它可以阻止大多数人,但只会减慢坚定的黑客。

尽管如此,几乎所有语言都有反编译器,如果公司(或个人)决心查看您产品的内部结构,无论如何他们都会找到方法。

阅读您引用的帖子听起来确实像是由对 Microsoft、.NET 和/或 Windows Mobile 有非常糟糕体验的人撰写的,并且其中的一些陈述充其量是不正确的。(特别是关于这在 iPhone 上不是问题的一点,因为它是用“本机”代码编写的。)

于 2009-01-31T01:51:12.760 回答
4

虽然使用中间字节码语言可能会稍微容易一些,但事实是您可以使用任何语言来做到这一点。

可执行代码可以轻松反汇编和执行。 IDA-Pro可以加载本机可执行文件,反汇编它们,并且使用 Hex-Rays 插件,它甚至可以提供类似 C 的伪代码进行检查。即使没有 Hex-Rays,单步调试汇编代码并推断正在发生的事情也不是很困难。这就是为许可产品制作密钥生成器的方式。它们被反汇编,程序员研究负责生成和验证产品密钥的相关汇编代码。

但是,从应用程序中撤消任何主要功能的成本非常高。因此,除非它是一些涉及商业秘密算法的竞争激烈的功能,否则与逆向工程相比,简单地聘请程序员从头开始编写它几乎总是更容易且更具成本效益。

如果您正在寻找更高级别的保护,您可以混淆您的代码并使用商业打包程序,这使得反汇编程序更具挑战性(并防止在打包应用程序时使用任何反射器)。然而,这些可以被规避,解包和混淆代码并不会真正减慢一个好的 RE。所以,不要过分强调,在我看来,.NET 与任何其他非字节码语言一样适用。

于 2009-01-31T02:05:05.727 回答
3

您唯一的选择是拥有一个网络应用程序 - 您只分发查询主服务器的客户端。这样,努力工作的源头就是你的秘密。

于 2009-01-31T02:57:06.887 回答
1

它也适用于 Windows 上的 .NET。它也适用于 Java。

您可以对代码进行混淆,其中一些混淆器很好(您可以通过 google 轻松找到好的混淆器),但最后,您必须在保护您的 IP 时保持警惕,因为混淆器并不是一种完美的技术。混淆器击败了变得更智能的反编译器,并击败了变得更智能的混淆器,等等。

从技术上讲,您可以通过查看编译代码来了解 C++ 程序或任何程序的工作原理。只是它编译到的级别比 IL(.NET 应用程序编译到的级别)要复杂得多。

于 2009-01-31T01:41:37.210 回答
1

去反射器上做一个谷歌。是的,它是真实的,是的,它发生了,是的,你的混淆可以提供帮助,但并不完美。然后去反思反射器本身。不确定 Redgate 是否仍在混淆它,但原作者使用不可打印的字符混淆了它,这些字符非常讨厌。

然而,Java 也存在同样的问题,所以选择你的位置。哦,一个真正有决心的黑客会破解任何平台上的任何应用程序,所以选择一个平台来实现它的功能,并且适合你的问题和你的技能。

使用工具来帮助提高您的安全性并提高您的标准。

于 2009-01-31T01:44:14.893 回答
0

IL 的优点之一是它完全限定了所有类型的全名。因此,当您查看例如 Reflector 中的混淆代码时,您可能在同一个类中有十几个具有相同名称的变量,但由于它们在 IL 中是完全限定的,因此运行时对它们没有任何问题。

于 2009-01-31T01:49:24.183 回答
0

阅读 .Net 程序集非常容易。你可以自己试试:

http://www.codeproject.com/KB/dotnet/NetDasm.aspx http://www.shutterspeaks.com/2006/08/27/how-to-disassemble-net-assembly-files/

有一些混淆器可以使工作变得更难。使用 Mono(.Net 的开源实现),还可以将 .net 代码编译为可执行文件,这应该会使反汇编变得更加困难。

于 2009-01-31T01:49:45.913 回答
0

是的,casper 肯定是对的,你总是可以只看机器码。尽管在查看汇编代码级别时很难辨别更复杂的面向对象关系(如多态性)。

但在我看来,整个保护源代码的心态是有缺陷的。开源理念是,将您的代码开放给公众审查有助于使您的软件变得更好,因为有更多的人在那里发现错误和安全漏洞。此外,Linus 定律正被越来越多的大公司所接受,如 Sun、Google 等。

于 2009-01-31T01:53:50.477 回答
0

软件的知识产权实际上不仅仅存在于代码本身,它还存在于开始生产产品的想法,在开发、测试和部署产品时获得的知识,以及涉及修复、维护和增强产品的基础设施。

将代码添加到应用程序很像拥有汽车。当然,你可以把它拆开,看看它是如何组装起来的,但是你能仅仅因为你有这些知识就在下周开始生产汽车吗?几乎不。

于 2009-01-31T02:29:12.153 回答
0

我已经有一段时间没有使用它了,但 Salamander.NET 会将 .NET 应用程序转换为 Win32 本机应用程序(没有框架依赖项)。不确定它是否曾经升级到 .NET 2.0 或更高版本,但它在 2005 年的 1.1 中工作。

于 2009-04-02T19:45:11.857 回答