终于有点时间写这样一些文字,来介绍我前些时间写的搜狐阳光牧场外挂。
其实这样的一个外挂没有什么高深的技术,只需要使用2个辅助工具和1门你熟悉的编程语言就OK了。
废话不多说,我就开门见山直接介绍了。
你需要准备2个工具:HttpWatch(或HttpAnalyzer),以及JSONViewer(http://www.codeplex.com/JsonViewer)
HttpWatch(或HttpAnalyzer)是收费软件,JSONViewer是free的。另外你也可以安装Firefox的JSONView插件,也可以不用JSONViewer。
编写任何一个WEB应用外挂,第一步肯定都是登录。只有正确登录了,才能继续后面的操作。
我们先拿HttpWatch来分析一下搜狐白社会的登录过程。
第一部分:登录1、打开http://bai.sohu.com,如果你以前已经登录了,先退出来到要求你输入email和密码的页面
2、按下HttpWatch的Record按钮,然后在页面上输入Email和密码,点登录。然后你会进入白社会首页。这个时候看一下HttpWatch记录的轨迹,如下:
![](http://www.cppblog.com/images/cppblog_com/epubcn/01.png)
上面的图中我添加了filter,把图片什么的过滤掉了。
3、通过上面HttpWatch记录的轨迹,我们很容易看到,登录的真实URL是:
http://passport.sohu.com/sso/login.jsp?userid=你的E-MAIL账号&password=密码串&appid=1062&persistentcookie=1&s=1248665199215&b=2&w=1440&pwdtype=1
上面地址中,userid是你登录时输入的email地址,password是经过md5加密的字符串,s是时间(1970-1-1到现在的秒数,应该是这个账号注册的时间。在C语言中可以用time()函数来产生),w应该是计算机屏幕X方向的分辨率,persistentcookie表示保存cookie,b和pwdtype是一个常量,不知道具体含义(我们也不需要关心)。
OK,通过上面我们看到的URL,就可以完成账号登录了。
第二部分:进入阳光牧场1、打开HttpWatch的Record,点击首页左侧的“阳光牧场”,HttpWatch会将每个页面动作都记录下来。我们可以看到,阳光牧场的真实地址是http://bai.sohu.com/app/farm/。在HttpWatch中选中http://bai.sohu.com/app/farm/这条记录,在下方的Content页签中,可以看到这个页面的source code:
![](http://www.cppblog.com/images/cppblog_com/epubcn/02.png)
2、你可以把这个页面的source code复制出来,到dreamweaver或其他编辑器中查看,你会发现,这个网页其实包含了几个iframe。其中有一个iframe,才是真正的、中间那个阳光牧场的大flash的地址:
<iframe src="http://sh_farm.rekoo.com/embed_swf/?so_sig_uid=6位数字&so_sig_session_key=UXdkRmZMaUxFQjg9&so_sig_sig=049fa15390e4c9acffbecac8870e83c1" frameborder="0" width="796" height="590" scrolling="no"></iframe>在上面的地址中,so_sig_uid就是你在搜狐白社会网站的用户ID,这个ID对一般用户来说没什么用,是每个用户在数据库中的标识。但是对我们编写外挂来说,就很有用了,所以在这个地方,你需要将这个ID保存下来,以后要用到。
3、在浏览器中输入http://sh_farm.rekoo.com/embed_swf
/?so_sig_uid=6位数字&so_sig_session_key=UXdkRmZMaUxFQjg9&so_sig_sig=049fa15390e4c9acffbecac8870e83c1,你会发现浏览器中只留下刚才我们看到的中间的那个大flash了,其他的通通都没有了。事实证明我们找到的这个iframe是正确的。(注:执行此步骤时,别忘了打开HttpWatch的Record)
4、在HttpWatch中选中上面的地址,观察一下返回的Content:
![](http://www.cppblog.com/images/cppblog_com/epubcn/03.png)
5、在上面我选中的高亮部分中,你能看到session_name、session_value、uid等一些信息。其中对我们非常重要的一个值就是session_value。有过web开发经验的朋友都知道,登录后,在站点中是有一个session在client端维护着用户的一些信息,并且这个session是每次登录都会产生的随机字符串,并且有一定的有效期(由管理权配置)。所以,我们要模拟web的动作,就需要拿到正确的session字符串,也就是上面我们看到的那个session_value。
其实到目前为止,我们的分析工作已经进行了一大半了。简单总结一下:
我们上面做了那么多事情,最重要达到两个目的:
(1)如何模拟用户登录
(2)获得正确的UID和sessionid
另外,关于sessionid的获取还有其他方法,例如,如果你使用的是Java,可以从cookie中读取到sessionid。
第三部分、分析阳光牧场各种操作有了上面的基础,下面的分析简直是易如反掌了。
1、打开HttpWatch的Record,将上面的http://sh_farm.rekoo.com/embed_swf
/?so_sig_uid=6位数字&so_sig_session_key=UXdkRmZMaUxFQjg9&so_sig_sig=049fa15390e4c9acffbecac8870e83c1
重新刷新一下。
2、在HttpWatch中,你会看到很多这样的地址:http://sh_farm.rekoo.com/get_api/,这个地址那可是相当的重要啊,几乎所有的命令请求都是往这个地方发。
3、选中http://sh_farm.rekoo.com/get_api/
,在下面的POST Data中可以看到:
![](http://www.cppblog.com/images/cppblog_com/epubcn/04.png)
原来这是一个标准的http post请求,完整的URL就是:
http://sh_farm.rekoo.com/get_api/?method=user.get_friends&rekoo_killer=你的6位UID&sessionid=刚才我们从页面上获取到的session_value
然后我们点击旁边的Content页签,看到服务器返回的内容如下:
![](http://www.cppblog.com/images/cppblog_com/epubcn/05.png)
上面是典型的JSON数据,接下来怎么做不用我说了吧。你可以把上面的内容复制到JSONViewer中,它提供了树形结构供你方便的展开每个节点,以分析父子关系、每个节点的类型等信息:
![](http://www.cppblog.com/images/cppblog_com/epubcn/06.png)
4、上面我们看到的是获取好友列表的请求,其他的诸如获取商店信息、杀虫浇水、播种、收割……请求地址都是http://sh_farm.rekoo.com/get_api/,只不过post的参数不同而已。将正确的参数post给服务器,服务器就会返回相应操作的JSON数据给你,有了这些数据,你就可以进行后期的分析处理了。
OK,通过上面文字的介绍,相信各位已经明白了,这样的一个外挂是怎么工作的了。