微软的软件授权及保护服务(SLPS)试用分析

简介: 这些天都在绞尽脑汁地想怎么样设计一个授权方式来保护我的组件,今天看了一下同事从广州带回来的Tech2007的讲稿,里面提到了 微软的软件授权及保护服务(SLPS),对其非常感兴趣。 园子里也有朋友曾经介绍过:http://www.
这些天都在绞尽脑汁地想怎么样设计一个授权方式来保护我的组件,今天看了一下同事从广州带回来的Tech2007的讲稿,里面提到了 微软的软件授权及保护服务(SLPS),对其非常感兴趣。

园子里也有朋友曾经介绍过: http://www.cnblogs.com/njnudt/archive/2007/07/12/815625.html

但到网上搜索的时候,只有一个页面有相关信息,里面是上海站的讲稿,还好,找到了一个SLP的链接 http://www.microsoft.com/slps/
打开看了一下介绍,马上下载:http://www.microsoft.com/downloads/details.aspx?FamilyID=7ae70aaa-8b7c-4e3a-af83-b71b6877705b&displaylang=en

安装试用。一启动就要我输入用户名密码,但是不管我怎么输都是错的,只好取消进入,后来看手册才知道,那是要到官方服务器上授权的,如果没有授权的话,这个功能只能保护产品,而不能对产品进行授权控制,并且只能保护三个方法。

加入几个程序集,Protect,然后用Reflector打开我选择加密的那几个方法,居然没有报异常。
而方法体内容都变成这样了:
public   static   void  WriteLine( string  msg)
{
    
object [] args  =   new   object [] { msg };
    SLMRuntime.SVMExecMethod(
null " b0199ec367594bd1b03b3fb29ff12f86 " , args);
}
用Reflector看SLP的各个类时,也发现所有的公开方法都是这种写法,都需要经过 SLMRuntime.SVMExecMethod这个门神。
第一个参数在静态方法中是null,在实例方法中是this,可能是供反射用的吧;第二个参数似乎是方法名的散列,第三个方法是参数数组,即使没有参数,也要构造一个没有元素的数组。
这个方法的代码:
public   static   object  SVMExecMethod( object  obj,  string  SVMMethodId,  object [] args)
{
    Assembly callingAssembly 
=  Assembly.GetCallingAssembly();
    TrivialVirtualMachineParamsReader paramsReader 
=   new  TrivialVirtualMachineParamsReader(obj, args);
    
return  InternalSVMExecMethod(callingAssembly, SVMMethodId, paramsReader);
}
再进去:
public   static   object  InternalSVMExecMethod(Assembly declaringAssembly,  string  SVMMethodId, ISLMVirtualMachineParams paramsReader)
{
    
using  (ISLMRuntime runtime  =   new  SLMRuntime( null , declaringAssembly,  true ))
    {
        
return  runtime.SVM.SVMExecMethod(declaringAssembly, SVMMethodId, paramsReader);
    }
}
SVM已经是 ISLMVirtualMachine接口了,查不到SVM.SVMExecMethod在哪里实现。
回过头来,程序集被加密(暂且这么叫)后,不仅那几个方法改变了,还多了几个文件,分别是: Microsoft.Licensing.Utils2.0.dllMicrosoft.Licensing.Runtime2.0.dllMicrosoft.Licensing.Permutation_1cc06_2.0.dllMicrosoft.Licensing.LicAdmin.exe
其中第三个文件的1cc06_2是我安装SLP后得到的默认授权,最后一个文件是授权管理器。第一第二个文件和SLP安装目录中的一样。看来,第三个文件是临时生成的,里面的名字被混淆得厉害,类名都是两个字母,方法名和属性名都是一个大写字母。
仔细查看第三个文件,居然发现里面有一个fu类实现了 ISLMVirtualMachine接口,而只有一个 Microsoft.Licensing. SLMRuntimeRedirect类使用了fu类。SLMRuntimeRedirect中刚好有个 SVMExecMethod方法,前面的双字母的类方法大多数都调用了这个方法,这可能是自保护吧。
看来fu类是关键了。里面的东西被混淆得乱七八糟的,就不多说了。
分析中注意到,fu的主要方法调用了一个bB类,而bB类实现了SLMLicenses等接口,再看看这个类的内容,非常明显,这是一个授权控制文件,可能这就是SLP的弱点了。

从上面分析可以看到,SLP非常强大好用,但是它毕竟还是完整的.net实现,还是有弱点的,具体要怎么利用,我就不多说了,也不想想了。如果你想到了,不要忘记告诉我哦!^_^

QQ:99363590
EMail:gxuhy@21cn.com
http://www.nnhy.org
我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
相关文章
|
4月前
|
弹性计算 运维 开发者
阿里云操作系统智能助手OS Copilot产品测评报告
阿里云的OS Copilot是面向开发者和运维的智能助手,提升云上应用的构建和管理效率,支持Linux、Windows等操作系统。它具有智能化、自动化特点,帮助进行系统管理和故障排查。用户反馈上手简单,文档清晰,但在高级功能和特定场景支持上还有待加强。用户对其辅助命令执行功能赞赏有加,期望能支持更多操作系统和提供系统级错误排查工具。与ECS、Workbench等集成可提升管理与开发效率。适合云基础设施新手和前端开发者,但在复杂任务中可能需要改进。
376 5
阿里云操作系统智能助手OS Copilot产品测评报告
|
6月前
|
IDE 小程序 API
【社区每周】支付类产品支持“商户联防风险”能力;IDE/基础库版本更新(12月第一期)
【社区每周】支付类产品支持“商户联防风险”能力;IDE/基础库版本更新(12月第一期)
62 11
|
监控
免费猪八戒网站软件任务小助手--小八戒更新版本1.5
免费猪八戒网站软件任务小助手--小八戒更新版本1.5
111 0
免费猪八戒网站软件任务小助手--小八戒更新版本1.5
|
iOS开发 MacOS Windows
无影产品动态 | Windows & macOS客户端新版本发布,云电脑助理功能升级
无影Windows客户端6.3.1版本和macOS客户端6.3.0版本发布!云电脑助理功能更强大,操作体验更流畅。
675 1
|
安全
视频|年最新免费注册MicroSoft365的方法!保姆级教程!!
我们平常说的版本,如:2013、2016等,是那个年份前后推出的office办公套件,我们购买(激活)后,就只能一直使用那个版本,如果想升级新版本,可能需要重新购买(激活)。
503 0
|
机器学习/深度学习 SQL 安全
隐语开放平台12月版本更新,欢迎申请试用!
隐语开放平台12月版本更新,欢迎申请试用!
244 0
|
存储 自然语言处理 安全
近年最佳加密软件:免费、付费、商业工具与服务
近年最佳加密软件:免费、付费、商业工具与服务
992 0
近年最佳加密软件:免费、付费、商业工具与服务
|
安全
安全产品测评:微软电脑管家初体验
微软电脑管家初体验,对比360安全卫士
1097 0
安全产品测评:微软电脑管家初体验
|
安全 Linux 数据安全/隐私保护
Linux平台使用授权码实现软件授权
Linux服务器,想实现软件加密授权的方式有:加密锁,软锁(账号及授权码),云锁。 三种不同的授权方式使用的区别。 加密锁:可以适用完全离线的环境,做限时限次等。 软锁:分为账号软锁及授权码,离线及在线都能使用,无需硬件。
2139 0
|
API 网络架构
微软在线翻译API试用
一直喜欢用Google Translate API进行在线翻译,但是,后来,大家都知道的,因相关政策及法律原因,Google的服务越来越慢,无法忍受,只好寻找更快的在线翻译接口,后来找到Microsoft Translate,觉得非常好用,我用SOAP方式做一个示例,希望给有相同需求的小盆友一点参考,老鸟就不用看了,没什么技术含量的。
1996 0