微软的软件授权及保护服务(SLPS)试用分析
来源:互联网 发布:淘宝运动店铺推荐 编辑:程序博客网 时间:2024/06/04 18:37
来源:新生命 - 博客园
这些天都在绞尽脑汁地想怎么样设计一个授权方式来保护我的组件,今天看了一下同事从广州带回来的Tech2007的讲稿,里面提到了 微软的软件授权及保护服务(SLPS),对其非常感兴趣。
但到网上搜索的时候,只有一个页面有相关信息,里面是上海站的讲稿,还好,找到了一个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.dll、Microsoft.Licensing.Runtime2.0.dll、Microsoft.Licensing.Permutation_1cc06_2.0.dll、Microsoft.Licensing.LicAdmin.exe。
其中第三个文件的1cc06_2是我安装SLP后得到的默认授权,最后一个文件是授权管理器。第一第二个文件和SLP安装目录中的一样。看来,第三个文件是临时生成的,里面的名字被混淆得厉害,类名都是两个字母,方法名和属性名都是一个大写字母。
仔细查看第三个文件,居然发现里面有一个fu类实现了ISLMVirtualMachine接口,而只有一个Microsoft.Licensing.SLMRuntimeRedirect类使用了fu类。SLMRuntimeRedirect中刚好有个SVMExecMethod方法,前面的双字母的类方法大多数都调用了这个方法,这可能是自保护吧。
看来fu类是关键了。里面的东西被混淆得乱七八糟的,就不多说了。
分析中注意到,fu的主要方法调用了一个bB类,而bB类实现了SLMLicenses等接口,再看看这个类的内容,非常明显,这是一个授权控制文件,可能这就是SLP的弱点了。
从上面分析可以看到,SLP非常强大好用,但是它毕竟还是完整的.net实现,还是有弱点的,具体要怎么利用,我就不多说了,也不想想了。如果你想到了,不要忘记告诉我哦!^_^
这些天都在绞尽脑汁地想怎么样设计一个授权方式来保护我的组件,今天看了一下同事从广州带回来的Tech2007的讲稿,里面提到了 微软的软件授权及保护服务(SLPS),对其非常感兴趣。
但到网上搜索的时候,只有一个页面有相关信息,里面是上海站的讲稿,还好,找到了一个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.dll、Microsoft.Licensing.Runtime2.0.dll、Microsoft.Licensing.Permutation_1cc06_2.0.dll、Microsoft.Licensing.LicAdmin.exe。
其中第三个文件的1cc06_2是我安装SLP后得到的默认授权,最后一个文件是授权管理器。第一第二个文件和SLP安装目录中的一样。看来,第三个文件是临时生成的,里面的名字被混淆得厉害,类名都是两个字母,方法名和属性名都是一个大写字母。
仔细查看第三个文件,居然发现里面有一个fu类实现了ISLMVirtualMachine接口,而只有一个Microsoft.Licensing.SLMRuntimeRedirect类使用了fu类。SLMRuntimeRedirect中刚好有个SVMExecMethod方法,前面的双字母的类方法大多数都调用了这个方法,这可能是自保护吧。
看来fu类是关键了。里面的东西被混淆得乱七八糟的,就不多说了。
分析中注意到,fu的主要方法调用了一个bB类,而bB类实现了SLMLicenses等接口,再看看这个类的内容,非常明显,这是一个授权控制文件,可能这就是SLP的弱点了。
从上面分析可以看到,SLP非常强大好用,但是它毕竟还是完整的.net实现,还是有弱点的,具体要怎么利用,我就不多说了,也不想想了。如果你想到了,不要忘记告诉我哦!^_^
- 微软的软件授权及保护服务(SLPS)试用分析
- 微软的软件授权及保护服务(SLPS)
- 微软的SLP软件加密保护服务
- 软件保护与软件授权
- 借助TPM实现软件的版权保护和授权体系
- 云授权重新定义互联网下的软件保护
- 先进的微软视窗软件保护系统WinLicense
- 关于开发开源软件的授权 及获取数据的分析
- 剖析:从软件加密到软件授权保护
- 使用电子授权保护和发行软件
- 两款授权保护软件对比
- 剖析:从软件加密到软件授权保护
- 软件保护入口点安全及技术分析
- 设定软件使用期限,根据网络时间保护试用软件产品的方法
- 软件试用的乐趣
- 微软分析服务常见问题
- NC免费试用授权到期的问题解决
- 圣天狗是保护软件应用程序不被盗版和未经授权使用的硬件软件狗
- JSF Component 选择:ICEfaces or RichFaces?
- prototype.js 1.4版开发者手册(强烈推荐) (转)
- 利用VC+OpenGL实现几种特殊图形效果
- 使用DevExpress 的 ASPxGridView 控件显示主从表
- OpenGL下的场景层次化渲染
- 微软的软件授权及保护服务(SLPS)试用分析
- 对象文件格式分析工具: objdump, nm,ar
- Rails应用连接Oracle数据库时的配置
- 在网页里添加Web Live Messenger对话框 转贴
- ajax初体验
- GDI+ for VCL基础 -- GDI+ 与 VCL
- 五种提高 SQL 性能的方法---转贴
- JDOM使用详解及实例
- 通过ClassLoader调用外部jar包