Vsdocman是一个优秀的.NET源代码注释编写工具,方便的以GUI的方式设计.NET源代码的注释。

我们知道.NET源代码的注释是Xml格式的注释,在生成程序集时,只需用选中生成Xml注释,Visual Studio根据源代码生成Xml注释文件。把程序集和相应的Xml文件拷贝到其它电脑中,在Visual Studio中编辑引用类型时,Visual Studio智能提示会提取Xml注释中的内容以方便编程开发。

.NET Xml注释的强大功能不在此多讲,我们来看一下Vsdocman提供了哪些功能令我很满意:

1 在源代码中增加,编辑和生成注释。

2 借助于所见即所得的注释编辑器(WYSIWYG comment editor)帮助编写注释。

3 很容易的直接在源代码中插入表格,列表,图片,联接,类图数据项。

4 生成专业的文档,支持多种格式和多个国家语言输出。输出格式有HTML, CHM, Docx, MS Help Viewer (help for VS 2010 and higher), Help2 (help for VS 2002-2008), RTF, XML。

5 与VS帮助系统直接集成。

6 支持命令行方式调用。

生成的输出文件格式丰富和支持命令行调用令我很满意,只需要写一个Post Build事件命令行调用即可生成文档。

安装好程序之后,Visual Studio的工具栏会多一个小按钮,源代码编辑器会增加以下三个菜单项。

Add Xml Comment 增加注释

Comment Editor 编辑注释

Add Description Attribute 增加描述,点击此菜单之后会给当前方法增加特性。比如:

[System.ComponentModel.Description("编译代码")]

举一个简单的例子,感受一下所见即所得的注释编辑器。

这样可以省略不看MSDN中关于Xml介绍的知识,以图形化方式直观简单的编写注释。

下面来看一下我是如何破解这个软件的。Vsdocman编译之后的代码经过混淆,可以用.NET Reflector反编译,查看关于对话框,可以看到有关试用的代码片段:

   1:   private void About_Load(object sender, EventArgs e)
   2:          {
   3:              try
   4:              {
   5:                  try
   6:                  {
   7:     this.Label10.Text = "Version " + Assembly.GetExecutingAssembly().GetName().Version.ToString();
   8:                  }
   9:                  catch (Exception exception1)
  10:                  {
  11:                      ProjectData.SetProjectError(exception1);
  12:                      ProjectData.ClearProjectError();
  13:                  }
  14:                  if (!Class138.smethod_0())
  15:                  {
  16:                      this.Label10.Text = this.Label10.Text + " trial";
  17:                  }
  18:                  this.Label12.Visible = false;
  19:                  this.Panel1.Visible = false;
  20:                  this.Label13.Visible = false;
  21:                  this.PanelTrial.Visible = false;
  22:                  if (!Class138.smethod_0())
  23:                  {
  24:                      this.Label13.Text = "THIS IS EVALUATION VERSION WITH 14 DAYS TRIAL PERIOD";
  25:                      this.Label13.Visible = true;
  26:                      this.Label14.Text = "You have been using VSdocman for ";
  27:                      if (Class140.smethod_5() > 1)
  28:                      {
  29:                          this.Label14.Text = this.Label14.Text + Conversions.ToString(Class140.smethod_5()) + " days.";
  30:                      }
  31:                      else
  32:                      {
  33:                          this.Label14.Text = this.Label14.Text + Conversions.ToString(Class140.smethod_5()) + " day.";
  34:                      }
  35:                      this.PanelTrial.Visible = true;
  36:                  }

第16行代码后加面了一个试用的字样,表明14行的方法返回false之后,会进入16号增加试用版字样,我们只需要将Class138.smethod_0这个方法的调用返回值改成true即可。

再来看一下Class138.smethod_0方法的源代码:

   1:   internal static bool smethod_0()
   2:          {
   3:              bool flag;
   4:              try
   5:              {
   6:                  flag = false;
   7:                  smethod_7();
   8:                  if (((string_0.Length != 0) & (class139_0.String_0.Length != 0)) && (class139_0.Int32_0 >= smethod_3()))
   9:                  {
  10:                      flag = smethod_5(string_0, class139_0.String_0);
  11:                  }
  12:              }
  13:              catch (Exception exception1)
  14:              {
  15:                  ProjectData.SetProjectError(exception1);
  16:                  ProjectData.ClearProjectError();
  17:              }
  18:              return flag;
  19:          }

以试用版的角度来看这段代码,第10行的代码应该是返回false。这时破解的思路也就产生了,修改

smethod_5方法的返回值,让它总是返回true,或者修改8行的逻辑,让条件总是false不能进入运行第10行代码,再将第6行的代码的默认值改成true,即可完成破解。我选择了后者。

安装Reflexil.Reflector.AIO插件,打开IL代码编辑窗口,直接修改IL代码,然后另存为即可。

如图中所示,第0行的默认值已经改成true,上图中第8行的判断条件,随意改成小于或是等于让它返回false即可,修改之后,再用.NET Reflector加载程序集,源代码反编译如下:

internal static bool smethod_0()
{
bool flag;
try
{
flag = true;
smethod_7();
if (!((string_0.Length != 0) & (class139_0.String_0.Length != 0)) && (class139_0.Int32_0 >= smethod_3()))
{
flag = smethod_5(string_0, class139_0.String_0);
}
}
catch (Exception exception1)
{
ProjectData.SetProjectError(exception1);
ProjectData.ClearProjectError();
}
return flag;
}

破解完毕。

Vsdocman的源代码保护方式是采用Xml签名技术,部分片段代码参考如下:

 internal static bool smethod_1(string string_2, string string_3)
{
string_2 = string_2.Trim();
string_2 = string_2.ToUpper();
string_2 = string_2.PadRight(100, '.');
string_2 = smethod_3(string_2);
byte[] bytes = new UnicodeEncoding().GetBytes(string_2);
string_3 = string_3.Replace("\r\n", string.Empty);
string_3 = string_3.Substring(0, string_3.Length - 0x10);
byte[] buffer2 = smethod_6(string_3);
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString("<RSAKeyValue><Modulus>q/Y9KSdZYHGjjHTLtl5ZzHoaLfyBqGpTISoA98KymLZCoWiudsalpz0zORTYr7LdwHSQiDhMynAxHB2+HR2Tw1c0awwa95VcUUyFIAhTiRoDC8MNHo8R9xxiWIWp0Z1VGKqngtC9RCjdmVethIcSUc167Jw9nNLPAXC0vrmGRs0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");
RSAParameters parameters = provider.ExportParameters(false);
provider.FromXmlString("<RSAKeyValue><Modulus>q/Y9KSdZYHGjjHTLtl5ZzHoaLfyBqGpTISoA98KymLZCoWiudsalpz0zORTYr7LdwHSQiDhMynAxHB2+HR2Tw1c0awwa95VcUUyFIAhTiRoDC8MNHo8R9xxiWIWp0Z1VGKqngtC9RCjdmVethIcSUc167Jw9nNLPAXC0vrmGRs0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");
parameters = provider.ExportParameters(false);
return smethod_2(bytes, buffer2, parameters);
}

这与我的文章《大型.NET商业软件保护技术》中介绍的第3条技术相同。

完整的安装程序和破解文件下载:vsdocman_7_1_setup

安装完成之后,直接将VSdocman2.dll覆盖到安装目录中即可。

程序仅仅限于交流和学习,切勿用于商业用途。

分析优秀的.NET 文档设计工具Vsdocman 7.1 软件保护技术的更多相关文章

  1. api文档设计工具:RAML、Swagger

    api文档设计工具是用来描述和辅助API开发的. 一.RAML https://raml.org/ https://wenku.baidu.com/view/9523238d5ef7ba0d4b733 ...

  2. Api接口文档管理工具,你知道哪些呢?

    上周看到有人在我的Github开源项目中提了个issue,说是否考虑接入swagger.那今天我就用swagger与其他接口文档工具做对比,同时说说Api接口文档工具的那点事.如今,在前后端分离开发的 ...

  3. 【转载】Java Restful API 文档生成工具 smart-doc

    谁说生成api文档就必须要定义注解? 谁说生成接口请求和返回示例必须要在线? 用代码去探路,不断尝试更多文档交付的可能性. 如果代码有生命,为什么不换种方式和它对话! 一.背景 没有背景.就自己做自己 ...

  4. API文档管理工具-数据库表结构思考.

    API文档管理工具-数据库表结构思考. PS: 管理工具只是为了方便自己记录API的一些基本信息,方便不同的开发人员 (App Developer, Restful API Developer)之间的 ...

  5. 【C#附源码】数据库文档生成工具支持(Excel+Htm)

    数据库文档生成工具是用C#开发的基于NPOI组件的小工具.软件源码大小不到10MB.支持生成Excel 和Html 两种文档形式.了解更多,请访问:http://www.oschina.net/cod ...

  6. Java 的 Api 文档生成工具 JApiDocs 程序文档工具

    JApiDocs 详细介绍 简介 JApiDocs 是一个符合 Java 编程习惯的 Api 文档生成工具.最大程度地利用 Java 的语法特性,你只管用心设计好接口,添加必要的注释,JApiDocs ...

  7. 工具:使用过的 API 文档生成工具

    背景 2012 年之前几乎没有为代码增加注释,当然,代码的命名也不见得合理(好的代码胜过面面俱到的注释),后来接触过一些开源框架,优秀的框架都有一个特点:文档和示例非常多,在后来的日子里,几乎会强制自 ...

  8. 基于Mybatis的Mysql数据库文档生成工具,支持生成docx(原创)

    今天不写android--也写写数据库相关的东西 -------------------- 今日老夫闲来无事,设计了一款数据库文档生成工具 眼下仅仅支持mysql 主要是生成docx的 下载链接:下载 ...

  9. API文档管理工具

    系统庞大之后,前后端分离开发,前端调用后端提供的接口,请求协议一般是 HTTP,数据格式一般是 JSON.后台只负责数据的提供和计算,而完全不处理展现逻辑和样式:前端则负责拿到数据,组织数据并展现的工 ...

随机推荐

  1. (转)非常完善的Log4net详细说明

    转自:http://www.cnblogs.com/zhangchenliang/p/4546352.htmlhttp://www.cnblogs.com/zhangchenliang/p/45463 ...

  2. 虚拟机安装Ubuntu到U盘

    这篇经验中特指系统安装到U盘,系统在U盘上,不是双系统,不会改变源系统的设置.只需在启动的时候选择启动路径,就可以从U盘启动你的系统.本文仅仅Ubuntu系统,举一反三可以按照此方法安装各种各样的系统 ...

  3. TortoiseSVN客户端使用说明

    TortoiseSVN客户端使用说明 TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中,下面对TortoiseSVN的菜单项做简要的说明.01.SVN Checkout ...

  4. [原] XAF 如何啟用ListView橫向滾動條

    using System; using DevExpress.ExpressApp; using DevExpress.ExpressApp.Win.Editors; using DevExpress ...

  5. C++类的内存分配

    今天面试被问到一个类的内存问题,有些记不清楚了.用了 C++这么年,实在是不应该. 于是上网查了一些资料,并做了实验,整理如下: 所用测试环境为64位mac air,编译器为XCode 1.最简单 c ...

  6. Android中将布局文件转成bitmap

    在实践中发现,有些需要打印的小票高度小于屏幕的高度,而有些小票内容过多高度高于屏幕高度. 小于屏幕高度的布局文件转成bitmap较为容易,高于屏幕高度的布局文件转成长图bitmap较为复杂. 一.小于 ...

  7. .Net下的 ORM框架介紹

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  8. swift语言特性

    最近苹果推出了他们新的开发语言,swift,他们自己的说法是,swift语言将会更快捷,更安全等等.但是具体的性能,还需要在后面的实践过程中去观察,但是就目前来说swift语言除了将大部分21世纪静态 ...

  9. /proc/sysrq-trigger该文件能做些什么事情-转载

    /proc/sysrq-trigger该文件能做些什么事情呢? # 立即重新启动计算机 (Reboots the kernel without first unmounting file system ...

  10. [ASE]项目介绍及项目跟进——TANK BATTLE·INFINITE

    童年的记忆,大概是每周末和小伙伴们围坐在电视机前,在20来寸的电视机屏幕里守卫着这个至今都不知道是什么的白色大鸟. 当年被打爆的坦克数量估计也能绕地球个三两圈了吧. 十几年过去了,游戏从2D-3D,画 ...