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