代码改变世界

我看12306火车票定票系统破解选下铺之技术分解!(?真屌丝逆袭:伪技术帖)

2013-01-07 15:15  稻草人  阅读(11329)  评论(18编辑  收藏  举报

1. 故事回顾

  这些天,微博上有很多人在试着使用这个办法耍流氓看能不能买到下铺火车票, 更有人公然发帖说自己成功拿到了火车票,如下图所示:

 

 

 

于是,出于好奇,我也从代码层面看了一下,到底发生了什么?这到底是伪技术帖还是真屌丝逆袭?!

 

2. 技术分析

首先,使用浏览器定位元素,我用的办法就是用chrome右键审查元素,找到席别下面的dropdownlist,然后下面有一个把隐藏的dropdown list ,把样式从nono 改成了block, 当然,如果onchange 方法后面如果有disable 的话,
也删掉。IE应该不用,因为压根不支持。东西就出来了, 好,终于说完,下面说正题。

 

从代码里可以看到,onchange="selectSeatDetail('1')方法,默认选的值是1进去,其实,他只是为了给下面我选的input 初始化值用。

 

 

 

 

 

// 设置铺别隐藏域的值
function setSeatDetail(index) {
    $("#passenger_" + index + "_seat_detail").val(
            $("#passenger_" + index + "_seat_detail_select").val());
}

具体的资源文件如下图,而同时,微博网友们看到的神算法其实不过是一个设置和生成上下铺dropdownlist 的代码(不过光从注释看来,还真挺唬人的,代码我就不解释了,懒得解释,自己看),
根本不是什么用以计算生成你是上中下铺的算法代码, 而码农我坚信,真正的随机算法,应该TMD也必然TMD的在后台(有不同意见的人拿有事实有根据的砖了拍)。这是我试过两次之后得到的结果,
当然,也会出现下铺,但我认为这就是运气好而已。

 

嗯,解决这个问题之后,再看看最终表单提交的方法。subit_form_confirm, 光从字面和注释判断,恐怕这还不是算随机铺位的地方,虽然这里有一个URL指向了一个 webservies ,方法名叫:checkorderInfo。
这只不过是表单提交前确认操作,的那也就意味着,进一步的动作,是从服务器端完成的。

当然,有人问了,动动手脚,直接传想要的值给webserves, 好吧,看看下面这个警告。

 

补充内容: 感谢楼下的朋友提醒,我也受教了,于是专门去查阅了一些关于跨域的资料,但是我必须得强调,这篇分析文章只是针对网友发的那一篇所谓的技术帖,讨论的也只是它的办法到底行不行。

回到正题,所谓的javascript 跨域问题,有如下四种:

 

  1. JSONP跨域GET请求
  2. 通过iframe实现跨域
  3. flash跨域HTTP请求
  4. window.postMessage

 

我想楼下大放厥词的朋友,大概说的是第四种,直接通过IE8实现跨域,当然同时我也怀疑你是这个帖子的拥护者,是不是真的用它买到了下铺?谁试谁知道。且不说,以下四种都涉及到安全问题,对方完全可以白名单,过滤掉不安全页面信息,只做单纯分析。

先说JSONP(json with padding),需要有格式限制,你不知道另一域的格式,怎么约定格式? 不行!

 第二种,iframe 实现跨域,会留下历史记录,我还不想死! 不行!

第三种,第四种,基本不用考虑,因为在接收的窗口,需要设置一个事件处理函数来接收发过来的消息,显然这不可能成功。

 

好了,至此,我想我的结论已经得出了,从我的分析看来,这个所谓的技术帖, 是一个不折不扣的伪技术帖!鉴定完毕!