[分享] 如何破解网页小游戏 A Dark Room

· · 个人记录

声明:作者不赞成诸如此类投机取巧,通过修改游戏程序来达到目的的行为

本篇文章只作为心得体会分享

某日,某人在机房颓废的时候看到了这样一个网页小游戏。

然后某人就本能地点下了“生火”。

某人:”这个读条好慢阿。“

然后某人又很自然的跟着剧情去 “伐木”。

某人:”这个读条更慢了阿(恼)。“

鲁迅曾说过,时间不是用来看读条上的。

所以某人为了秉承鲁迅先生的志向,决定看看有没有什么方法破解掉读条。

由于某人之前学过写一点 HTML,所以就本能的打开了 F12。

可以看到,这个“添柴”的按钮是属于一个叫 stokeButton 的元素,目前他所引用的 class 是 button

当按下“添柴”按钮之后,

class 又附加上了一个 disabled

disabled 

英 [dɪs'eɪbld]     美 [dɪs'eɪbld]    

adj. 关闭的

所以,我们只要删除这个 disabled 标签,我们就可以在读条结束之前再一次点击按钮了!

某人:”但是这还是很麻烦阿(恼)。“

于是我看了以下这个元素的事件触发器,

可以看到,当点击按钮的时候,他会触发 Button.js 里的一个 function。

某人将这一段 function 截取了下来。

1   var el = $('<div>')
2       .attr('id', typeof(options.id) != 'undefined' ? options.id : "BTN_" + Engine.getGuid())
3       .addClass('button')
4       .text(typeof(options.text) != 'undefined' ? options.text : "button")
5       .click(function() {
6           if(!$(this).hasClass('disabled')) {
7               Button.cooldown($(this));
8               $(this).data("handler")($(this));
9           }
10      })
11      .data("handler",  typeof options.click == 'function' ? options.click : function() { Engine.log("click"); })
13      .data("remaining", 0)
14      .data("cooldown", typeof options.cooldown == 'number' ? options.cooldown : 0);
15      el.append($("<div>").addClass('cooldown'));

可以看到,在第 5 行,当点击时会触发一次判断。

当这个元素没有标签 disabled 时,就触发一次冷却。

当触发冷却后,理所应当的按钮就被加上 disabled 标签了。

所以我们可以把这一句给注释掉,这样他不就触发不了 cooldown 了吗?

1   var el = $('<div>')
2       .attr('id', typeof(options.id) != 'undefined' ? options.id : "BTN_" + Engine.getGuid())
3       .addClass('button')
4       .text(typeof(options.text) != 'undefined' ? options.text : "button")
5       .click(function() {
6           if(!$(this).hasClass('disabled')) {
7               // Button.cooldown($(this));
8               $(this).data("handler")($(this));
9           }
10      })
11      .data("handler",  typeof options.click == 'function' ? options.click : function() { Engine.log("click"); })
13      .data("remaining", 0)
14      .data("cooldown", typeof options.cooldown == 'number' ? options.cooldown : 0);
15      el.append($("<div>").addClass('cooldown'));

这之后,

有效!

我们完成了破解掉这个游戏的第一个关卡。

那么我们现在不妨换一个思路。

触发 cooldown 和添加 disabled 之间必然存在一步。

我们找到那一步改掉,也可以直接干掉冷却时间。

在一个叫做 setDisabled 里的函数,有一句 btn.addClass('disabled');

同样的语句在 Button.js 里存在两处。

如果我们把这两句注释掉的话...

好耶!

虽然和上面的效果不大一样,但是还是做到了取消冷却。

把冷却时间干掉以后,如果配合连点器,那么我们会得到惊人的产出。

我不玩了我电脑要炸了

连载中

Updated on 2021-03-07