.NET == 开源【从Reflector软件反编译.NET,原码相似度99%】说起~
ivsm 2005-04-04 09:52:55 这里有篇文章[ NET 程序员十种必备工具 - .NET Reflector ] http://blog.csdn.net/zhumi/archive/2004/07/22/49127.aspx
里面说
///引用
它是一个类浏览器和反编译器,可以分析程序集并向您展示它的所有秘密。.NET 框架向全世界引入了可用来分析任何基于 .NET 的代码(无论它是单个类还是完整的程序集)的反射概念。反射还可以用来检索有关特定程序集中包含的各种类、方法和属性的信息。使用 .NET Reflector,您可以浏览程序集的类和方法,可以分析由这些类和方法生成的 Microsoft 中间语言 (MSIL),并且可以反编译这些类和方法并查看 C# 或 Visual Basic ?.NET 中的等价类和方法。
///
看了非常好奇,也去.NET Reflector 的官方网站下载了一个试用。先找M$的>net FrameWork开刀,以下是 .NET Reflector反编译的DataTable->CopyRow()的方法原码:
///反编译出来的原码
internal void CopyRow(DataTable table, DataRow row)
{
int num1 = -1;
int num2 = -1;
if (row != null)
{
if (row.oldRecord != -1)
{
num1 = table.recordManager.ImportRecord(row.Table, row.oldRecord);
}
if (row.newRecord != -1)
{
if (row.newRecord != row.oldRecord)
{
num2 = table.recordManager.ImportRecord(row.Table, row.newRecord);
}
else
{
num2 = num1;
}
}
DataRow row1 = table.AddRecords(num1, num2);
if (row.HasErrors)
{
row1.RowError = row.RowError;
DataColumn[] columnArray1 = row.GetColumnsInError();
for (int num3 = 0; num3 < columnArray1.Length; num3++)
{
DataColumn column1 = row1.Table.Columns[columnArray1[num3].ColumnName];
row1.SetColumnError(column1, row.GetColumnError(columnArray1[num3]));
}
}
}
}
///
这些代码跟原代码基本相似,大家都能看懂^_^,接着也试了商业上发布的一些.NET Control,其中包括PDF Create ,BarCode Create 等控件,无一例外的被完全解刨。注册码的生成、验证、PDF生成算法等等,跟原代码没什么区别,你们不认为这是开源吗,所以我马上又从.NET的网站上下了很多各个领域的Control储存起来,以后要用了就反编一下,比看书会强很多~^_^~!。
从各个实验的结果证明,.NET Reflector 反编译的C#代码,可读性非常强,使用Reflector.FileDisassembler 插件,甚至可以把整个DLL反编到一个工程,强!!!
后来又在网上查找了一些资料,知道.NET的代码跟Java代码一样可以用混淆器加工,如是 用.NET2003自带的Dotfuscator Community Edition工具(已经通过网络注册)工具,对原来的.NET代码进行混淆,结果显示,只是类的名称和成员变量进行了一点改动,其功能代码没什么变化。 只是增加了阅读的难度,但我们很多人也只是需要知道一些核心代码就够了,了解一个思路。
.NET平台真是让人又爱又恨啦。如果这样基于.NET的共享软件怎么生成呢??公司的核心技术怎么保护?
我在奇怪这么大的事情,为什么论坛上就没看到讨论这个的帖子呢?