新生命

其实我也搞别的编程http://www.nnhy.org

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  17 Posts :: 1 Stories :: 118 Comments :: 2 Trackbacks
这些天都在绞尽脑汁地想怎么样设计一个授权方式来保护我的组件,今天看了一下同事从广州带回来的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
posted on 2007-11-08 12:03 大石头 阅读(2197) 评论(13)  编辑 收藏 网摘

Feedback

#1楼  2007-11-08 12:08 年轻活力      
期待中
  回复  引用  查看    

#2楼  2007-11-08 12:27 各个感 [未注册用户]
俺顶撒
  回复  引用    

#3楼  2007-11-08 13:00 金戈铁马      
看了文章,对于加密内核技术也没弄明白.不这这种通过服务端授权的办法对于软件的保护还是值得揣摩的.
  回复  引用  查看    

#4楼  2007-11-08 13:24 oxsoft.cn [未注册用户]

前几天已经在tech.ed 2007 广州站的分会见过了....

大会上好多人都对这个提出了很多质疑...到底能防止到那种成度...那个讲师也没有给出一个好的解决方案...郁闷ing...
  回复  引用    

#5楼 [楼主] 2007-11-08 14:32 大石头      
呵呵 金戈铁马 也在。

对于楼上两位的疑问,我想可能是因为我没有说清楚。

SLP的加密很有个性,把用户程序集的公有方法的方法体都搬到它自己的程序集里面去了,也不知道是在哪个类里面的哪个方法。调用的时候也不用搬回来。也就是说,想还原回来原来的那个程序集,几乎已经是不可能了。

另外,从它的授权文件里面可以看到,它会对文件进行校验,所以,仅仅改文件,是不行的了。

但是,我文中也说清楚了,只要找到继承授权类(就是实现了授权接口的那个,用Reflector很容易找到),修改IL,再找到文件校验的地方破坏掉,重新编译就可以得到无限制版本的破解了。

有时间可以仿造一个这样的工具^_^
  回复  引用  查看    

#6楼  2007-11-08 14:59 gxh9731 [未注册用户]
这个好象就是混淆一下,好象用处不大,不过对于大的软件混淆以下也就可以了
  回复  引用    

#7楼  2007-11-08 20:59 踏雪无痕      
真正要安全,还是自己做一个好了,著名的容易被人破解了。
比如,想加密,自己做一个,别人一看就傻了,不按常理出牌,我这个即不是rsa,des,看你怎么破。
  回复  引用  查看    

#8楼  2007-11-09 00:31 [阿毅] [未注册用户]
@踏雪无痕
怎么破?照样破!
原生的win32app都可以破,.net还能更难?
只有值不值得破的问题,只要能正常跑就没有不能破的。
  回复  引用    

#9楼  2007-11-09 00:50 导火线 [未注册用户]
个人理解:代码经过加密后最后run 时还是要变成对应的il代码的吧,只是这个run 的环境变成的加密沙漏中,最要命的是效率了慢几十倍,还不如用混淆
  回复  引用    

#10楼 [楼主] 2007-11-09 09:50 大石头      
楼上说的有道理
  回复  引用  查看    

#11楼  2007-11-09 09:54 暂用名 [未注册用户]
看了看slp的价格,有点想骂人的冲动
  回复  引用    

#12楼  2007-11-29 17:59 Ray Zhang [未注册用户]
下个版本会支持非托管代码。


但是它毕竟还是完整的.net实现,还是有弱点的,具体要怎么利用
-----------
其实他不是纯.NET实现:)

  回复  引用    

#13楼  2007-12-27 09:41 ssw3d34 [未注册用户]
slps 让 盗版去见鬼吧! 盗版,你他*的,把我们这些搞软件的去喝西北风啊!
支付相当的软件“使用费”,不要几块钱就获得了我们搞软件的呢么多日夜的“心血”!用盗版的人们,你可知道 排除一个BUG,优化软件性能等等是要付出无差别的一般劳动的!可几块钱的盗版就给无情的占有了!“极低费用”获得软件的人们,你们太无情了,不要怪我们也无情,用盗版的去等着吧!去*吧!可可
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: