注意:本文没有恶意行为,只是技术探讨,不要封我得号哦,转载请注明出处,谢谢。
http://hi.baidu.com/popey/blog/item/c2febd51d7ccee1e377abea5.html
今天发现了百度的个人宠物有了一个新得功能,就是说喂食以后可以升级等级,这个功能在追求等级得年代还是有吸引力的,每点击一次,宠物就可以升级3个点,也就说你点击一次就会发送一次数据给服务器,这样就可以进行升级。但是现在有一个问题:
我们看数据包:
当我们点击宠物,喂食得时候,浏览器就会发送一个这样的数据包:
Http: Request, GET /pet/3909c1d4c8cbbadfbadfdb00/eat
服务器返回
HTTP: Response, HTTP/1.1, Status Code = 200
然后我们响应一次,说明接收
TCP: Flags=....A..., SrcPort=3846, DstPort=HTTP(80), Len=0, Seq=2520224419, Ack=1436688214, Win=65101 (scale factor not found)
这就完成一个喂食全过程
通过多次测试,可以确定/pet/3909c1d4c8cbbadfbadfdb00/ 这个是我的宠物编号 eat 当然是喂食得动作了
通过请求完成喂食过程,这里面有一个问题,如果我做一个循环呢
伪代码如下
while(true)
{
send("喂食得数据包即 request pet/xxxxxxxxxx/eat ");
//下面要有一个响应函数
send("响应数据");//没有响应得话,服务器不给我们得宠物升级~~~
}
这样得话,我得宠物不就无敌了吗?
当然,对于数据类得网络程序,总是要有一个限制得,编程也要求有。当然百度也是考虑到了。
宠物每天进食有一个上限,通过时间消耗上限,然后才能升级,这个限制可以保证你不能一天中连续的升级。
同时测试发现,当宠物得饥饿值已经满得话,那么你点击喂食,浏览器是不发送数据的,也就是说在flash得设计中就已经考虑到这个问题了,在登陆得时候,我们会读取服务器上宠物得饥饿值,当饥饿值到达上限得时候,我们点喂食得按钮,是无效得的,它是不会发送数据包的。
但是如果我们不通过flash来发送数据,而是我们自己构造数据呢?
那会发生什么事情呢?
会是阻止? 继续升级 ? 还是一个数据溢出呢?
到这里吧,不测试了。
... ...
其他升级方法就是时间了,这个和服务器有关了,应该是没有办法得,可惜得是施放魔法不消耗体力值,嘿嘿,不然,这个循环可就可以实现无限升级了。
- 标 题:关于百度宠物的升级【安全性】的一点心得
- 作 者:popeylj
- 时 间:2008-08-26 00:27
- 链 接:http://bbs.pediy.com/showthread.php?t=71412