美文网首页开发经验随笔程序员软件破解与安全
那些年干过的事(三)—license破解与防护

那些年干过的事(三)—license破解与防护

作者: 山东大葱哥 | 来源:发表于2017-08-25 23:04 被阅读57次

    背景:

    在推广产品时经常需要搭建演示环境,而每次都需要经过繁琐的序列号申请过程,很是麻烦。尤其是在着急确认某功能时,越是着急越容易出问题,经常需要发送好几遍序列号。我实在受不了这种折腾,就想弄个产品演示版本,远离繁杂耗时的lic申请。

    目的:

    破解产品序列号限制,不影响产品正常使用。

    条件:

    无产品源代码;已知产品使用.Net 4.0开发;已知正常序列号为一加密文件;

    工具:

    .Net Refletor、UE、IDA.Pro.Advanced.v6.1、MSIL微软中间语言

    推荐一篇文章

    //www.topzs.com/tech-box/you_qian_ru_shen_ren_shi_cil_de_ji_ben_gou_cheng_cil_cao_zuo_ma_su_ji_biao_cil_cao_zuo_ma_da_quan_su由浅入深认识CIL的基本构成+CIL操作码速记表+CIL操作码大全速查(二)

    方法步骤:

    首先,通过reflector找到与序列号相关的程序代码,这个比较好达到,明显的标志licenseValidate类;

    第二,分析license验证机制,寻找突破口。验证流程为读取加密lic文件,解密文件,通过RSA算法进行序列号校验,根据校验结果返回验证结果。这个校验还是比较糙的,我们可以直接对校验结果的返回值进行patch,也就是不管验证结果是否正确,都返回true,这样就绕开序列号限制了。

    第三,使用IDA打开待破解的文件,按照在reflector看到的方法名进行定位,IDA中提供图形化界面及对应的16进制联动功能,可以很方便的帮我们定位到需要修改的16进制地址。IDA中显示的是IL文件格式,我们通过走读可以找到最终校验返回的代码位置,就是将返回false的地方修改为返回true。这个地方需要使用《CIL操作码速记表+CIL操作码大全速查》,以便于我们理解程序。

    第四,使用UE打开待修改文件,定位到我们要修改的位置,可以按照每行的16进制地址号定位,我们需要返回false对应的中间语言部分ldc.i4.0修改为ldc.i4.1,对应到hex模式下就是将ldc.i4.0对应的操作码为16,修改为ldc.i4.1对应的操作码为17。

    第四,修改完成后直接保存,测试程序是否可正常运行。

    感悟:

    对于.net代码需要在编译时进行混淆或加壳防护,对序列号的校验应该增强校验方式。

    学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入技术爱好者交流群373107565,我们一起学技术!

    相关文章

      网友评论

        本文标题:那些年干过的事(三)—license破解与防护

        本文链接:https://www.haomeiwen.com/subject/ylqldxtx.html