2007年08月19日

http://school.21tx.com/2005/12/28/11895.html

2005年04月30日

 

最近对.net的辅助工具比较感兴趣,网上也已经有.net的十个必备工具的帖子了,这里提供了一份全面的工具列表:
Code generation

Compilation

Obfuscation

Decompilation

Object Browsing

Refactoring

Persistence and data-related code generation

See also "RAD Tools – Application Development Automation" below

RAD Tools – Application Development Automation

Model Driven Architecture

Modeling – UML

IDEs

Builds

Testing

Code validation – Standard verifiers

Profiling – Monitoring – Performance Testing – Optimization

Documentation – Code commenting

Frameworks

MVC

AOP

Code versioning – Source control

Localization

Reporting

Page templating

Scripting

Installation

Others

Hosted by FreeWebs



.NET Reflector Add-Ins

This website lists add-ins for .NET Reflector. After downloading one of the add-ins copy the files to the same directory as your ‘Reflector.exe’ file and load them via the ‘Add-Ins’ command under the ‘View’ menu. You can download Reflector here.




Reflector.FileDisassembler

This add-in can be used to dump the disassembler output to files for any Reflector supported language.

Website Download






Reflector.DelphiLanguage

The Delphi view that is used inside .NET Reflector provided as a language add-in.

Website Download






Reflector.McppLanguage

This add-in extends Reflector with a Managed C++ language rendering module.

Website Download






Reflector.ChromeLanguage

This add-in extends Reflector with a Chrome language rendering module.

Website Download






Reflector.Diff

This add-in shows differences between two versions of the same assembly.

Website Download






Reflector.VisualStudio

This program is hosting .NET Reflector inside the Visual Studio 2003 IDE. Run Reflector.VisualStudio.exe to register the add-in with Visual Studio.

Website Download






Reflector.ClassView

Shows class definitions as plain text with color coding. The menu item is registered under the "Tools" menu.

Website Download






Reflector.CodeModelView

This add-in shows the underlying code model objects for a selected node in .NET Reflector. The menu item is registered under the "Tools" menu.

Website Download






Reflector.FileGenerator

This add-in can be used to dump the disassembler output to files for any Reflector supported language.

Download






Reflector.Graph

This add-in draws assembly dependency graphs and IL graphs. It also supports method ranking and type ranking.

Website






Reflector.OpenRunningAssembly

Opens an assembly or dependency from a process running on the system. The menu item is registered under the "Tools" menu.

Website Download






Reflector.MbUnit

This add-in allows loading and executing MbUnit unit test fixtures in Reflector. The source code is provided online.

Website




Disclaimer: The content of this website is provided "AS IS" with no warranties, and confers no rights.

2005年04月26日

http://www.codegeneration.net/tiki-index.php?page=NET

2005年04月25日

#region Code Region
public class Code // Code Class
{
   
private string source; // source variable

   
public Code(string Source) {
        source
= Source; // Source constructor
    }

       
   
public string Source { // Source property
        get { return source; }
       
set ( source = value; }

    }

}
#endregion
 

http://www.actiprosoftware.com/Products/DotNet/CodeHighlighter/PasteCode.aspx

http://www.wilsondotnet.com/Demos/CodeView.aspx

现在.NET的程序越来越多了,很多人开始关注如何破解.NET的程序。其实个人感觉,.NET程序的破解比传统的容易多了。只要没有被加密,一般的写过程序的人,都可以按照本文的步骤,破解.NET程序。

首先,要准备几样东西:
1,ILDasm,.NET的反汇编工具,.NET Framework SDK自带的,用于程序的反汇编;
2,MSIL的参考书,比如Inside Microsoft IL之类,主要是在对IL不太熟练的情况下,用来查指令码。
3,Anakrino,.NET的反编译工具,可以把.NET的Assembly反编译成c#或者c++的代码。用于分析程序流程。下载地址:
http://test.saurik.net/anakrino/
4,UltraEdit,二进制编辑器,用于搜索、修改.NET可执行程序。

这次我们的目标是一个c#代码生成器,在这里下载:
http://www.gavinjoyce.com/nTierGen/default.aspx 。安装了试用版之后,在 c:\program files\www.gavinjoyce.com\.net n-tier framework generator evaluation 1.2 里面找到 nTierGen.eval.1.2.exe 和 Microsoft.ApplicationBlocks.Data.DLL。后一个dll好像跟破解没有太大关系。OK,Let’’s go!

第一步:分析定位代码。用Anakrino打开 nTierGen.eval.1.2.exe。在Atweb.CodeGet.Wizard名字空间下,有一个frmWizard。这就是程序的主窗口了。在主窗口里面,有一个事件响应方法叫做 btnNext_Click,在里面找到了这样的代码:
if (this.panel2.Visible) {
local2 = Helper.IsCaseStudy(this.proj.dbTree);
if (this.chkListTables.CheckedItems.Count > this.MAX_TABLES && !(local2))
MessageBox.Show("This evaluation release is restricted to " + this.MAX_TABLES.ToString() + " tables. Extra tables have been removed.");
local3 = new TableCollection();
local4 = 0;
while (local4 < this.chkListTables.Items.Count) {
local5 = (String) this.chkListTables.Items.get_Item(local4);
if (this.chkListTables.GetItemChecked(local4) && local3.Count < this.MAX_TABLES || local2)
local3.Add(this.proj.dbTree.Tables.Item(local5));
this.proj.dbTree.Tables.Remove(this.proj.dbTree.Tables.Item(local5).ToString());
local4++;
}
this.proj.dbTree.Tables = local3;
this.Panel2Init();
this.HidePanels();
this.panel3.Visible = true;
this.RefreshViewList();
return;
}

可以看出,当用户选定了表之后,按Next按钮,他就检查选择的数量。如果>this.MAX_TABLES,就Show出一个MessageBox,接下来就只选择前this.MAX_TABLES个表。OK,目标就在这里了。

第二步:制定策略。显然,这个MAX_TABLES是程序里面的一个常量,用于限制表的个数。我们只要把这个常量改得大一些,不就行了吗?好,试试看。

.class /*0200003F*/ public auto ansi beforefieldinit ”frmWizard”
extends [”System.Windows.Forms”/* 23000002 */>”System.Windows.Forms”.”Form”/* 01000004 */
{
.field /*04000098*/ private int32 ”MAX_TABLES”
.field /*04000099*/ private bool ”ENCRYPT_TREE”
.field /*0400009A*/ private string ”LICENSED_TO”
.field /*0400009B*/ private string ”LICENSED_TO_COMPANY”
…..


instance void .ctor() cil managed
// SIG: 20 00 01
{
// Method begins at RVA 0xb0b8
// Code size 218 (0xda)
.maxstack 5
.locals /*11000049*/ init (string[> V_0)
IL_0000: /* 02 | */ ldarg.0
IL_0001: /* 19 | */ ldc.i4.3
IL_0002: /* 7D | (04)000098 */ stfld int32 ”Atweb.CodeGen.Wizard”.”frmWizard”/* 0200003F */::”MAX_TABLES” /* 04000098 */

在frmWizard的构造函数里面,IL_0001这个地方,ldc.i4.3,让MAX_TABLES=3。再看看IL的指令:
ldc.i4 <int32> (0×20) Load <int32> on the stack.
ldc.i4.s <int8> (0×1F) Load <int8> on the stack.
ldc.i4.m1 (ldc.i4.M1) (0×15) Load -1 on the stack.
ldc.i4.0 (0×16) Load 0.
ldc.i4.1 (0×17) Load 1.
ldc.i4.2 (0×18) Load 2.
ldc.i4.3 (0×19) Load 3.
ldc.i4.4 (0×1A) Load 4.
ldc.i4.5 (0×1B) Load 5.
ldc.i4.6 (0×1C) Load 6.
ldc.i4.7 (0×1D) Load 7.
ldc.i4.8 (0×1E) Load 8. (I should have listed these in reverse order so then we could imagine ourselves on Cape Canaveral.)
ldc.i8 <int64> (0×21) Load <int64> on the stack.
ldc.r4 <float32> (0×22) Load <float32> (single-precision) on the stack.
ldc.r8 <float64> (0×23) Load <float64> (double-precision) on the stack. ILAsm permits the use of integer parameters in both the ldc.r4 and ldc.r8 instructions; in such cases, the integers are interpreted as binary images of the floating-point numbers.


可以看出,IL只用了一个byte来给MAX_TABLE赋值,跟我们以往的x86 ASM有所不同。把ldc.i4.3改成ldc.i4.8,也就是把0×19改称0×1E,看看效果如何。用UltraEdit搜索出02 19 7D 98 00 00 04,然后把19改成1E,保存,运行,程序显示“最大8个表”等等,看来就着一个地方了。
从IL指令来看,一个byte最大赋值8,显然8个表还是太少了。怎么办?


IL_0197: /* 09 | */ ldloc.3
IL_0198: /* 6F | (0A)000017 */ callvirt instance int32 [”mscorlib”/* 23000001 */>”System.Collections”.”CollectionBase”/* 01000002 */::”get_Count”() /* 0A000017 */
IL_019d: /* 02 | */ ldarg.0
IL_019e: /* 7B | (04)000098 */ ldfld int32 ”Atweb.CodeGen.Wizard”.”frmWizard”/* 0200003F */::”MAX_TABLES” /* 04000098 */
IL_01a3: /* 32 | 03 */ blt.s IL_01a8

IL_01a5: /* 08 | */ ldloc.2
IL_01a6: /* 2C | 1D */ brfalse.s IL_01c5

IL_01a8: /* 09 | */ ldloc.3
IL_01a9: /* 02 | */ ldarg.0


在IL_01a3这个地方,比较MAX_TABLE,如果小于则跳转。OK,如果我们在赋值的时候,给一个-1,然后把有符号数的比较改成无符号数的比较,不就可以支持最多256个表了吗?OK!

第五步:最后的修改。搜索出上次02 19 7D 98 00 00 04的地方,把19改成15,也就是变成ldc.i4.m1;再搜索出7B 98 00 00 04 32这个地方,把blt.s改成blt.un.s,也就是把32改成37,保存,运行,程序显示支持"-1"个表,实际上支持256个表,。。。。

最后总结:.NET程序修改过程中,很容易出执行引擎的错误,所以修改的地方越少越好。当然,熟练之后可以想怎么改就怎么改了。另外,熟悉c#语言,熟悉IL也非常有帮助。怎么样,想不想马上试试看?

.NET的数据工具不止这些
http://www.objectpersistence.com
http://www.2LKit.com
http://bbooprevalence.sourceforge.net/
http://sourceforge.net/projects/ojb-net
http://sourceforge.net/projects/nhibernate/
http://www.componentone.com/products.aspx?ProductCode=1&ProductID=22
http://www.evaluant.com
http://www.deklarit.com
http://www.thona-consulting.com/content/products/entitybroker.aspx
http://kickstarter.net/default.htm
http://www.sd.nl/software/tooldetails.asp?filtertype=2&ItemID=66
http://www.oakleafsd.com
http://www.norpheme.com
http://www.gavinjoyce.com/nTierGen/
http://www.virtutis.com/
http://www.firestarsoftware.com
http://www.mongoosesolutions.com
http://www.microsoft.fr/olymars/webupdate.xml
http://www.pragmatier.com
http://www.prevayler.org
http://www.alachisoft.com/
http://www.visible.com/Products/Developer/index.html  


来自:yyanghhong, 时间:2003-9-8 10:05:00, ID:2163336
http://groups.msn.com/DotNetPersistence/tools.msnw   

.NET我曾经尝试用过了大量的工具,现在说说我推荐的工具吧:)

源码查看工具:
Reflector                        
不多说了。

加密与混淆工具:
Xeno2005                        
引用别人的介绍:一款为.NET平台下的开发人员设计的功能强大、灵活和易于使用的代码保护及优化的工具,该软件的.NET分析和重编译引擎保护用户的代码反编译,提高增强程序性能以及提供对.NET框架的支持,包括MC++和Satellite Assemblies

数据库建模工具:
Visio                                 
针对于Sql Server 2000,可以采用Visual Studio2003光碟包中自带的Visio,支持正向生成与反向工程。但Visio在针对其它数据库的支持上有许多问题存在,具体的问题列表,可以查看Visio安装目录上的文档说明。Visio无论用于数据库模型建模还是ORM建型,操作都十分简便。同时也支持鼠标中键缩放视图,非常不错。Visio2003虽然界面漂亮,但仅有反向工程能力,是最大的弊病。

PowerDesign                
非常不错的建模工具,支持多种数据库,相对于Visio的版面来说PowerDesign提供了近乎无限大的空间,当然这是仁者见仁,智能见智的问题,但PowerDesign提供了非常强大的反向落工程能力,在反向出来的数据库模型图上,会智能地摆放各个模型所在的位置,尽力做到线路不交叉,同时支持鼠标中键缩放,非常不错。不足之处在于,在模型图上输入或修改字段时,必须打开一个界面不是很友好的界面,无论是初学者还是常用这个工具的人,都会感到烦燥不已。另外,软件的界面不好看,默认字体过小。

Visual Studio.Net 2003 
严格地说,vs2003并没有建模能力,因为它仅对Sql Server2000提供较好的支持,但它可以在服务管理器上直接对数据库进行新增和删除表、视图、存储过程的操作,同时也支持在直接画Sql Server的关系图,自定义模型视图的显示方式非常不错,而且在使用起来非常简洁,但可惜的是GDI+的性能是它的使用瓶颈,在图表过数量过多的时候,对内存占用非常大,显示速度也受到影响,让人感觉很差。


ERWin        
经典的数据库建模工具,但现在好像已经没有怎么更新了,至少我不清楚。它提供简洁明了的视图进行数据库建模,但不支持鼠标中键的缩放,难免会带来极大的不便,另外,它的新增、修改、添加字段,也是令人不爽的地方,使用起来并不方便,界面不是很友好。但总得来说,它提供了多种数据库的支持,同时也有大量的数据库建模人员在使用它,所以它仍有它独特的价值与魅力。

测试工具
nunit         
Nunit是驱动测试开发中的非常不错的工具,如果没有Nunit,测试驱动开发要么会成为空谈,要么会变得很复杂,不过,Nunit,也许是太过于注重简洁,界面过于简单,提供的功能并不多,但无论如何,作为一个经典的软件,它仍是我们软件工具箱中,必不可少的。

TestDriven      
TestDriven的前身是Nunit Addin,它把Nunit结合到了vs.net2003的Addin之中,使得开发人员在开发的过程中,不必再去费神开启Nunit,带来了一定的便利性,但更值得一提的是,这里面还提供了MbUnit,MbUnit除了提供了类似于Nunit工具的功能以外,更提供了大量的分析数据报表,可以让开发人员在开发过程中,获取更为详细的分析数据,不过,我个人认为这些功能在开发过程有时候并不必要。但如果把MbUnit应用在每日构建之中,相信将会带来更好的结果。

Parasoft.TEST    
刚看到介绍的时候,就对这个东西感兴趣了,我尝试安装了,由于它是基于java的。我一开始很怀疑它的性能,不过在试用了之后,感觉它还是不错的,它可以对.Net程序进行单元测试的工具,并且不需要写测试脚本,可以让开发人员轻松的点击一个按钮就自动进行动态和静态测试源代码,但它对中文源码支持非常不好。

Compuware.DevPartner.Studio 
如果不提到这个工具,我认为本文也没有写出来的必要了,这个工具内部包括了非常优秀功能,比如对代码规范性检测,对内存情况分析,对代码分析并提供优化建议,并且还有一个十分令人意外的功能,就是它可以找到你的一个方法引用了哪些类或方法,并用图表现出来,在这一点上做得十分不错。另外,它对中文源码的提供了部分的支持,在某些情况下,仍然也会出现乱码,但不管怎么说,这款软件应该是开发人员必备之宝。

重构工具
CSharpRefactory   
我不认为它是一个很好的重构工具,首先它只支持C#,而且还经常出错,使用起来,要冒着一定的危险。

C# Refactoring Tool  
同样的,也是一个出错出得让人想杀人的那种,虽然赞誉甚多,但我真的没有发现它有什么地方可以让我感觉良好的。

Resharper      
这个工具不算是重构工具,因为它还提供了许多其它特点的功能,但在重构工具的工具箱中,我也只有它了。它在重构的支持上,虽然不如java世界里面的IDE工具那么牛,但它毕竟提供了我们不错的功能,可惜对中文源码的支持非常不好。

Together                          
如果用Together来进行重构的话,还是自己用手来做吧,它虽然重构提供了中文源码的支持,但它的速度,实在是令不敢恭维,它的重构是可以让开发人员生不如死的,在此一点上,给它两颗星,是因为在这方面,毕竟它提供了此功能并支持了中文的源码,在被逼无奈的时候,还是可以用用的。(顺便说一下,它的重构使得我不承认它能算得上是MDA工具)

代码生成
IronWorks                        
这个工具相对说来,还是很棒,但因为它破解不太好找,也制约了开发人员使用它,还是…呃,算了。

nTierGen                         
它是一个面对于数据库访问的代码生成工具,感觉上它还只是马马虎虎,不过它生成的代码大大减少了开发人员的工作量。

Monstarillo                       
非常不错的代码生成工具,也是针对于数据库的代码生成工具,不过,它支持直接生成aspx页面,并提供了相对灵活的配置,还可以指定生成为通过Microsoft Application DataAccess Block生成的数据库访问代码,目前流传的版本是我把它那个那个了一下之后,…嘿嘿,不说了。

CodeSmith     
这是一个通用性的代码生成工具,提供了十分灵活的模板配置功能。具体介绍网上已经很多,不再多提。

2004年09月29日

http://bbs.12386.net/ShowPost.aspx?PostID=479