本文作者:传奇大学

Legend登陆验证说明

传奇大学 2020-04-23 93 抢沙发
文章页顶部广告
Legend登陆验证说明摘要: 客户端  在各种闲置状态 发送执行QueryDynCode刚登陆场景就发送CM_QUERYDYNCODE并加密cnsIntro 登陆场景   &nbs...

客户端  在各种闲置状态 发送

执行QueryDynCode

刚登陆场景就发送CM_QUERYDYNCODE

并加密

cnsIntro 登陆场景 

           dMsg := MakeDefaultMsg(CM_QUERYDYNCODE, 0, 0, 0, 0);

            DCP_mars.InitStr(('sWebSite'));//加密密码

            S := DCP_mars.DecryptString(g_pRcHeader.sWebSite);//sWebSite 用网站地址解密

            DCP_mars.InitStr(S);//解密后的地址用作加密密码

            S := DCP_mars.EncryptString(S);//加密

            SendSocket(EncodeMessage(dMsg) + EncodeString(S)); //发送给登陆网关

Format('#1%s!', [{Code, } sendstr])


登陆网关解密 //DecodeBuf misc单元 其实和edcode单元的一样

nDeCodeLen := DecodeBuf(Addr, Len, nABuf);

解密分析后 再加密2次

Randomize();

          nRand := Random(High(Word));//得到一个随机数

          g_DCP_mars.InitStr(IntToStr(nRand));//把这个随机数作为加密的Key

          g_DCP_mars.Reset;

          szKey1 := EncodeString(g_DCP_mars.EncryptString(g_pszDecodeKey^));

g_pszDecodeKey就是网址作为加密密匙 //配置工具写入的

          m_wRandKey := Random(High(Word));//再次取得一个随机数


   Cmd.ident := SM_QUERYDYNCODE;

          Cmd.Recog := g_pLTCrc^;//logintool CRC 长度

          Cmd.param := nRand;//这是用于加密和解密的Key,但是需要转成String

          Cmd.tag := m_wRandKey;

          Cmd.Series := Length(szKey1);


          EncodeBuf(Integer(@Cmd), SizeOf(TCmdPack), Integer(@pszBuf[0]));//把Cmd加密,保存到pszBuf中

          EncodeBuf(Integer(@g_pszEndeBuffer[0]), g_nEndeBufLen, nBBuf);

          szSend := '#' + StrPas(@pszBuf[0]) + szKey1 + StrPas(PChar(nBBuf)) + '!';

返回客户端    m_tIOCPSender.SendData(m_pOverlapSend, @szSend[1], Length(szSend));


客户端全局消息处理函数处理

SM_QUERYDYNCODE

          g_bLoginKey^ := False;

          Str := Copy(body, 1, msg.series);

          Str := DecodeString(Str);

          DCP_mars.InitStr(IntToStr(msg.param));

          Str := DCP_mars.DecryptString(Str);

DCP_mars.InitStr('');

          Str := DCP_mars.DecryptString(Str);


          DCP_mars.InitStr(('sWebSite'));//解密密码

          Str2 := DCP_mars.DecryptString(g_pRcHeader.sWebSite);


          if CompareText(Str, Str2) = 0 then begin

            g_bLoginKey^ := True;

            g_pkeywords := NewStr('');

            g_pkeywords^ := IntToHex(msg.tag, 8);


            rdstr := Copy(body, msg.series + 1, Length(body) - msg.series);

            edBuf := FEndeBuffer;

            FillChar(edBuf^, 16 * 1024, #0);

            len := DecodeBuf(Integer(@rdstr[1]), Length(rdstr), Integer(edBuf));

            nFuncPos := Integer(@FEndeBuffer);


            //asm pushad end;

            ptrGetFunc := LPGETDYNCODE(nFuncPos);




cnsSelChr, cnsReSelChr 选择人物场景

            dMsg := MakeDefaultMsg(CM_QUERYSELCHARCODE, 0, 0, 0, 0);

            SendSocket(EncodeMessage(dMsg));//直接发送给selgate


文章版权及转载声明

作者:传奇大学本文地址:https://www.444.mba/post/1372.html发布于 2020-04-23
文章转载或复制请以超链接形式并注明出处传奇大学

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

分享
您需要 登录账户 后才能发表评论

发表评论

快捷回复:

评论列表 (暂无评论,93人围观)参与讨论

还没有评论,来说两句吧...