飞's profile程序人生PhotosBlogListsMore Tools Help

Blog


    September 21

    从零开始给开心网做外挂(一)

    开心网现在渐渐很流行了,里面有几个好玩的插件,主要有买卖奴隶、争车位、咬人这三个比较受欢迎,其中,买卖奴隶可控性不是很高,因为有时候这个规则比较难设置,优先买谁等等,要根据情况,有人参与一下才比较好。但是争车位和咬人就比较随意了,争车位只要换个位子就可以收钱,咬人随便咬谁都有经验,但是呢,它们都需要常常在线操作,对于时间不是很充裕的人,是一个负担。

    那么,是不是有必要借助工具呢?现在网上已经有相应的工具了,功能也不错,不过,对于我们做软件的人来说,自己动手做一个也是不错的事情,练练手,而且也能顺便看一下别人的代码是怎么写的。

    好,我们先拿这个争车位来分析。

    怎么分析呢,给开心网写外挂其实比给什么网络游戏写外挂简单多了,网络游戏的外挂需要抓数据包分析,这个过程是很烦躁的,但是开心网,因为它是web的,而且它的插件都是ajax的,所以可以直接看代码。

    这样吧,我们图省事,也就拿web做外挂,HTML+JavaScript,调用他的接口。

    先登录一下吧,这个步骤是没法避免的。登录页面很简单,它就是一个表单,action是/login/login.php,所以也就是http://www.kaixin001.com/login/login.php这个了,它的参数也很容易找到,就是一个email,一个password,所以,一会我们写登录部分的时候,把这两个拼起来post一下就可以了。

    这里有一个问题了,post结束之后,怎么知道是成功了呢?很简单,只要成功登陆,肯定会跳转到主界面,然后主界面有什么特定的东西呢?到主界面的源码里面把它的title拷出来就可以了,只要post的结果里面包含了这个title,就说明已经登录了。

    到了主界面,看左边一排插件列表,鼠标放在“争车位”这三个字上,因为这是一个链接,所以状态栏就会显示它的链接地址,好,记录下来,http://www.kaixin001.com/app/app.php?aid=1048,这个没有参数,不需要用post,只要get一下就可以。

    点一下,进了争车位主界面,唔,flash做的,但是参数肯定是从js传递过去的了,看一下这个页面源码,发现两个有用的变量,一个叫做v_userdata,这是保存用户信息的,另外一个叫做v_frienddata,很明显是保存好友信息的了,这两个的内容都是json格式定义的,那么这就是在服务端生成这个页面时候拼出来的,我们怎么取得它呢?

    来,我们猥琐一把。想一下,这个页面的内容是什么,一个字符串,对,字符串,两个变量分别定义在不同的行上,而这两个行只做了给这两个变量赋值的事情,接下来的事情就简单了,首先把页面源码split一下,用"\n"做分割符,这样得到的就是一个数组,每个元素是里面的行,然后,遍历下来,如果这个行indexOf我们可爱的变量,就eval它,没错,eval,然后就隐式定义了这两个变量,于是在这个作用域,我们也可以调用它们了。

    v_userdata有一个属性叫做user,这是保存个人基本信息的,比如说你的名字是什么,你的id是什么,你有多少现金,等等,枚举出来即可,还有一个属性叫做car,它是一个数组,保存的是当前拥有的车辆,数组每个元素当然是一个车子了,里面有它的名字,牌子,价格,当前收益等等,我们列举它出来就可以了。

    好了,到这里为止,我们已经可以查询出车子的信息了,前途是很光明的,怎么去自动停车收钱呢?以后再说吧。

    通过分析开心网的代码,我了解了以下几个事情,这个网站其实技术上复杂程度并不高,代码挺少的,它主体是PHP写的,用什么语言其实差别不大,它使用的JS框架是prototype,调用后台的方式,很显然就是一个Ajax的异步call,每做一个事情,就设置一个回调函数,改变界面,对我们做外挂来说,所需要的界面基本是没有的,基本上只是拿来显示是否成功等等,那这里就要一律改成同步调用,然后按照顺序一个一个跑下去。

    会写代码的可以自己动手试试哈,不会的就当我什么都没说了,代码暂时不泄露,哈哈。