青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
在MaNGOS-Zero中認(rèn)證登錄服務(wù)器是已獨立的進(jìn)程存在的,名字叫realmd,這樣命名可能是和游戲client端根目錄下的realmlist.wtf文件相對應(yīng)。realmd的主要工作是:檢查登錄用戶的合法性,并在合法的情況下完成通信密鑰的交換,最后把游戲邏輯服務(wù)器的地址信息列表傳給client端。

realmd認(rèn)證的基本流程如下:

圖中的(1)~(7)詳細(xì)過程如下:

(1)Client啟動后立即嘗試連接realmlist.wtf文件中指定的認(rèn)證服務(wù)器,就發(fā)送LogonChallenge給認(rèn)證服務(wù)器realmd。協(xié)議結(jié)構(gòu)如下:

   1: typedef struct AUTH_LOGON_CHALLENGE_C
   2: {
   3:     uint8   cmd;                //Cmd is the command/operation code of the packet. Always 0 for this message
   4:     uint8   error;
   5:     uint16  size;            //Size of the remaining part of the message
   6:     uint8   gamename[4];    //4 byte C-String, containing the String "WoW\0"
   7:     uint8   version1;            //Major version number of the client ( 1 for 1.12.1 )
   8:     uint8   version2;            //Minor version number of the client ( 12 for 1.12.1 )
   9:     uint8   version3;            //Patchlevel version number of the client ( 1 for 1.12.1 )
  10:     uint16  build;            //Build number of the client. ( 5875 for 1.12.1 )
  11:     uint8   platform[4];        //Platform the client is running on, reversed C-String ( "68x\0" for x86 )
  12:     uint8   os[4];            //OS the client is running on, reversed C-String ( "niW\0" for Windows )
  13:     uint8   country[4];        //Locale of the client, reversed C-String ( "SUne" for enUS )
  14:     uint32  timezone_bias;
  15:     uint32  ip;                //IP address of the client in binary format
  16:     uint8   I_len;            //Length of the Identity ( user name ) in characters
  17:     uint8   I[1];                //The Identity string ( user name )
  18: } sAuthLogonChallenge_C;

uint8 I[1]是一個unsigned char的變長數(shù)組的頭指針,保存user name,服務(wù)器端保存的時候要把\0后面的東西去掉,防止SQL injection。(1.1)執(zhí)行“SELECT sha_pass_hash,id,locked,last_ip,gmlevel,v,s FROM account WHERE username = '%s'”語句從數(shù)據(jù)庫中讀取數(shù)據(jù)。

realmd收到sAuthLogonChallenge_C協(xié)議后處理步驟如下:

1) 檢查該ip是否被封禁,如果是發(fā)送相應(yīng)的錯誤

2) 查詢數(shù)據(jù)庫中是否有該賬戶,如果沒有返回相應(yīng)的錯誤

3) 查看最后一次登錄ip與賬戶是否綁定,如果綁定對比當(dāng)前ip與last_ip是否一致

4) 檢查該賬號是否被封禁,如果是發(fā)送相應(yīng)的錯誤信息

5) 獲取用戶名密碼,開始SRP6計算,參見本文最下方的附錄《MaNGOS所使用的SRP6算法》

6) _accountSecurityLevel,保存用戶的權(quán)限等級,普通用戶、GM、admin等等

7) 本地化:根據(jù)_localizationName的名字找對應(yīng)的.mpq文件所在的位置比如enUS,zhTW,zhCN

 

(2) realmd向client發(fā)送challenge,協(xié)議如下:

   1: typedef struct
   2: {
   3:     uint8   cmd;            //Cmd is the command/operation code of the packet. Always 0 for this message.
   4:     uint8   error;
   5:     uint8   unk2;        //random value
   6:     uint8   B[32];        //B is an SRP6 value. It is the server's public value.
   7:     uint8   g_len;        //Length of the SRP6 g value we send the client in bytes. Always 1
   8:     uint8   g[1];            //The SRP6 g value we send the client. Always 7
   9:     uint8   N_len;        //Lenght of the SRP6 N value we send the client. Always 32
  10:     uint8   N[32];        //The SRP6 N value we send the client. 
  11:     uint8   s[32];        //The SRP6 s value
  12:     uint8   unk3[16];        //a randomly generated 16 byte value.
  13:     uint8   unk4;        //a single byte 0.
  14: } sAuthLogonChallenge_S;

 

 

(3)客戶端的Handshaking階段,client為了回應(yīng)realmd的challenge消息,證明client的密碼和server上保存的密碼一致,需要計算M1值,并發(fā)送給realmd,發(fā)送的協(xié)議如下:

   1: typedef struct AUTH_LOGON_PROOF_C
   2: {
   3:     uint8   cmd;                    //Cmd is the command/operation code of the packet. Always 1 for this message
   4:     uint8   A[32];                //The client SRP6 A value ( public client value ).
   5:     uint8   M1[20];                //The client's SRP6 M value.待比較的最終值
   6:     uint8   crc_hash[20];            //doesn't seem to be used
   7:     uint8   number_of_keys;        //It also seems to be always 0
   8:     uint8   securityFlags;                 // 0x00-0x04
   9: } sAuthLogonProof_C;

計算公式如下,各個變量的含義請查看本文最下方的附錄《MaNGOS所使用的SRP6算法》

A = g^a mod N //a為19個字節(jié)的隨機數(shù)

B = (kv + g^b) mod N

u = H(A, B)

x = H(s, p)

S = (B - kg^x) ^ (a + ux)

K = H(S)

M = H(H(N) xor H(g), H(I), s, A, B, K)

上訴的哈希函數(shù)H都使用的是SHA1

 

(4)realmd收到client發(fā)來的Proof協(xié)議,(a)開始檢查版本是否允許,(b) 使用SRP6計算M值,與client傳過來的M1做對比,if (!memcmp(M.AsByteArray(), lp.M1, 20)) { } (c) 如果M值相等計算K —— 即sessionkey,并最終保存到數(shù)據(jù)庫。

 

(5)驗證成功,realmd向client發(fā)送server的logon proof

   1: typedef struct AUTH_LOGON_PROOF_S
   2: {
   3:     uint8   cmd;
   4:     uint8   error;
   5:     uint8   M2[20];            //The SRP6 M values,M = H(H(N) xor H(g), H(I), s, A, B, K)
   6:     uint32  unk1;            // AccountFlags (trial 0x08, ProPass 0x800000, gm 0x01)
   7:     uint32  unk2;            // SurveyId
   8:     uint16  unk3;            // some flags (AccountMsgAvailable = 0x01)
   9: } sAuthLogonProof_S;

 

 

(6)_HandleRealmList,查詢realmcharacters表獲得角色和realmid的對應(yīng)關(guān)系,然后可以在RealmList類里通過realmid找到對應(yīng)的表項,RealmList在初始化的時候再realmlist表里讀取數(shù)據(jù)放在內(nèi)存里使用:“SELECT id, name, address, port, icon, realmflags, timezone, allowedSecurityLevel, population, realmbuilds FROM realmlist WHERE (realmflags & 1) = 0 ORDER BY name ” 查詢邏輯服務(wù)器。

 

(7)發(fā)送realmlist給客戶端,客戶端選擇對應(yīng)的服務(wù)器后點擊enter world的時,會主動斷開和realmd的連接。

 

總結(jié):整個登錄認(rèn)證過程主要干了如下幾件事

(a)使用公鑰算法驗證client的合法性。

(b)client合法的情況下,計算sessionkey并保存在MySQL里,以備后面的邏輯服務(wù)器使用。

(c)驗證通過后,把邏輯服務(wù)器列表發(fā)給client。

其中最為重要的就是在驗證合法性、交換密鑰的過程中,如何在傳遞的協(xié)議里隱藏client的密鑰,使其在被截獲的情況下也無法被黑客解析,這就只能依仗密碼學(xué)了。WOW所使用的加密算法是SRP6,詳細(xì)的介紹如下:

 

 

 

附錄:MaNGOS所使用的SRP6算法

SRP全稱Secure Remote Password(安全遠(yuǎn)程密碼).使用SRP的客戶機和服務(wù)器不會在網(wǎng)絡(luò)上傳送明文密碼,這樣可以消除直接密碼嗅探行為,另外使用高強度的算法保證了不可能使用字典法攻擊嗅探到的數(shù)據(jù)[1]。SRP協(xié)議的描述見 http://srp.stanford.edu/design.html

SRP6名詞解釋:

N - A large safe prime (N = 2q+1, where q is prime) All arithmetic is done modulo N.

g - A generator modulo N

k - Multiplier parameter (k = H(N, g) in SRP-6a, k = 3 for legacy SRP-6)

s - User's salt

I - Username

p - Cleartext Password

H() - One-way hash function

^ - (Modular) Exponentiation

u - Random scrambling parameter

a,b - Secret ephemeral values

A,B - Public ephemeral values

x - Private key (derived from p and s)

v - Password verifier

對應(yīng)MaNGOS的計算方法和變量含義:

sha_pass_hash:使用這個函數(shù)進(jìn)行Sha1Hash哈希std::string AccountMgr::CalculateShaPassHash(std::string& name, std::string& password)后得到的值。

N: A large safe prime (N = 2q+1, where q is prime), All arithmetic is done modulo N. 在MaNGOS里N被設(shè)成N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7");

s: 32個字節(jié)的隨機數(shù),算過一次后保存在數(shù)據(jù)庫里。

x: 計算v值使用到的x,即私鑰是s與數(shù)據(jù)庫里的sha_pass_hash的倒置的Sha1Hash

v: g^x mod N,驗證密碼時使用Password verifier,算過一次后保存在數(shù)據(jù)庫里。

g: g = 7

b: 為19個字節(jié)的隨機數(shù),每次client連接認(rèn)證的時候重新生成。

a: 19個字節(jié)的隨機數(shù),由客戶端產(chǎn)生。

B: 公鑰, gmod = g^b, N , B = ((v * 3) + gmod) % N

K: 認(rèn)證通過后最終保存到數(shù)據(jù)庫里的sessionkey,(1)計算A 客戶端公鑰A = g^a mod N a為19為隨機數(shù),(2)計算x,x = sha(s, I),I = sha(“username : password”); (3)計算u,u = sha(A, B) //(服務(wù)公鑰,客戶公鑰);(4)計算S,S = (B - g^x*3)^(a+u*x); (5)計算K,S為32位,K為40位是 sha(s奇部分)20位, sha(s偶部分)20位的奇偶交錯組合。

M: 20個字節(jié)的數(shù),用于與client傳過來的最終結(jié)果M1進(jìn)行對比,如果M和M1每個字節(jié)都相等則驗證通過。計算方法:t3 = sha(N)[i] ^ sha(g)[i],t4 = sha(username),M = sha(t3,t4,s,A,B,K)

k: k = 3

總結(jié):服務(wù)端,客戶端各自計算S的公式個不同,公鑰部分服務(wù)端用A,b, 客戶端用B,a 但其計算結(jié)果相同………私鑰x被很好的隱藏了,因為想從M獲得x是基本不可能的!基于數(shù)學(xué)難題基礎(chǔ)上的加密算法確實很給力。

 

References

[1]http://blog.csdn.net/lfhfut/article/details/1124768

[2]http://www.arcemu.org/wiki/

[3]http://hi.baidu.com/zyy503950958/blog/item/3addce90a91eda81a877a463.html

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品永久免费精品| 亚洲欧美一级二级三级| 亚洲影音先锋| 亚洲欧美制服另类日韩| 最近看过的日韩成人| 亚洲一区二区四区| 在线精品视频在线观看高清| 欧美不卡高清| 亚洲毛片av在线| 亚洲国产日韩美| 欧美激情视频网站| 国产精品尤物福利片在线观看| 欧美激情第1页| 亚洲另类在线一区| 亚洲激情在线视频| 亚洲黄网站在线观看| 欧美jizzhd精品欧美喷水| 卡一卡二国产精品| 亚洲第一精品影视| 一区二区三区欧美在线观看| 亚洲美女精品一区| 性欧美videos另类喷潮| 久久www成人_看片免费不卡| 亚洲欧美视频在线观看| 欧美在线观看视频在线| 欧美xxxx在线观看| 国产欧美在线播放| 亚洲国产一区在线| 久久av一区二区三区| 欧美激情第三页| 午夜伦理片一区| 欧美精品久久久久久| 国产欧美一区二区三区久久 | 欧美日韩一级大片网址| 欧美天天在线| 在线不卡中文字幕播放| 午夜国产精品视频免费体验区| 久久九九国产精品| 亚洲午夜精品久久久久久app| 久久久久久69| 依依成人综合视频| 欧美制服丝袜| 欧美在线不卡| 韩国精品久久久999| 久久激情综合| 午夜国产精品影院在线观看| 亚洲国产福利在线| 欧美成人免费在线观看| 亚洲国产女人aaa毛片在线| 久久综合伊人77777麻豆| 欧美一区二区在线看| 国产片一区二区| 久久精品人人做人人综合| 亚洲专区在线| 黑人操亚洲美女惩罚| 久久美女性网| 欧美国产成人精品| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲精品视频免费| 欧美日韩一卡二卡| 亚洲综合日本| 99re66热这里只有精品3直播| 欧美久久综合| 久久精品91久久久久久再现| 久久青草欧美一区二区三区| 在线观看国产一区二区| 亚洲国产一区二区视频| 欧美午夜宅男影院在线观看| 亚洲欧美国产日韩中文字幕| 欧美一区二区三区免费视| 一区在线影院| 亚洲在线视频免费观看| 99精品国产在热久久下载| 欧美一区二区视频在线| 亚洲一区影院| 午夜国产一区| 国产精品成人在线| 亚洲精品久久久久久久久久久久久 | 欧美高清视频一区二区三区在线观看| 欧美日韩在线一区| 农夫在线精品视频免费观看| 激情五月婷婷综合| 久久久久9999亚洲精品| 久久米奇亚洲| 在线精品视频免费观看| 美女999久久久精品视频| 欧美成人精品在线播放| 尤物yw午夜国产精品视频明星 | 免费欧美视频| 亚洲一区二区三区视频| 欧美精品在线免费观看| 亚洲国产精品高清久久久| 国产日韩欧美亚洲| 国产一区二区精品久久| 亚洲国产欧美久久| 亚洲午夜一区| 久久av一区| 欧美国产日本高清在线| 91久久国产综合久久| 久久久97精品| 国内精品国语自产拍在线观看| 亚洲欧美日本在线| 欧美一区二区日韩| 久久久久久久波多野高潮日日| 欧美人与性禽动交情品| 亚洲国产精品v| 亚洲激情在线观看视频免费| 六月丁香综合| 亚洲国产精品传媒在线观看| 亚洲免费观看| 国产欧美日韩精品一区| 一区二区三区色| 久久精精品视频| 亚洲精品欧美专区| 久久国产主播| 久久久久久夜精品精品免费| 欧美午夜宅男影院| 亚洲欧美日韩国产中文| 亚洲欧美偷拍卡通变态| 欧美视频观看一区| 久久躁狠狠躁夜夜爽| 亚洲一区二区三区成人在线视频精品| 免费看成人av| 亚洲免费观看视频| 亚洲欧美日韩区| 激情综合激情| 国产精品久久久久久久电影| 欧美亚洲视频在线观看| 亚洲尤物影院| 亚洲美女啪啪| 欧美韩日一区| 久久国产88| 亚洲人成在线免费观看| 国产欧美一区二区三区沐欲| 欧美日韩国产一区精品一区| 欧美一区日本一区韩国一区| 亚洲视频大全| 久久国产精品免费一区| 欧美国产先锋| 久久久九九九九| 亚洲电影在线看| 久久精品在线视频| 午夜一区在线| 欧美成人午夜剧场免费观看| 一本色道久久综合亚洲精品不卡| 狠狠干综合网| 国产免费成人在线视频| 国产精品国产精品国产专区不蜜| 麻豆精品传媒视频| 欧美xx视频| 国产精品狠色婷| 怡红院精品视频| 久久久福利视频| 欧美永久精品| 99精品视频免费全部在线| 亚洲欧洲久久| 久久国产天堂福利天堂| 亚洲国产成人av| 亚洲人成小说网站色在线| 亚洲精品欧美极品| 亚洲国产一区在线| 国产精品99久久久久久久女警 | 国产香蕉97碰碰久久人人| 欧美午夜不卡| 国产精品久久久久久影视| 国产欧美日韩三级| 韩国三级在线一区| 亚洲一区二区免费看| 久热精品视频在线| 久久精品久久综合| 亚洲电影一级黄| 欧美有码视频| 欧美成人综合| 亚洲性感激情| 欧美日韩国产页| 亚洲欧美精品在线观看| 在线视频欧美一区| 精品96久久久久久中文字幕无| 亚洲欧美色一区| 久久嫩草精品久久久久| 欧美日韩在线播放三区四区| 国产精品久久久久久久久久久久久| 亚洲日本电影| 久久精品一区蜜桃臀影院| 久久精品中文字幕免费mv| 亚洲国产精品电影| 久久久久国产精品厨房| 亚洲一区激情| 欧美视频一区在线| 国产欧美一区二区精品秋霞影院| 久久福利影视| 欧美系列精品| 亚洲自拍三区| 亚洲欧美日韩中文播放| 国产农村妇女毛片精品久久麻豆 | 欧美高清视频在线观看| 国产一区二区三区在线播放免费观看| 性视频1819p久久| 亚洲无亚洲人成网站77777| 国产精品自拍一区|