【转载】网易将军令工作原理

最近开始玩梦幻手游,为了领以前端游的返利必须输入将军令,那个已经一年没用了,输入了几次都提示错误(后来证实是系统繁忙而已),我以为是将军令时间不对了,所以用了下官网的修复功能。也对将军令修复原理有了兴趣,故搜了如下文,非常详细的讲了对将军令原理的猜测,感觉十有八九是对的,看完了觉得非常简单的一个功能,让我自己想一时还想不到。

整理的几个关键点:

1.用固定序号确保产出码的唯一性,用时间确保动态性

2.将军令本身的时间准确度是基础,比如在1星期内误差别超过1个小时我感觉就能接受(主要看矫正机制)

3.服务器产出码的时候加入时间矫正因子△t,△t会在验证时通过上下Y秒进行矫正,或者玩家点修复进行大范围匹配前后码进行矫正,初次开启时就是通过前后码匹配矫正的

4.第三点保证了玩家经常性使用△t会自动矫正,长期不使用(若差值超出自动矫正范围了)则启动前后码大范围矫正

 

【转载自】http://xy2.zhidao.163.com/showtopic/id_2014/

 

将军令的工作原理:猜想

将军令以帐号+密码+动态密码的形式对游戏id进行保护众所周知,将军令每隔一分钟变化一次6位数密码,俗称动态密码。
由于用户端(将军令)在出厂之后,同服务器端就再没有物理上直接的联系,因而,如何与服务器端保持逻辑上的同步是最大的问题,即如何保证用户端产生的动态密码与服务器端验证的动态密码是一个密码? 
猜测:用户端产生的动态密码是一个与时间有关的动态密码,即密码M与时间T之间存在着关系:M=rand(TX),rand()为随机函数,TX为随机函数的种子,X为另一因素,比如将军令的序列号等。
(1)X是一个服务器端已知的变量,出厂时就已经设定了,最大的可能是将军令的序列号、服务号或者序列号服务号所对应的一个因子,在生产将军令写入初始数据的时候,同时植入用户端和服务器端,由于每个将军令的序列号和服务号唯一,因而,拿不到将军令就无法知道X,也就无法知道动态密码M。
显然,只有因子X是不够的,M=rand(X),是产生了一个密码M,但显然无法动态变化,失去了意义。因而因子T不可缺少。 

(2)分析下,植入T之后,服务器端的T1受服务器端时钟影响,用户端T2受用户端时钟影响,问题出现了,如何保证在运行一段时间以后,T1=T2?一个方法是采用高精密的材料,保证在3年的时间里T1=T2,明显成本巨大,以市场上30元左右的电子手表为例,要保证成千上万个电子手表3年内的误差不超过1分钟,可以说是天方夜谈。 

(3)假设:服务器端固定T0,引入因子△t,服务器端植入△t,△t为用户端时钟同服务器端时钟之差,即△t=T2-T1。这样,用户端(将军令)端的密码M=rand(T2X),服务器端密码M=rand[(T1+△t)X],这样,对于成千上万的用户端(将军令)在服务器端只要记录了△t,就可以了。这个△t,可以在将军令生产的时候植入服务器端予以记录。 

(4)同步的问题可以这样解决,服务器端动态的调整△t。在开通将军令的时候,在提交序列号和动态密码的时候,服务器端计算M=rand[(T1+△t)X],并且在△t的基础上,计算出...,△t-5*60,△t-4*60, △t-3*60, △t-2*60, △t-1*60, △t, △t+1*60, △t+2*60, △t+3*60, △t+4*60, △t+5*60,...这个数列。具体数列长度根据需要来定,由于是随机6位数的函数,在这个数列中是不会出现重复的M的。这样,就可以计算出△t附近前后相差n分钟所产生的密码M,只需要比对提交的动态密码与数列中的哪个值对应,就可以动态的调整△t。假设,动态密码与△t-2*60对应的密码相同,就可以调整△t=△t-2*60。这样,解决了用户端(将军令)从出厂到开通使用所产生的时间误差。这个n,根据实际需要制定,如果出厂1个月就差几个小时的话,那将军令的质量就忒差了。

(6)在确定了△t后,服务器端在每次验证的时候,只要算出M1=rand[(T1+△t-y)X],M=rand[(T1+△t)X],M2=rand[(T1+△t+y)X],就可以算出△t附近y秒的时间的密码M,就是允许将军令有y秒的时间误差。在具体使用中,有人已经测试证明将军令是有时间误差的。如果服务器端的M与将军令的M不一样,而是服务器端的M1与将军令的M一样,就可以实时的进行动态调整△t=△t-y了,实现将军令同服务器端时间上的同步。 

(7)电子表的原理:在直流电(电池)的作用下,通过晶体管、音叉、石英晶体、大规模集成电路等等作为振荡器产生一定频率的震荡,通过固定频率的震荡来传动马达,或者驱动液晶屏等来计时。整个系统关键部位是能源(电池),振荡器,表现部分。以石英表为例,在石英晶体的表面施加一定的电压后,石英晶体会产生固定频率的震动,通过分频器后驱动马达,带动指针转动,由于频率固定,指针的转动是匀速的,只要分频调整到与时间一致,就可以计时。所以,电子手表计时是否准确关键看电池、振荡器的质量,我小的时候带的电子手表没电或者换电池后,通常不准,就是受电池电压变化的影响。。。


我想:
1、不可逆的算法,这个很容易实现,数学领域中可以找到很多,随机函数也太多太多。 
2,种子与服务器同步,对应我公式中的TX,同时植入服务器和用户端即可。 
3,每分钟动态刷新密码。植入时间因子就ok了。 
4,关键问题还是同步。从网易前阶段退出的将军令修复的措施来看,应该就是“提醒玩家主动协助对时”,跟新启用将军令几乎是同以道理。而调整频繁问题,也可以采用算法改变调整频率,减轻服务器的负担。 
5,同步的方法还有一些,如果想用的话,可以用“无线控制计时钟表”,原理是标准时间授时中心将标准时间信号进行编码,利用无线电长波发送出去,表端接收时间信号解码,调整时间,保证表端与授时中心时间高度一致。

转载于:https://www.cnblogs.com/vanishfan/p/4377260.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

返回数据_多层数据返回匹配值

↑↑↑点击上方图片,了解详情Access Switch函数示例,分享源码。一、问题描述:想实现如下功能,发现用iff嵌套方式太复杂,有没有更简单的方法? A1≤750 返回5.0 750<A1≤865 返回5.…

HDU1114 Piggy-Bank 完全背包

题意: 给出一个存钱罐的空罐时的质量和装了钱之后的质量,再给出一些硬币的质量和相应的价值,问存钱罐里的钱最少可能为多少。 这道题就是完全背包的问题,注意初始化。 完全背包与01背包不同的是第二次遍历的时候要顺序而已。 初始…

jquery datatables 学习笔记

最近项目中用到了BootStrap做后台,在选择表格插件的时候发现了jquery datatables。 功能是很强大,但是网上的例子比较少。在经过一段时间的努力可算是搞出来了。 官网地址:http://www.datatables.net/ 官网上的例子比较简单,基础的…

mysql中的double类型_MySQL中float、double、decimal三个浮点类型的区别与总结!

作者:极客小俊 一个专注于web技术的80后我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人!CSDN极客小俊,原创文章, B站技术分享个人博客: cnblogs.com前端htmlcssjavascript技术讨论交流群: 281499395后端phpmysqlLinux技术交流…

当电压放大电路的开路增益和输出电阻固定后_晶体管放大电路的性能分析与应用...

关于三极管共射极放大电路的基本分析方法(见附录1),我们之前有聊过。本文重点与大家分享下电路的性能分析,尤其电路的频率响应与选频特性,还是非常有趣的。主要内容有:输入输出电阻通频带如何提高放大倍数1节5号电池可以放大电路吗…

移动设备和SharePoint 2013 - 第5部分:自定义应用

博客地址:http://blog.csdn.net/foxdave原文地址在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观——对移动设备的支持。该系列文章:移动设备和SharePoint 2013 - 第1部分:概述移动设备和SharePoint 2013 - 第2部分&…

java递归实现多级菜单栏_java利用递归调用实现树形菜单的样式

一:需求现有以需求就是把某一个帖子的全部评论展示出来。二:分析关于对帖子的评论分为主评论和子评论,主评论就是对帖子的直接评论,子评论就是对评论的评论。三:思路先获取某一个帖子的全部主评论,递归判断…

mysql in 保持顺序_IN条件结果顺序问题_MySQL

bitsCN.comIN条件结果顺序问题项目中需要记录用户的浏览历史,我的意见是前端直接存cookie里,可是前端说cookie内容太多,要求传递id,后端返回数据,结果就产生如下的问题。1.据前端说,url中的数组传递是无序的…

(部分转载,部分原创)java大数类(2)

NYOJ 773 开方数 http://acm.nyist.net/JudgeOnline/problem.php?pid773 1 import java.util.Scanner;2 3 public class Main{4 public static void main(String[] args){5 int n;6 double p;7 Scanner cin new Scanner(System.in);8 w…

python3 logging com1_python-logging-基础(1)

在执行用例的时候,往往会遇到各种问题,遇到问题后很难去定位import loggingclass Logs:def __init__(self,filepath,name):#self.namename#self.filepathfilepathself.configRead_config(Config_Http)#重新定义日志名字self.loggerlogging.getLogger(sel…

python 复数求模_Python基础语法知识汇总(学习党的最爱!)

本文章包含了Python一系列基本知识,其中包括:基本数据类型(整数,浮点数,复数,字符串);分支语句;异常处理;函数;局部变量与全局变量;递…

JAVA装mysql_已经安装了mysql,怎么能在java程序里使用SQL?

展开全部1、安装62616964757a686964616fe4b893e5b19e31333335323437SQLServer2000安装SQLServer2000补丁SP3安装SQLServer2000 for SP3的驱动程序(先打补丁sp3,再安装针对sp3的驱动程序,安装补丁时,为保险起见,两种验证方式的都装…

用对工具,抖音、某站视频轻松下载~

相信大部分小伙伴都有过这样的困扰,平时我们在刷短视频的时候就发现一段我们需要的视频。想下载时才发现,“保存”按钮是灰色的。 这个时候我们可以通过复制视频链接的方式来下载视频。下面给大家介绍四种万能视频下载工具,大家记得点赞收藏再…

flask 上传excel 前端_flask-restful编写上传图片api

Flask-RESTful是用于快速构建REST API的Flask扩展。我最近在使用Flask-Restful Vue.js写一个轻量博客时有一个前端后端上传图片的需求。在Flask-Restful的官方文档中并没有相关的内容。下面是我谷歌查找资料的总结。引入FileStorageflask-restful的参数解析中并没有文件类型&a…

qdir 类似工具_qdir 类似工具_支持 Win8.1,全能资源管理器 Q-Dir 5.74 发布

Q-Dir是一款帮助用户管理本地文件和文档的工具。支持快速访问定位本地磁盘、网络驱动器、USB移动设备及其他存储设备中的文件或文档。依靠强大的Quadro-View技术,使得Q-Dir成为一款优秀的文件管理工具。Q-Dir文件管理软件特色:• 收藏夹:快速…

面试题:求所占字符

/* 在32位系统下&#xff0c;分别定义如下两个变量&#xff1a;char *p[10],char(*p1)[10],sizeof(p),sizeof(p1)分别值为___________。 */ #include <stdio.h> #include <stdlib.h>void main() {char *p[10],(*p1)[10],p2[10],p3;printf("%d,%d,%d,%d,%d,%d&…

python pyquery安装_win7下python安装pyquery

安装pyquery之前首先要明确一点&#xff0c;easyinstall 是一款python包管理器&#xff0c;类似于node的npm&#xff0c;用于安装python的扩展包&#xff0c;它安装的包是以*.egg的方式。要安装pq需要经历以下步骤&#xff1a;1&#xff1a;下载easyinstall设置环境变量&#x…

织梦直接往数据库写入数据

x: 不是必须的 1: 值为1 0: 值为0转载于:https://www.cnblogs.com/bushe/p/4425298.html

wshttpbinding java_WCF自定义用户账号密码之WCF系结模式wsHttpBinding的Java调用

再回到编辑Web服务属性设定画面﹐刚刚所点击的[使用开发默认值]的复选框如果已经有被勾选了﹐请将勾选取消。然后先离开编辑Web服务属性设定画面。1.7. 加入CallbackHandler 档案这里需要加入一个继承CallbackHandler的档案TrustStoreCallbackHandler.javapublic class TrustSt…

android指纹java_Android

Android M指纹的资料太少&#xff0c;经过一段时间阅读原生Android代码&#xff0c;写了以下例子&#xff0c;贡献出来给需要帮助的人。以下内容基于64位的高通CPU&#xff0c;搭载fpc1020芯片&#xff0c;此部分代码在原生android上做了更改&#xff0c;以应付工厂指纹的测试。…