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

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

整理的几个关键点:

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.…

通知中心 NSNotificationCenter 的简单使用方法

NSNotificationCenter(通知中心)【注意】需再dealloc中移除观察者获取通知中心单例对象NSNotificationCenter *center[NSNotificationCenter defaultCenter]; 常用方法:1.注册观察者- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(…

solaris mysql_配置Solaris下自带的MYSQL

Solaris自带了mysql服务器,省事不少。用的时候只有小小的配置下就可以搞定。1.用ROOT用户登陆系统,在终端输入/usr/sfw/bin/mysql_install_db2.建立mysql user和 group:# groupadd mysql# useradd -g mysql mysql# chgrp -R mysql /var/mysql…

mysql 1786_mysql错误处理之ERROR 1786 (HY000)

ERROR 1786 (HY000)【环境描述】msyql5.6.14【报错信息】执行create table ... select的时候遇到报错:复制代码 代码如下:db1 [test] [23:01:58]> create tablelgmnr_bak select * from lgmnr;ERROR 1786 (HY000): CREATE TABLE ... SELECTis forbidden when GLO…

Java入门第二季

面向对象 对象:世间万物皆对象,所谓对象,并不是一个抽象的概念,泛指我们生活中的各式各样的事物都称之为对象。 类和对象的关系 类是抽象的概念,是对象的模板 对象是具体的事物,是类的具体实例 面向对象…

HDU1114 Piggy-Bank 完全背包

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

mysql备机写binlp_MySQL主从搭建,实现读写分离(基于docker)

一 主从配置原理mysql主从配置的流程大体如图:1)master会将变动记录到二进制日志里面;2)master有一个I/O线程将二进制日志发送到slave;3) slave有一个I/O线程把master发送的二进制写入到relay日志里面;4)slave有一个SQL线程,按照r…

前后台的验证

为什么前台后台都需要验证?客户端的js,可以屏蔽,方法有多中(浏览器里面就可以设置屏蔽js)所以,服务端也要验证,从安全性角度来讲其中隐藏域也要判断转载于:https://www.cnblogs.com/hupengyin/p…

mysql如何管理空间_管理空间的mysql数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

ubuntu 开启 rewrite 模块

1.sudo a2enmod rewrite 开启Rewrite模块 (停用模块,使用 a2dismod)2. 在/etc/apache2/ 修改apache2.conf 文件中把AllowOverride none 改成All。 转载于:https://www.cnblogs.com/trey-cn/p/4382533.html

mysql 查看编码方式_Mysql查看编码方式专题

Mysql查看编码方式专题一、查看数据库的字符集show variables like character\_set\_%;输出:----------------------------------| Variable_name | Value |----------------------------------| character_set_client | latin1 || character_set_c…

jquery datatables 学习笔记

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

[转]自定义ASP.NET MVC JsonResult序列化结果

本文转自:http://blog.163.com/luckcqyeah/blog/static/17174770720121293437119/ 最近项目中前台页面使用EasyUI的jQuery插件开发中遇到,EasyUI Form中的Datebox组件绑定ASP.NET MVC返回的DateTime类型的数据错误,因为ASP.NET MVC返回的Date…

c# mysql 操作_c#对mysql数据库的基本操作

1 数据库的创建打开已经安装好的数据库,如下流程:step 1:单击 “MySQL Command Line Client-Unicode”step 2:输入密码,进入数据库step 3:建立一个简单的数据库,在这里建立一个名称为“mysql_test”的数据库&#xff0…

jquery右下角自动弹出关闭层

效果体验&#xff1a;http://keleyi.com/keleyi/phtml/jqtexiao/36.htm右下角弹出层后&#xff0c;会在一定时间后自动隐藏。第一版本&#xff1a;http://www.cnblogs.com/jihua/archive/2012/10/10/youxiajiao.htmlhtml代码&#xff1a; <!DOCTYPE HTML> <html xmlns…

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

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

TIJ摘要:访问控制权限

重构的原动力之一&#xff1a;发现有更好的方式去实现相同的功能。OOP需要考虑的基本问题&#xff1a;如何把变动的事物与不变的事物区分开来。访问控制权限&#xff1a;以供类库开发人员向客户端程序员指明哪些是可用的&#xff0c;哪些是不可用的。访问控制的等级&#xff0c…

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

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

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

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

Leetcode 172 Factorial Trailing Zeroes

1、题目要求 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in logarithmic time complexity. 题目意思是求n的阶乘后面末尾0的个数&#xff0c;并且时间复杂度是对数级别。 2、分析 一个数 n 的阶乘末尾有多少个 0 取决于从…