暗黑3玩家吧 关注:8,678贴子:333,421
  • 3回复贴,共1

验证器问题,求技术大神指点

只看楼主收藏回复

验证器就是手机里下的那个软件。
一直不明白原理,不用联网,不用输入任何信息,就能验证。想不明白,求懂的大神指点


IP属地:河北1楼2014-05-28 09:34回复
    度娘不谢。
    http://bbs.ngacn.cc/read.php?tid=4185637
    1、首先创建一个56位的byte数组,结构如下:
    00 byte[1] 固定为1;
    01 byte[37] 37位的随机数据,只使用一次,用来解密服务器返回数据;
    38 byte[2] 区域码: US or EU;
    40 byte[16] 设备模型数据(手机型号,或者任意数据)
    2、向服务器请求创建数据
    将上面创建的56位byte数组作为请求数据,以POST方式向 [i][http://m.us.mobileservice.blizzard.com/enrollment/enroll.htm][/i] (EU则为 [i][http://m.eu.mobileservice.blizzard.com/enrollment/enroll.htm][/i])发送请求
    获取服务器返回数据,长度应该为45位,结构如下:
    00 - 07 服务器时间(网络字节序,计算本地时间与服务器时间的差值);
    08 - 45 通过步骤1中37位随机数据加密过的数据(包括序列号和私钥)
    3、将步骤2中08 - 45这37位数据进行解密
    操作方法为与步骤1中的37位随机数据按位进行 “与或”操作
    解密后的37位数据结构如下:
    00 - 19 私钥(私钥就是计算验证码所用的钥匙)
    20 - 37 序列号(格式为US-xxxx-xxxx-xxxx,就是在战网上绑定到账户所需要的14位数字序号,输入的时候,不需要中间的连字符)
    这也就是为什么所有版本的手机验证器(包括java,安卓等)第一次启动需要联网的原因,以后启动则无需联网,只需要通过私钥将当前时间加密即可,除非本地时间更改,与服务器不同步
    4、获取验证码
    将当前时间,通过时间差值计算出服务器时间
    然后服务器时间除以30000(毫秒,即30秒,也就是每半分钟更换一次验证码)
    将该值通过步骤3中的私钥,经过SHA1算法计算出结果(SHA1算法很常见,这里不赘述),这个结果就是验证码


    IP属地:江西2楼2014-05-28 22:24
    收起回复
      2025-08-31 07:37:52
      广告
      不感兴趣
      开通SVIP免广告
      水水水水水水水水水水水水水水水水水水水水水水水水水水水


      IP属地:湖北来自iPhone客户端3楼2014-05-30 12:06
      回复