【转载】网易将军令工作原理
最近開(kāi)始玩夢(mèng)幻手游,為了領(lǐng)以前端游的返利必須輸入將軍令,那個(gè)已經(jīng)一年沒(méi)用了,輸入了幾次都提示錯(cuò)誤(后來(lái)證實(shí)是系統(tǒng)繁忙而已),我以為是將軍令時(shí)間不對(duì)了,所以用了下官網(wǎng)的修復(fù)功能。也對(duì)將軍令修復(fù)原理有了興趣,故搜了如下文,非常詳細(xì)的講了對(duì)將軍令原理的猜測(cè),感覺(jué)十有八九是對(duì)的,看完了覺(jué)得非常簡(jiǎn)單的一個(gè)功能,讓我自己想一時(shí)還想不到。
整理的幾個(gè)關(guān)鍵點(diǎn):
1.用固定序號(hào)確保產(chǎn)出碼的唯一性,用時(shí)間確保動(dòng)態(tài)性
2.將軍令本身的時(shí)間準(zhǔn)確度是基礎(chǔ),比如在1星期內(nèi)誤差別超過(guò)1個(gè)小時(shí)我感覺(jué)就能接受(主要看矯正機(jī)制)
3.服務(wù)器產(chǎn)出碼的時(shí)候加入時(shí)間矯正因子△t,△t會(huì)在驗(yàn)證時(shí)通過(guò)上下Y秒進(jìn)行矯正,或者玩家點(diǎn)修復(fù)進(jìn)行大范圍匹配前后碼進(jìn)行矯正,初次開(kāi)啟時(shí)就是通過(guò)前后碼匹配矯正的
4.第三點(diǎn)保證了玩家經(jīng)常性使用△t會(huì)自動(dòng)矯正,長(zhǎng)期不使用(若差值超出自動(dòng)矯正范圍了)則啟動(dòng)前后碼大范圍矯正
?
【轉(zhuǎn)載自】http://xy2.zhidao.163.com/showtopic/id_2014/
?
將軍令的工作原理:猜想
將軍令以帳號(hào)+密碼+動(dòng)態(tài)密碼的形式對(duì)游戲id進(jìn)行保護(hù)眾所周知,將軍令每隔一分鐘變化一次6位數(shù)密碼,俗稱動(dòng)態(tài)密碼。
由于用戶端(將軍令)在出廠之后,同服務(wù)器端就再?zèng)]有物理上直接的聯(lián)系,因而,如何與服務(wù)器端保持邏輯上的同步是最大的問(wèn)題,即如何保證用戶端產(chǎn)生的動(dòng)態(tài)密碼與服務(wù)器端驗(yàn)證的動(dòng)態(tài)密碼是一個(gè)密碼??
猜測(cè):用戶端產(chǎn)生的動(dòng)態(tài)密碼是一個(gè)與時(shí)間有關(guān)的動(dòng)態(tài)密碼,即密碼M與時(shí)間T之間存在著關(guān)系:M=rand(TX),rand()為隨機(jī)函數(shù),TX為隨機(jī)函數(shù)的種子,X為另一因素,比如將軍令的序列號(hào)等。
(1)X是一個(gè)服務(wù)器端已知的變量,出廠時(shí)就已經(jīng)設(shè)定了,最大的可能是將軍令的序列號(hào)、服務(wù)號(hào)或者序列號(hào)服務(wù)號(hào)所對(duì)應(yīng)的一個(gè)因子,在生產(chǎn)將軍令寫(xiě)入初始數(shù)據(jù)的時(shí)候,同時(shí)植入用戶端和服務(wù)器端,由于每個(gè)將軍令的序列號(hào)和服務(wù)號(hào)唯一,因而,拿不到將軍令就無(wú)法知道X,也就無(wú)法知道動(dòng)態(tài)密碼M。
顯然,只有因子X(jué)是不夠的,M=rand(X),是產(chǎn)生了一個(gè)密碼M,但顯然無(wú)法動(dòng)態(tài)變化,失去了意義。因而因子T不可缺少。?
(2)分析下,植入T之后,服務(wù)器端的T1受服務(wù)器端時(shí)鐘影響,用戶端T2受用戶端時(shí)鐘影響,問(wèn)題出現(xiàn)了,如何保證在運(yùn)行一段時(shí)間以后,T1=T2?一個(gè)方法是采用高精密的材料,保證在3年的時(shí)間里T1=T2,明顯成本巨大,以市場(chǎng)上30元左右的電子手表為例,要保證成千上萬(wàn)個(gè)電子手表3年內(nèi)的誤差不超過(guò)1分鐘,可以說(shuō)是天方夜談。?
(3)假設(shè):服務(wù)器端固定T0,引入因子△t,服務(wù)器端植入△t,△t為用戶端時(shí)鐘同服務(wù)器端時(shí)鐘之差,即△t=T2-T1。這樣,用戶端(將軍令)端的密碼M=rand(T2X),服務(wù)器端密碼M=rand[(T1+△t)X],這樣,對(duì)于成千上萬(wàn)的用戶端(將軍令)在服務(wù)器端只要記錄了△t,就可以了。這個(gè)△t,可以在將軍令生產(chǎn)的時(shí)候植入服務(wù)器端予以記錄。?
(4)同步的問(wèn)題可以這樣解決,服務(wù)器端動(dòng)態(tài)的調(diào)整△t。在開(kāi)通將軍令的時(shí)候,在提交序列號(hào)和動(dòng)態(tài)密碼的時(shí)候,服務(wù)器端計(jì)算M=rand[(T1+△t)X],并且在△t的基礎(chǔ)上,計(jì)算出...,△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,...這個(gè)數(shù)列。具體數(shù)列長(zhǎng)度根據(jù)需要來(lái)定,由于是隨機(jī)6位數(shù)的函數(shù),在這個(gè)數(shù)列中是不會(huì)出現(xiàn)重復(fù)的M的。這樣,就可以計(jì)算出△t附近前后相差n分鐘所產(chǎn)生的密碼M,只需要比對(duì)提交的動(dòng)態(tài)密碼與數(shù)列中的哪個(gè)值對(duì)應(yīng),就可以動(dòng)態(tài)的調(diào)整△t。假設(shè),動(dòng)態(tài)密碼與△t-2*60對(duì)應(yīng)的密碼相同,就可以調(diào)整△t=△t-2*60。這樣,解決了用戶端(將軍令)從出廠到開(kāi)通使用所產(chǎn)生的時(shí)間誤差。這個(gè)n,根據(jù)實(shí)際需要制定,如果出廠1個(gè)月就差幾個(gè)小時(shí)的話,那將軍令的質(zhì)量就忒差了。
(6)在確定了△t后,服務(wù)器端在每次驗(yàn)證的時(shí)候,只要算出M1=rand[(T1+△t-y)X],M=rand[(T1+△t)X],M2=rand[(T1+△t+y)X],就可以算出△t附近y秒的時(shí)間的密碼M,就是允許將軍令有y秒的時(shí)間誤差。在具體使用中,有人已經(jīng)測(cè)試證明將軍令是有時(shí)間誤差的。如果服務(wù)器端的M與將軍令的M不一樣,而是服務(wù)器端的M1與將軍令的M一樣,就可以實(shí)時(shí)的進(jìn)行動(dòng)態(tài)調(diào)整△t=△t-y了,實(shí)現(xiàn)將軍令同服務(wù)器端時(shí)間上的同步。?
(7)電子表的原理:在直流電(電池)的作用下,通過(guò)晶體管、音叉、石英晶體、大規(guī)模集成電路等等作為振蕩器產(chǎn)生一定頻率的震蕩,通過(guò)固定頻率的震蕩來(lái)傳動(dòng)馬達(dá),或者驅(qū)動(dòng)液晶屏等來(lái)計(jì)時(shí)。整個(gè)系統(tǒng)關(guān)鍵部位是能源(電池),振蕩器,表現(xiàn)部分。以石英表為例,在石英晶體的表面施加一定的電壓后,石英晶體會(huì)產(chǎn)生固定頻率的震動(dòng),通過(guò)分頻器后驅(qū)動(dòng)馬達(dá),帶動(dòng)指針轉(zhuǎn)動(dòng),由于頻率固定,指針的轉(zhuǎn)動(dòng)是勻速的,只要分頻調(diào)整到與時(shí)間一致,就可以計(jì)時(shí)。所以,電子手表計(jì)時(shí)是否準(zhǔn)確關(guān)鍵看電池、振蕩器的質(zhì)量,我小的時(shí)候帶的電子手表沒(méi)電或者換電池后,通常不準(zhǔn),就是受電池電壓變化的影響。。。
我想:
1、不可逆的算法,這個(gè)很容易實(shí)現(xiàn),數(shù)學(xué)領(lǐng)域中可以找到很多,隨機(jī)函數(shù)也太多太多。?
2,種子與服務(wù)器同步,對(duì)應(yīng)我公式中的TX,同時(shí)植入服務(wù)器和用戶端即可。?
3,每分鐘動(dòng)態(tài)刷新密碼。植入時(shí)間因子就ok了。?
4,關(guān)鍵問(wèn)題還是同步。從網(wǎng)易前階段退出的將軍令修復(fù)的措施來(lái)看,應(yīng)該就是“提醒玩家主動(dòng)協(xié)助對(duì)時(shí)”,跟新啟用將軍令幾乎是同以道理。而調(diào)整頻繁問(wèn)題,也可以采用算法改變調(diào)整頻率,減輕服務(wù)器的負(fù)擔(dān)。?
5,同步的方法還有一些,如果想用的話,可以用“無(wú)線控制計(jì)時(shí)鐘表”,原理是標(biāo)準(zhǔn)時(shí)間授時(shí)中心將標(biāo)準(zhǔn)時(shí)間信號(hào)進(jìn)行編碼,利用無(wú)線電長(zhǎng)波發(fā)送出去,表端接收時(shí)間信號(hào)解碼,調(diào)整時(shí)間,保證表端與授時(shí)中心時(shí)間高度一致。
轉(zhuǎn)載于:https://www.cnblogs.com/vanishfan/p/4377260.html
總結(jié)
以上是生活随笔為你收集整理的【转载】网易将军令工作原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《软件测试技术》课程第二周随笔
- 下一篇: 文本框获取和失去焦点默认值问题