直接修改.NET程序集 LLBL Gen 2.x-4.x 许可授权方法研究
做数据库开发,如果要用ORM,LLBL Gen是一款优秀的框架和工具,目前最新版本是4.0。同时也推出了Lite免费版本,与Visual Studio的Express版本一样,
免费,但是它仅仅只支持10个实体,可满足学习的需要,做项目用则不行。
借助于MSIL知识和工具.NET Reflector,我可以直接对.NET程序集进行编辑,去掉许可证授权验证窗口,转化为可用的软件。
请参考下面的.NET代码,它是LLBL Gen应用Xml签名验证许可的关键程序片段:
public static LicenseInfo Verify(string signedXml, Action<string, string> messageReporterFunc, Action<string, string> errorDisplayFunc,
DateTime nullDate)
{
SignedXml xml = new SignedXml();
RSACryptoServiceProvider key = new RSACryptoServiceProvider();
key.FromXmlString("<RSAKeyValue><Modulus>la+31RHN9+rLO3AWuQYtOZeAdN+YzdNUqFi5gZ0DYHXLUkhptBxvVrtFc3Obv
eiMpdslmFtffBD6fIiYXDQc6xAO4d/9VvYIMK8We9tvZrydXYSakf3GDICd09TkUXk3SLX6aNITsnb4xxPKWHPsv4+PFptRwn99Kh2bN8U
HNBs=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");
XmlDocument document = new XmlDocument {
PreserveWhitespace = true
};
document.LoadXml(signedXml);
XmlNodeList elementsByTagName = document.GetElementsByTagName("Signature");
xml.LoadXml((XmlElement) elementsByTagName[0]);
if (!xml.CheckSignature(key))
{
if (errorDisplayFunc != null)
{
errorDisplayFunc("The license file signature is invalid", "Invalid license file");
}
return null;
}
LicenseInfo info = LicenseInfo.CreateLicenseInfo(document.SelectSingleNode(".//LLBLGenProLicense"));
if (!info.Expires || (((info.UtcLicenseCreationDateTime <= DateTime.UtcNow) && (info.ExpirationDate >= DateTime.Today)) && (nullDate <= DateTime.Now.ToUniversalTime())))
{
return info;
}
if (messageReporterFunc != null)
{
messageReporterFunc(string.Format("The {0} period has ended as your license has expired.", info.TypeOfLicense.ToString().ToLowerInvariant()), "License expired");
}
return null;
}
关于Xml Signature,目前流传的方法是替换Xml密匙对,重新签名,这种方法是可行的。但还有别的途径可以做到。
既然可以申请到官方的试用版,如何判断试用过期,将过期后的处理(抛出异常,或是直接退出)这一段代码处理掉即可。参考上面的代码,过期后,这个方法会返回null,
如果可以将最后一句return null改成 return info,返回许可文件信息,再结合其它的判断,便可以绕开许可证限制,继续使用该软件。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

在图中,将我标识的部分删除,再另存为.NET 程序集,替换原来的程序集,即可绕开验证机制,继续使用过期的软件。
因为可以直接修改代码,所以方法千变万化,也可以这样改代码,把上面的相同行的代码改成
if (info.Expires.....
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }这表示,即使过期了,也继续返回该许可文件信息,不抛出异常。
涉及到代码中要改的地方是brfalse.s改成brtrue.s ,把条件跳转的false改成true,改变流程跳转。
通过学习MSIL语言,可以了解.NET底层的一些处理机制,仅仅是了解层面,大部分时间都在做数据库领域相关的工作,
在程序设计领域,通过MSIL的学习,我体会到的一点是,代码中要尽量避免box/unbox,另外一项好处,就是这里给大家介绍的,
做一些额外的工作,不以获取利益为目标,打发平时的业余时间。
如果想对MSIL语言有多一些的了解,请参考我的文章 代码大全 MSIL语言程序设计 。
直接修改.NET程序集 LLBL Gen 2.x-4.x 许可授权方法研究的更多相关文章
- LLBL Gen + Entity Framework 程序设计入门
Entity Framework推出有好几年,除了微软的Visual Studio可以做实体框架开发外,第三方的开发工具如LLBL Gen, Devart Entity Developer也可以用来做 ...
- Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...
- 接触LLBL Gen Pro 对象关系映射框架后 前途变的一片光明
时间回到2010年,那时候还是熟悉代码生成+基础框架这种模式,基本的开发思路是通过代码生成器生成实体,再生成接口与实现类,最后拖拉控件,写界面数据绑定代码.基本上就是动软代码生成器给出的模式,或是微软 ...
- LLBL Gen Pro 4.2 Lite 免费的对象关系映射开发框架与工具
LLBL Gen Pro是一款优秀的对象关系映射开发框架,自2003年发布以来,一直有广泛的客户群.LLBL Gen Pro有几个标志性的版本,2.5/2.6是一个很稳定的版本,公司的一些旧的项目仍然 ...
- 解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro
LLBL Gen Pro是一个为.NET开发人员设计的的对象关系映射(ORM)框架,与NHibernate,Entity Framework等框架一样,通过实体与数据表的映射,实现关系数据库持久化. ...
- LLBL Gen Pro 5.0 企业应用开发入门
Solutions Design 公司于2016年5月发布了LLBL Gen Pro 5.0,这个新版本的发布出乎于我的意料.我的猜想是从4.2升级到4.5,再升级5.x版本,主版本号的变更会给原有客 ...
- LLBL Gen Pro 5.0
LLBL Gen Pro 5.0 企业应用开发入门 Solutions Design 公司于2016年5月发布了LLBL Gen Pro 5.0,这个新版本的发布出乎于我的意料.我的猜想是从4.2升级 ...
- eclipse下修改项目名导致tomcat内发布名不一致的解决方法 .
eclipse下修改项目名导致tomcat内发布名不一致的解决方法 . ------------------------------------------------------- 解决方案: 直接 ...
- 不修改代码就能优化ASP.NET网站性能的一些方法 [转]
不修改代码就能优化ASP.NET网站性能的一些方法 阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一 ...
随机推荐
- 【细说Java】关于main方法的一些细节
Public static void main(String[] args) public :main方法是jvm运行的入口,所以必须是public来供外部调用 static :main方法无需生成对 ...
- appframework build目录各文件之包含内容
{ "build/css/af.ui.css": [ "css/main.css", "css/appframework.css", &qu ...
- 数据库SQL语句中根据当前日期计算其他日期小结
问题描述:我们在写存储过程和函数的时候经常会碰到利用当前日期计算出上周开始日期.结束日期,或者计算上个月的开始日期结束日期等问题.最近写了几个存储过程和函数,其中都涉及到了日期计算问题,在这里简单做一 ...
- 详细!交叉编译时 note: the mangling of 'va_list' has changed in GCC 4.4解决办法
为什么要在标题前面加了详细两个字,就是为了吸引看文章的你还有写文章的我这种小白,我是从坑里面爬出来了. 废话少说.... 问题就是这样子了,至于解决办法,在网上搜索了很久,大多数以一段英文作为解决办法 ...
- Hyper-V初涉_Hyper-V虚拟机文件交换
使用虚拟机时,文件交互就显得十分重要.如果能实现物理机与虚拟机之间的文件交互,将会节省大量的时间.比较可惜的是,Hyper-V虚拟机并不支持USB存储设备,所以在文件交换上略显麻烦. 与Hyper-V ...
- JAVA设计模式--工厂方法模式
工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...
- MyBatis 查询记录时日期字段没有时分秒
今天发现如果表里面的字段为Date类型时,程序查询出来的数据只有年月日 搜索了下,发现在resultMap里面把这个字段的jdbcType原先为Date,改为Timestamp就行了. 确实可以.
- ubuntu共享文件配置
目标:实现windows和linux混合组成的操作 系统中可以共享文件,并可以通过机器名互相访问 安装文件共享服务 0.更改本机主机名,修改 /etc/hostname文件和/etc/hosts文件中 ...
- [Xamarin] 簡單使用Fragment 靜態篇 (转帖)
新的Android 開發,非常會使用到Fragment,不過官方範例有點小複雜,對初學者來說有點難消化,所以就記錄一下心得,這邊部落格將使用靜態的方法使用Fragment,Fragment 有自己的生 ...
- ie8下使用knockoutjs遇到的一个模板异常
ViewModel中有一个数组,代码大概如下: function ReportViewModel(){ var self = this; self.extendedProperties = ko.ob ...