# 签到 这道题继承了 [去年的签到题](https://github.com/ustclug/hackergame2019-writeups/blob/master/official/%E7%AD%BE%E5%88%B0%E9%A2%98/README.md),同样也需要在浏览器中动点手脚。 ## 题目分析 打开签到题页面,拖动滑杆,如果将滑杆滑动到最左边,提交 0,那么我们会得到成功的返回,但是没有 flag,尝试手动提交一些非整数的值,发现得到返回信息: > 我可以给你 1 个 flag、2 个 flag、3 个 flag…… 但我没法给你 0.16326 个 flag。 返回信息提示我们要提交正整数的值,比如 1,而不是一个小数的值。 ## 简单做法 通过分析发现,这个滑杆的数值其实是通过浏览器地址栏中的一个参数来控制的,所以直接修改地址栏中的参数 number 的值为 1 即可,修改后回车即可得到 flag。 ## 复杂做法 有的同学一定要把滑杆拖动到 1 才肯罢休,但即使是用键盘方向键操纵,最后数值也不会停留在 1。 分析前端页面,我们可以看到这么一段 JavaScript 代码: ```javascript var prevVal = 0; $(document).ready(function() { $("#show").text($('#number')[0].value); $('#number').on('input', function() { if ($('#number')[0].value.toString() === "1") { console.log('没想到吧!'); $('#number')[0].value = 1.00001; if (prevVal == 1.00001) $('#number')[0].value = 0.99999; if (prevVal == 0.99999) $('#number')[0].value = 1.00001; } $("#show").text($('#number')[0].value.toString()); prevVal = $('#number')[0].value; }); }); ``` 其中 `console.log('没想到吧!');` 所在的代码块就是判断在滑杆数值变动时是否为 1,如果为 1 就跳过的代码,所以我们无法手动拖动或键盘控制滑杆的值到 1。 但是我们可以直接参考这段代码,直接把滑杆的值设置为 1,具体来说,打开 Chrome 的开发者工具(F12),在 Console 标签下输入以下代码执行,即可将滑杆的值设置为 1,然后点击提交就可以得到 flag: ```javascript $('#number')[0].value = 1; ``` ## 一些统计 下面是比赛期间服务器收到的 number 值的统计: ![0_1.5](images/numbers_0_1.5.png) ![-5_50](images/numbers_-5_50.png)