这里有篇文章[ 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的共享软件怎么生成呢??公司的核心技术怎么保护?
我在奇怪这么大的事情,为什么论坛上就没看到讨论这个的帖子呢?
里面说
///引用
它是一个类浏览器和反编译器,可以分析程序集并向您展示它的所有秘密。.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的共享软件怎么生成呢??公司的核心技术怎么保护?
我在奇怪这么大的事情,为什么论坛上就没看到讨论这个的帖子呢?
我用它反编了我的代码,反编译出来跟我的原代码差不了多少,我哭啊~~~
模糊:让你的代码远离偷窥之眼
Dotfuscator Professional Edition 1000多$,我倒,抢钱啊~~~回:孤灯夜人:
http://blog.joycode.com/ghj/archive/2004/08/12/30435.aspx这里有下载,随便找的一个地址~
如果不相信,你可以反编译.NET Reflector,看看你能不能把它搞成一个开源的项目。
大家还有没有其他好的建议呢~,开源??~
你可以尝试着去读一下几万行的aa、bb、c01这样的代码,就知道混淆器已经足够抵挡别人的破译了。
如果不相信,你可以反编译.NET Reflector,看看你能不能把它搞成一个开源的项目。///但.NET框架中的代码并没有被混淆,比如Assembly,DataTable 这些基础类并不能从原码中消除~~,而且你都变aa,bb,cc那你让别人很好的使用你的组件呢~,对exe这是个方法~
这完全是误解。.net根本不是开源。确实reflector可以看到很多,但是根本的还是看不到。
///
那些是根本的呢,数据源读取,业务逻辑算法??反正activeReport.NET Component.NET这些控件的的反编译代码,我是看得懂~!~,收获不少~~
不混淆public、Protected性质的名称,混淆Private和internal,不影响别人使用。
把关键部分的代码写成private的,再通过public进行调用,别人还是可以用,达到混淆目的。
那些是根本的呢,数据源读取,业务逻辑算法??反正activeReport.NET Component.NET这些控件的的反编译代码,我是看得懂~!~,收获不少~~嗯,这么说吧,你能看得懂的部分,已经不值钱了。
///
在这个工具里,中文字符串会反编译为\uxxxx的unicode代码,不会给反编译带来阻碍。////引用
那个东东,我也用过,感觉确实不错,但是经过混淆的代码读起来确实有点难度!那么多的aa AA bb BB cc CC 一个小点的工程还可以看看,工程项目一大就不行了!///
但一个项目也就是有几个核心代码,其他都是在上面组装,尤其是信息管理系统。只需要把他的数据库连接、用户名验证等核心代码找出来。
从我的实验看来这个对.NET Reflaction一点难度都没有。尤其是核心代码中,直接引用.NET FrameWork中提供的类库,更是容易看懂,因为你不会去把.NET FrameWork的类库拿来混淆吧???!!!。 因此,我觉得当需要大量对.NET FrameWork中的基本类库进行引用时,就将其分开到不同的小类出实现,让一个函数中的代码尽量的少,用更多的 工厂类,代理等模式设计的方法,再加上混淆器,应该可以使反编译出来的代码更难看懂。大家认为呢?~
///
有时候,我也会把一些用.Net写的WinForm的工具拿来反编译来看看他们的思路,无论是混淆还是没有混淆的,都基本上和你说的差不多。其实.Net更多的是在Web方面的应用,这些东西都存在服务器上。如果你能顺利拿到这些文件,哈哈,服务器都基本上是你的了。其实用ASM/C写的东西也可以发汇编来读,如果你使用一下最新的IDA,反出来的汇编和C语言一样好读。我现在也常用IDA来看一些病毒和木马的dll,基本也可以看出它们是如何工作的。
同感~~!//引用
Reflector.FileDisassembl这个下载到好像不可以用~~
这个我也还没用起,我试了以后在给你回复。看来要结帖了哈~,设置的分数少了点~~ ^_^
---------
混淆的好不好,关键是设计的问题,做为一个组件当然不能把使用接口混淆,这样只会给使用者带来麻烦.
在编写时,定义内部类来完成功能,当混淆把内部的类混淆就可以了.
就好象CodeSmith的核心部分就是由内部类完成,你反编译看到的只是使用接口应用的部分.
恩,我待会下下来进行反编译看一下~,谢谢
随便问一下,你的信誉咋个是71 , ^_^
http://community.csdn.net/Expert/topic/3583/3583742.xml?temp=.8616144
配合Reflector可以改写任何一个基于.NET的程序...
在这些工具的帮助下,分析程序的算法比以前的非托管应用程序更容易了.
但你能得到的也仅仅是程序,算法而以.这些东西其实书上都有的讲.支持 athossmth(athos) 的看法.....
============================ ///
那些是根本的呢,数据源读取,业务逻辑算法??反正activeReport.NET Component.NET这些控件 的的反编译代码,我是看得懂~!~,收获不少~~ 嗯,这么说吧,你能看得懂的部分,已经不值钱了。
一个是把核心代码放到存储过程里面,这样看到的只是调用存储过程的部分;
另一个就是可以把代码写的乱一点。呵呵。当然代码首先是给自己看的,写乱了害的是自己,但也有例外的情况。
比如用代码组复杂一点的查询语句,而组成的查询语句又是核心代码,比如我的翻页控件——如果没有组织的话我自己都看不懂自己的源码:)
另一个就是组javascript脚本,对于不太熟悉js的人来说js本身就不太好懂,再加上在后台组串,呵呵,有得看了。
不需要加密的地方就用.net,开发效率高,需要加密的时候想其他的办法,如同你喝汤的时候用勺子,吃青菜的时候用筷子,这样不就ok了,为什么任何代码任何地方都要加密呢?
webcasts课上 就推荐的这个推荐的是哪个??///引用
Ivony:
我的核心部分只好用非托管的C++来写的了,例如加密、数据库连接字符串等。但是如果我需要用到.NET FrameWork中的类呢?恩,这个问题讨论到这儿可能差不多了,不知道谁还有更好的方法呢?谁用过.NET自带混淆器的专业版,不知道效果怎么样?
我从始用Dotnet那天无意看到IL,之后就天天做这个恶梦,想不到变成真的了
不过还好,我是支持开源的,只要有饭吃就行
给分的时候怎么还要密码,密码是多少啊??!!
你登陆csdn论坛的密码啊!!
是真的么?看来以后我写程序都反编译一次,岂不是变成了高手写的代码!^_^
1. .NET辅助工具列表 http://dev.csdn.net/article/31/31277.shtm (原来前辈早就说过了:) )
2. XenoCode 2005 v3.1.4.1802 企业特别版
http://down.week5.net/html/2005-01-18/6172.html (随便找的一个网址,不是打广告哈 :) )
谢谢大家的支持,我昨天终于看到原来帖子还是可以加分的,HOHO~,那我就不客气了,散分~~、散分~~