qq农场外挂编写分析-java

   QQ农场是基于http协议的,因此只要通过工具软件截取http数据包,从而进一步进行分析提交和接收到的数据含义,然后再模拟一个flash client和服务器打交道即可。

   为了实现以上目标,下载安装截获tcp/ip数据包的工具软件ethereal ,安装好以后,登陆QQ进 入农场 ,然后开启 ethereal 软件开始截获数据包,然后在农场里点刷新好友列表按钮,然后去ethereal里看看截获到的数据包,

   发现读取好友列表的url地址 是: 

http://happyfarm.qzone.qq.com/api.php?mod=friend

 

需 要的参数有:login_time 、skey、uin 三个 

 

知道这个地址以后,可以用apache httpclient模拟一个flash client,具体代码如下: 

 

   String login_time = ConfigProperties.getProperty("login_time");
   String skey = ConfigProperties.getProperty("skey");
   String _s_ = ConfigProperties.getProperty("_s_");
   String uin = ConfigProperties.getProperty("uin");

   HttpClient hc = new HttpClient();
   // 创建GET方法的实例
   GetMethod getMethod = new GetMethod(url);
  
   getMethod.addRequestHeader("Accept", "*/*");
   getMethod.addRequestHeader(
          "User-Agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; 360SE)");
   getMethod.addRequestHeader("Accept-Encoding", "gzip, deflate");
   getMethod.addRequestHeader("Accept-Language", "zh-CN");
   getMethod.addRequestHeader("Connection", "Keep-Alive");
   getMethod.addRequestHeader("Pragma", "no-cache");

   hc.getState().clearCookies();
  
   String cookies = "1" + "; _s_=" + _s_ + "; uin=" + uin + "; skey="+ skey + "; login_time=" + login_time;

 

   hc.getState().addCookie(
          new Cookie("happyfarm.qzone.qq.com", "jump", cookies, "/",
          new Date(2011, 12, 8), false));

 

   // 执行getMethod
   int statusCode = hc.executeMethod(getMethod);
  
   String result = getMethod.getResponseBodyAsString();


按照这种方法,可以找到获取某个好友农场信息的url 地址是: 

http://nc.qzone.qq.com/cgi-bin/cgi_farm_index?mod=user&act=run&ownerId =

偷 某个好友某块或多块地的url地址是:

http://nc.qzone.qq.com/cgi-bin/cgi_farm_steal?mod=farmlandstatus&act=scrounge  

 

ok, 这些都搞定了,另外偷菜的 url地址需要提交一个参数farmKey ,这个生成方法有点难度,具体方法为: 

 

   int curTime = (int) (System.currentTimeMillis() / 1000L);

   String s = "sdoit78sdopig7w34057";
   int yushu = curTime % 10;
   s = s.substring(yushu, 20);
   String farmKey = com.sourceware.util.StringUtil.getMD5(curTime + s);

 

另外需 要分析一下服务器返回的数据包格式,目前看到的都是 json格式, 

 

比如得到好友列表的数据 为:

 

[{"userId":1905432,"userName":"/u6c38/u8fdc/u7684/u9ed1",

   "headPic":"http:qlogo2.store.qq.com//qzonelogo//1265877//1//1242884728",

   "yellowlevel":0,"yellowstatus":0,"exp":7776,"money":38961,"pf":0},

 

 {"userId":159805,"userName":"/u8f7b/u63cf/u6de1/u5199",

   "headPic":"http:imgcache.qq.com//qzone_v4//client//userinfo_icon//5001.gif",

   "yellowlevel":0,"yellowstatus":0,"exp":20332,"money":22665,"pf":0},

 

 {"userId":65178,"userName":"Air-F","headPic  后面省略...

 

如果是用java开发的话可以用json-lib包来解析。 

 

另外根据返回的错误提示语 整理如下: 

 

如果返回{"code":0,"direction":"这块地没东西可摘 的!","farmlandIndex":2,"fkey":"8297832f9f305bd1ad2d083c35148d815069b5c61da3382c0119b74f65b8e42e6d597313b9101acb","poptype":1}
应 该是这块地已经成熟,且被人摘光了(成熟的地都有一个产量,剩余数,最小的剩余数《通过这个可以得到最多可以被偷几个》)。

 

如果 返回的是{"code":0,"direction":"获取农田信息失 败","fkey":"e3c2806e13df1092281157971b0f9466dcfbe7433a368f4d2398b0721398add7afc8c76f889555d5","poptype":0}
那 么应该是这块地还没成熟就去偷了;或者已经被主人收割了;或者这块地什么都没种; 

 

如果返回的是: {"code":0,"direction":"做人不能贪得无 厌!","farmlandIndex":1,"fkey":"2848bb16cb28e1929822cb716b0e87292864ea9068ebe95b5d6d51580fb4b13718e3c2787af58294","poptype":1}, {"code":0,"direction":"做人不能贪得无厌!","farmlandIndex":2,"poptype":1}
 那说明 你已经偷过了还要去偷;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值