苗火 Nicholas
[JS]拼图游戏外挂开发实战
2016-12-31 萧


    我在玩诛仙3,这个游戏本身做得很好,很精致,同时它的官网会时不进推出些活动,今天晚上就是跨年了,完美给我们的礼物就是一个拼图游戏,好像拼得越快资历越好,我这人手拙眼穷,肯定是最慢的。但我有代码呀,呵呵!



    F12下去,打开了游戏页面的前端代码,看到它把一张图放到了5X5的矩阵里,形成25个小格子,其实每个格子就是一个DIV,每个DIV用background来显示图片,但图片是同一张,也就是原图,只是做了偏移,background-position不同而已……



    这些细节我也研究了很久,甚至写出了模拟移动方格的代码,发现js要模拟鼠标的点击没问题,但要模拟移动还真没什么办法,于是干脆摆格子算了,



    于是我写出了如下代码:


function good(){
var x=0;
var y=0;
$(".play_cell").each(function(){
if(x>=5){
y++;
x=0;
}
if(y>=5){
console.log("Y === 5 ");
return 0;
}
var xx = x*(-116);
var yy = y*(-116);
xx = xx+"px";
yy = yy+"px";
$(this).css("background-position", xx+" "+yy);
x++;
});
x=2;
$(".play_cell").each(function(){
if(x-->0){
var xx= x*(-116);
xx = xx+"px";
var yy = "0px";
$(this).css("background-position", xx+" "+yy );
}else{
return 0;
}
});
}


 



    你看,我还特意留下最后一格不拼完呢。因为,还要手动移动格子去触发游戏的评分机制。



    可是我失败了,系统没有提示我过关了。我想如果是我做游戏,肯定会有一个数组做为背景,不会直接去识别DIV内容的。细看之下,果不其然,有这么一段:


    check: function() {
this.e_playCount.html(++this.playCount);
if(this.ranArr.join() == this.imgArr.join()) {
this.success();
}
},

    这个就是游戏最后判断通关与否的关键了,哈哈,他直接比对两个数组是否相等,很显然,一个数组是随机生成的,一个是移动图片后产生的,我才懒得往下看呢,直接在这里插入了流氓的一句:


    this.ranArr = this.imgArr;

    再一动,果然有效,可是系统提示“请按规则进行游戏”。


    难不成还有什么机制防作弊不成?


    我看看它的结果提交过程吧:


    success: function() {
/*alert("ok");
this.score += this.scoreArr[this.level]
this.e_playScore.html(this.score);*/
// alert("ok");
console.log(typeof(this.timer)+'======');
clearInterval(this.timer);
console.log(this.timer);
// alert(this.useTime);
var time = this.useTime;
$.ajax({
url: "/zhuxian/patch/patchDone",
type: "POST",
dataType: "json",
data: {
time: this.useTime
},
success: function (data) {
if(data.success){
if(data.status!=20){
updateScore(data.score);
updateBest(data.best);
if(data.count==5){
rankList();
}
alertMsg("恭喜您","本次耗时"+formatTime(time)+", 今天已经完成"+data.count+"次拼图");
}else{
alertMsg("恭喜您","拼图完成,"+"本次耗时"+formatTime(time));
}

}else{
alertMsg("提示",data.message);
}
}
});

    看吧,写这游戏的人肯定也是匆匆完成,调试代码还留那了,重点是这个提交仅有的参数是时间呀,所以我唯一能暴露的就是时间呀,那它能判断我作弊也想必是根据时间来的,完成太快了,低于某个点就认为作弊。


    这还不容易,我把一切准备好,等会再提交不就行了么。于是我用几毫秒的时间把图拼好——其实拼不拼都不重要了,然后就等二十秒再最后操作游戏触发提交事件。


    成功了,成绩是二十秒。神一样的速度。当然这个时间还可以多实验下,不知道它的下限是多少。我懒得弄了。

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容