1. 起因 🤔

最近逛我博客的新朋友好像多了起来,不少人被安利去玩 HackMyVM 了。不过,刚上手可能会遇到些小麻烦。

比如我自己玩的时候,就经常因为发呆太久(或者查资料时间长了点)导致会话超时,每次都得重新登录,挺烦人的。还有,打 Challenge 的时候,每次提交完 Flag 都得手动去改 URL 跳到下一个,点几下也是有点小不爽。

为了解决这两个痛点,我利用 AI 捣鼓了一个油猴脚本,也复制给大家 Todd 大佬的一个脚本,希望能让大家的 HackMyVM 体验更舒服一点。👍


2. 脚本一:保持在线不掉线⏳

2.1. 它能干啥?

这个脚本主要就是为了防止你因为长时间没在 HackMyVM 页面上操作而被强制踢下线。它会悄悄地在后台帮你自动刷新页面,这样你就可以安心地查资料、写笔记或者暂时离开一下,不用担心回来又要重新登录了。

2.2. 它是怎么工作的?

// ==UserScript==
// @name         保持hackmyvm的登录状态
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  定时刷新页面,保持登录状态,目前 5 分钟
// @require
// @author       Todd
// @match        https://hackmyvm.eu/*
// @grant        none
// ==/UserScript==

(function () {
  "use strict";
  // 设置一个定时器,每隔 5 分钟(300,000 毫秒)就让它干点事
  setInterval(() => {
    // 干的事就是:刷新一下当前页面
    location.reload();
  }, 1000 * 60 * 5); // 1秒 * 60 * 5 = 5分钟
})();

2.3. 谁写的?

这个脚本是 Todd 大佬写的。膜拜大佬!orz

P.S. 如果想去 Todd 大佬的博客看看,可以点击这里,或者去我的友链页面也能找到跳转链接。

2.4. 什么情况下用比较好?

强烈推荐给需要在 HackMyVM 上查资料、写 Writeup,或者只是挂着页面思考解题思路的朋友们。有了它,麻麻再也不用担心,我动不动就得重新登录了,就算你暂时离开电脑一会儿,也能帮你保住登录状态。


3. 脚本二:挑战关卡快速跳转🚀

3.1. 它能干啥?

打 Challenge 时是不是觉得每次输完 Flag 都要手动改 URL 去下一个有点烦?这个脚本就是来解决这个问题的!

它给 HackMyVM 的挑战页面 (challenge.php) 加了个快捷操作:你可以直接 按鼠标侧键(通常是“前进”那个按钮,一般是 Button 4)或者键盘的右箭头 ,脚本就会自动帮你跳转到下一个 Challenge 页面,省事多了

3.2. 它是怎么工作的?

// ==UserScript==
// @name         HackMyVM挑战页面快速导航
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  使用鼠标侧上键或右箭头快速导航到下一个挑战页面
// @author       AI & YourName (Modify)
// @match        https://hackmyvm.eu/challenges/challenge.php?c=*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 封装一个跳转到下一关的动作
    function navigateToNextChallenge() {
        const currentUrl = window.location.href; // 获取当前页面的网址
        // 用正则表达式抓取网址里 c= 后面的数字 (挑战编号)
        const challengeMatch = currentUrl.match(/c=(\d+)/);

        if (challengeMatch && challengeMatch[1]) { // 确保抓到了编号
            // 把抓到的编号字符串转成数字
            const currentChallenge = parseInt(challengeMatch[1], 10);
            // 计算下一个挑战的编号
            const nextChallenge = currentChallenge + 1;
            // HackMyVM 的编号通常是三位数 (如 001, 019),所以格式化一下,不够三位前面补 0
            const formattedNextChallenge = String(nextChallenge).padStart(3, '0');
            // 把当前网址里的 "c=旧编号" 替换成 "c=新编号",得到新网址
            const newUrl = currentUrl.replace(/c=\d+/, 'c=' + formattedNextChallenge);
            // 跳转到新网址
            window.location.href = newUrl;
        }
    }

    // 监听鼠标按键抬起事件
    document.addEventListener('mouseup', function(event) {
        // 检查是不是鼠标侧键(前进键,按钮编号通常是 4)
        if (event.button === 4) { // button 4 通常是侧前键
            navigateToNextChallenge(); // 是的话,就执行跳转
        }
    });

    // 监听键盘按键按下事件
    document.addEventListener('keydown', function(event) {
        // 检查是不是按了右箭头键
        if (event.key === 'ArrowRight') {
            navigateToNextChallenge(); // 是的话,也执行跳转
        }
    });

})();

3.3. 谁写的?

这个脚本主要是 AI 编写的。(我就起到了一个 Ctrl+C / Ctrl+V 😉)。

3.4. 什么情况下用比较好?

如果你喜欢按顺序刷 HackMyVM 的 Challenge,这个脚本绝对是提升效率的神器!它能帮你省下不少点击和修改 URL 的时间,让刷题过程更流畅体验更好