• 付费客户端攻防篇


    场景描述:

    付费客户端,比如微软offic,付费idea,游戏外挂等等。定时或者每次都会检查客户端是否有授权信息、是否注册等。

    一般而言,授权信息就是一个卡密或者注册码。

    卡密与注册码区别:

    卡密:有卡号与卡密2个东西

    注册码:只有一个码

    区别:从验证的角度而言,2者没有太多区别,那为什么要有卡密呢?其实是为了解决一些场景,比如售后,因为卡密或者注册码是比较隐秘的信息,就算是客服也不能告知,这时候如果有卡号与卡密之分,那么卡号可以公开给客服去排查问题。但是如果只有注册码,那往往要关联上系统账号等等,有时候往往只有注册码,比较不方便。

    付费客服端攻防

    基于付费客户端一般都是用卡密或者注册码这个前提,一般授权都有过期时间或永久,且绑定机器~

    攻1:劫持服务端验证返回结果,比如直接返回true,欺骗客户端放行

    防1:

    要防止欺骗客户端,要做到返回信息不可伪造,且和卡密关联

    1、客户端验证需要用非对称加密(推荐rsa)可以参考我这篇文章,以保证返回的是合法的,防止伪造返回,但不防被抓包截取的合法返回。这里解决了伪造问题。

    2、返回信息需要包含与卡密相关联的字段,以保证这个返回是属于该卡密的,防止没有合法卡密的验证请求,客户端需要根据卡密去关联验证这个字段。这里解决了抓包截取有效卡密的返回,用在无效卡密请求的问题。另外也可以在返回参数加上时间戳,保证请求返回的时效性

    攻2:修改系统时间,延长授权码的使用

    防2:一般而言,如果做到防1,那么这个时间判断是在服务端,返回字段包含是否过期,客户端只要判断服务端的返回即可。

    攻3:一码多机的情况

    防3:绑定机器,一般不绑ip(ip随时会变)

    1、一般在局域网内只有一个路由的情况下,是不允许相同的mac地址同时存在的,但是可以用多路由或者非同时上线的方式绕开。(不同路由,可以允许相同mac)

    2、极端情况下,可以在服务端保存在线状态的方式去防止一码多机,但是这种方法有个弊端就是下线状态问题,且验证完后仍不能脱机使用,下线状态处理不妥,会导致比较多的客诉问题。

    3、有一种做法是当第一次验证注册之后,会在本地生产一个隐秘的唯一码,服务端记录激活状态(俗称激活机制),后面验证就需要带上这个唯一码才能通过,但是破解也很简单,把生产的唯一码文件复制过去即可。当然你可以把唯一码生成在隐秘的地方比如appdata里面,破解方法也很暴力,现在都用虚拟机都是整个镜像复制过去的。

    4、最安全的一种就是定时上报,在较短一定间隔的时间内如果一个卡密上报的频率过高或者有不同mac+ip的上报,证明有超过一个客户端在使用。

    以上的攻防都是基于服务端验证返回的,其实更加常规的做法是本地爆破,直接修改二进制文件,修改你程序的判断逻辑,从而绕开验证判断。参考52破解。

    这种基本无解,但是可以加壳来提高爆破的复杂程度,这里推荐一个强力壳:SProtect https://sp0101.com/

    暗夜之中,才见繁星;危机之下,暗藏转机;事在人为,为者常成。
  • 相关阅读:
    iOS使用第三方管理工具
    Mysql忘记密码怎么办
    支付宝支付流程
    关于iOS9 HTTP不能正常使用的解决方法
    ios项目开发汇总
    sqlite3
    Drupal 7.31版本爆严重SQL注入漏洞
    Google发布SSLv3漏洞简要分析报告
    Linux“Bash”漏洞大爆发
    Discuz 5.x/6.x/7.x投票SQL注入分析
  • 原文地址:https://www.cnblogs.com/zenghansen/p/15272015.html
Copyright © 2020-2023  润新知