xlst 发表于 2012-12-22 21:13:14

破解【百度文库开学幸运大转盘】刷新限制

<div id="cnblogs_post_body">活动地址:文库开学啦--幸运大转盘,惊喜不间断!

今天,揣了半个多月的一千多个幸运星,准备在活动的最后一天抽奖(当然过期就失效了,赶紧把握)。
可是百度的前端不知道怎么想的(可能出于防刷防挂),竟然每次抽完奖都要刷新一次页面!我有一百多次的抽奖机会,若等刷新,那不是烦死。。。
为了节约抽奖花费的时间,遂决定破解它。

首先,采取最简单的方法,重写关闭按钮(关闭弹窗之后才刷新)的oncilck事件。可是,看过代码结构之后,发现原始调用方法并不那么容易找着(其实我真的找不着),因为它的javascript代码经过压缩和混淆的,行数信息没什么意义。

然后,就想到可以阻止刷新代码,于是覆盖了location.reload方法,可是chrome里,覆盖无效(直接覆盖location对象也不行,而内置的Date对象则是可以覆盖的),而且使用delete操作符也删除失败(这个预料之中,只是不试就不甘心)。

接下来,就向window的onbeforeunload下手了。可是window.onbeforeunload=function (e){return false}却由浏览器弹出 是否离开 的询问框,于是再补充了利用e事件阻止默认行为的代码e.preventDefault();依然无效。唉,眼看午休时间就要完了,只能暂时放弃,按一下【抽奖】,关闭弹窗,再按ESC键,将就着抽了几十次奖。


晚上回家,吃完晚饭再去百度抽奖,这回用的是火狐浏览器。
按照中午的套路,重写一次location.reload方法,哈哈,火狐真大方,让改了。
经过几次修改,火狐版最终代码如下:
<div class="cnblogs_code">//    很奇怪,location.reload必须定义两次才成功location.reload = function(){}location.reload = function(){} //  按钮div(点击关闭弹窗并执行刷新代码)var mydivz = document.getElementsByClassName('know-btn')];//  模拟鼠标点击关闭按钮,原来打算用于setInterval的,后来直接赋给 关闭按钮的 onmouseover 事件function myC(){  var myez = document.createEvent('MouseEvent');  myez.initEvent('click', false, false);  mydivz.dispatchEvent(myez);};//    setInterval(myC, 1000);    //    自动关闭弹窗//  最外围的弹窗容器var innerDivz = document.getElementsByClassName('inner')];//  加事件innerDivz.onmouseover = myC;
页: [1]
查看完整版本: 破解【百度文库开学幸运大转盘】刷新限制