-- 软件保护中的技术,运维,运营配置
【官网】:无
应用场景
当开发者或公司提供一款客户端的产品时,常常被他人有意无意的破解,逆向甚至卖盗版。严重侵害公司的权益。 虽然版权保护很有必要,但适当的软件保护和防破解还是需要做的。基础资源
开发人员,销售人员,推广人员,运维人员
使用须知
在做软件保护措施之前,请对公司内部的产品拆分,开发流程,团队协作,工作分工,权限管理做到良好的管理。软件保护是一个综合性方案,任何薄弱环节,内部或外部出现漏洞都可能轻则产品被破解,重则源代码被泄露。
配置步骤
>防软件破解及降低其危害的方案.
>>【技术方面】.
1.商业防破解方案的测试记录与汇总:
1.1>vmprotect:
优点:虚拟机机制,很难跟踪
缺点:
1.8500元的成本,后续每年2000元左右.
2.实施工程复杂:需要结合od工具,配合vmp SDK,在正常业务代码中增加保护片段标记,vmprotect会把标记内的代码片段转换成字节码,在虚拟机中运行.
3.目前尚没有支持.net的sdk.
4.不支持多线程.
1.2>dnguard:
优点:自带运行库(类虚拟机),强度比较高.
缺点:
1.兼容性不是特别好,保护好的软件,在部分win7上可以运行,在有些的xp虚拟机上也能运行,但是一些版本的win7上无法运行.
2.仅支持.net某些特定版本.
2.公司内部防破解思路(简单,虽无法避免被破解,但能让破解版无法正常使用):
2.1>使用一些兼容性强的混淆,降低代码易读性.
2.2>落实软件的签名处理.
2.3>增加校验保护的位置点,并且这些位置点在不同的操作系统拥有不同的校验方式,错误提示.
让断点跟踪者不知从何下手,及时破解了,也总存在疏漏,最终被其名下用户发现并看到.
1.软件用户名,用户类型,到期时间.//破解后通常需要注册码,或者随便填写用户名.
2.软件组件md5值,最后修改时间. //检查软件组件的最后修改时间是否为官方行为.
3.服务器api地址的ping,host校验.//检查是否有host劫持.
4.配置,数据的采集接口,中转接口的请求时的datakey的定时替换.
5.软件用到的apk插件内用户名,密码的校验 .//利用android代码的混淆的复杂性.
2.4>检测到非正版软件时先标记下来,存储,后面运行某个时间才触发动作.
2.5>定期更新类似在线配置,api参数名以及公共类库方法调用.
让破解版进行失效,从而破坏破解版的用户体验,使其疲于奔命,并且让其名下终端用户感觉失望.
出现问题的同时需要提示:<官网,正版,付费版,收费版,原版,官方版本>没有问题.
[注1]如果使用参数配置文件,则可能会被破解者告诉其盗版用户,下载一个正版的,获取之后将配置文件替换本地的..因此只能将参数名放在代码中.引导破解者进行正规编程替换.
[注2]该方案还需要考虑试用版的情形.
[注3]到时候考虑下弄个程序系统参数修改日志这类东西,运营过程更加稳定.
2.5.1>api参数名的更新与升级.
步骤1:后台打击盗版模块,更新api参数名.
步骤2:客户端程序中使用的参数名进行更新.
2.5.2>软件运行通用参数配置的服务端存储,登录成功才获取.
步骤1:同步软件的一些配置到服务器存储.
步骤2:通过登录,获取上述配置,否则每次都得重新编辑.
[示例数据]
1) 组包时的参数键.
2) 延时时间.
3) 第三方接口地址.
…..
2.5.3>用户个性化配置提交到服务器.
[注1].如果直接把个性化配置保存在服务器,服务器消耗的存储空间,数据库负载会加大.运算则不会.
[注2].需要根据关键参数作为主键,有时一个用户在办公室和家里的配置也是不一样的.
付费用户最多3个场景,
免费用户最多1个场景,并且只有1天有效.
[注3].为了避免给服务器带来太大的压力,用户个性化配置发生变化时,与内存中最初加载的进行比对,发生变化的时候才提交该项.
[注4].未来可以通过配置场景的个数,检测用户是否有一号多卖.
[注5].为了避免提交个性化配置时出现异常,导致用户崩溃,可以在出现异常时先以(key=用户名+密码).tolower())加密待提交的内容后缓存在本地(本地只有写,没有读取和处理的代码),提交完了之后立马删除即可.
[注6].本地程序尽量避免使用序列化,反序列化这类机制,这样在添加或删减配置键,由于不同用户时间不同步,因此存在不同用户的配置键数不一样.
[注7].用户试用阶段的数据,将试用账号保存在本地,试用完了,想购买的时候,提供.
[注8].用户数据提交到服务端的好处:
a) 让盗版用户特别麻烦.每次都得重新设置,使得正版用户体验优于盗版.
b) 一定程度避免一号多用,二次转卖.//用户专卖时可能泄露自己的数据,另外专卖后,由于每人限制3套配置,因此多人使用会有冲突.
c) 类似手机app这样的产品,不好远程桌面,有了服务端存储的用户的数据,不少问题就可以本地重现.快速排查.
[注9].用户的一号通账号,密码需要保存在本地.
2.5.4>关键dll的不定期调整,避免被破解版的同名dll替换就能用.
步骤1:调整核心dll里面对外的公开方法名称.
步骤2:正版用户正常升级使用,破解版用户如果不升级则无法使用,升级则变成正版,破解者需要再度进行破解.
2.5.5>下拉框等基础配置信息的数据通过uid验证读取.
[注]
1>.图中2)中的参数包应该是一个密文,且对称秘钥SN=f(版本盐,用户名,密码,接口host).
[注]版本盐是程序中的一个变量.命名为一个类似a,b,c的东西.
1.1.如果破解者不升级组件,盗版程序获取不到最新的更新,盗版老用户无法使用.
1.2.如果破解者部署一个伪造接口,密文里的实际内容会随着售后进行更新,伪造接口可以伪造格式,却无法同步内容.
2>.图中3)中的个性化配置的处理:
1.1. 破解者如果想直接在用户本地存储明文,改动比较大.
1.2. 破解者如果想伪造接口,接口就无法仅仅返回死值了,因为不同用户,每次编辑配置都对应不同的值.
1.3. 破解者如果直接在UI上赋值,则变成死值,无法动态变化也不行.
1.4.需要软件本身多账号轮回机制,考虑到数据量比较大,因此需要进行按产品分表.
1.5.针对试用用户这块建立了一个专门的计数,计时表(tb_anticrackusersofttesttime),这个表和tb_usersoft是对称的,联合起来就覆盖了所有用户.另外这个表可以定时清理那些已经很久不再使用的试用账号.
试用账号的阶段 |
缓存数据处理 |
DB数据处理 |
备注 |
首次登录(试用身份) |
Add |
add |
|
后续登录(试用身份) |
Check |
- |
友好,避免用户感觉不稳定 |
|
|
|
|
后续应用(试用身份,读取数据) |
Check |
- |
避免被破解 |
后续登录(试用身份,站点重启) |
Load DB |
- |
|
后续登录(试用身份,延长试用) |
Update |
update |
|
后续登录(收费身份) |
Delete |
delete |
|
3>.图中4)以后需要监控代理商有没有提供大量的使用账号,因为可能破解者会成为代码,之后写程序去调用一键生成临时账号的机制.
由于试用账号数目可能比较大,因此可以考虑定期清除已经过期很长时间(比如超过1个月以上的账号).
>>【推广方面】.
1.在软件内界面上,公告上,官网上都要宣传:正版用户会享受售后服务.
2.对破解版页面进行”功能受限,没有售后等差评.
3.大规模发布破解版信息,冒充破解版.
3.1.百度下拉框有”x软件破解版",我们可以冒充破解版,抢占下拉框.
发布大量“QQ营销软件破解版,营销QQ辅助软件破解版..."的推广信息(指向正版的一个oem品牌站),挽回部分被破解版宣传链接误导的用户,让消费者在找寻破解版的途中也遇到正版,并明白可能没有破解版.
3.2.在下载站发布假破解版,让喜爱破解版的用户看到正版官网,服务信息.
用户使用过程中,会提示:”校验失败,请前往官网
XX购买正版”.
>>【售后方面】.
1.提供开发人员查询接口,核验用户身份(通过查询用户名,核对注册信息).
如果遇到破解版用户:则直接指明这是盗版,需要转换为正版才能享受更新升级.
[附.net混淆工具]
软件保护工具的调查:http://blog.csdn.net/qinlicang/article/details/6164336
知乎:http://www.zhihu.com/question/24664184
.net软件保护工具评测:http://blog.csdn.net/zhou__zhou/article/details/1836372 //MaxtoCode
.net混淆confuxseEx的用法:http://www.th7.cn/Program/net/201408/269923.shtml.
2.售后工具,需要依赖于用户名,密码进行处理.
>>【在线教程及资源方面】.
1.可以在在线视频教程中嵌入宣传正版,打击盗版的信息.
(假如有的话),嵌入正版用户享受的服务,官微,官网等宣传信息.
>与软件保护方案提供商的谈判要点.
1.>需要防止客户端代码被破解,篡改.
2.>不能让用户的软件和电脑硬件绑定,兼容现有的网络验证方式.
3.>需要保证软件正常功能的稳定性,加密后的运行速度方面不能下降太大,影响到正常功能.
3.1>如果有用到混淆的话,我们软件内部有泛型,序列化,多线程等,看是否会受到影响.
3.2>需要避免被360等杀软大范围报毒.
3.3>运行的平台,从xp,win7,win8,win10等, 32位级64位的全部都需要支持..
4.>需要支持vb, c#.net
5.>需要提供试用,验证可行才交易.
6.>确定软件保护服务的收费方式,永久的还是按年的.
7.>付款方式,能否预付,有了效果之后再全付.
8.>公司有5个工程师,希望每个人都能够应用这套方案: 主要是在软件发布,更新升级的时候.
9.>是否有技术支持,遇到特殊情况联系谁.
10.>是否能开发票,是否能签合同.
>软件保护服务提供商选择.
厂商(产品)名称 |
官网 |
售后 |
备注 |
爱加密 |
|
专注移动app的加密保护,防逆向,防二次打包. |
|
|
|
|
|
瑞宝泰科 |
|
Safenet北京地区白金代理. |
|
比特安索 |
http://www.bitanswer.cn |
|
|
【关于防破解方案的实施】
1.销售后台个性化配置,程序参数的管理模块.
1.1>后台的增,删,改.
1.2>由于涉及到uid,但用户有多个场景,考虑到禁止一号并发登录,将uid放到tb_usersoft表或者新增表中比较合理.//但uid只是登录相关的用户,为了性能和兼容性,以及扩展性,都应该再新建一个uid缓存表TB_AntiCrackUserSoftSessionCache.
[注]由于心跳很容易被破解者屏蔽,让我们无法控制重复登录这块,不过由于我们在提交配置更新时,需要用uid验证,因此一号多用的话uid肯定不一样,这样破解版会出现很多问题.
2.销售后台API.
2.1>软件按照uid获取的API.
2.1>常规获取.
2.2>免费用户的一天限制,付费开通后激活继续.
2.3>客服一键生成试用账号,指定1,2,24小时的有效期账号.
2.2>软件检测到配置更新,按uid提交的API.
2.3>之前android版微信营销的UID存储这块应该是设计有问题,需要调整,统一在现在的TB_AntiCrackUserSoftSessionCache中//这个放到最后去做,需要保持现有程序的稳定性.
3.客户端软件.
3.1>正常获取.
3.2>提交正常个性化配置.
3.3>提交不同场景的配置.
如果发现路由器,ADSL账号发生变化了的时候,可以保存新的场景配置.
常见问题
快速入门
无