Hackergame 2020
字数 1282 2025-08-11 17:40:24

Hackergame 2020 解题教学文档

1. 签到题

题目描述:通过修改URL参数或绕过前端限制,提交数值1获取flag。

解题方法

方法一:直接修改URL参数

  1. 访问初始URL:http://202.38.93.111:10000/
  2. 观察发现URL中包含number参数
  3. 直接修改URL为:http://202.38.93.111:10000/?number=1
  4. 提交后即可获得flag

方法二:绕过前端JavaScript限制

  1. 打开开发者工具(F12)
  2. 在Console标签页输入并执行:
    $('#number')[0].value = 1;
    
  3. 点击提交按钮获取flag

方法三:修改HTML属性

  1. 检查滑杆元素
  2. 直接修改value属性为1
  3. 点击提交

方法四:修改step属性

  1. 修改滑杆的step属性为1
  2. 向右拖动滑杆到1的位置
  3. 点击提交

2. 游戏胜利获取flag

题目描述:通过分析JavaScript代码找到正确的fruit参数值。

解题步骤

  1. 查看网页源代码,发现提示:
    <!-- changelog: - 2020/10/31 getflxg @ static/js/html_actuator.js -->
    
  2. 访问static/js/html_actuator.js
  3. 找到关键代码:
    url = "/getflxg?my_favorite_fruit=" + ('b'+'a'+ +'a'+'a').toLowerCase();
    
  4. 在Console执行表达式得到"banana"
  5. 访问URL:/getflxg?my_favorite_fruit=banana获取flag

3. 一闪而过的flag

题目描述:运行提供的exe文件获取flag。

解题方法

  1. 下载题目提供的exe文件
  2. 打开cmd命令行
  3. 直接运行exe文件即可显示flag

4. 从零开始的记账工具人

题目描述:将中文数字金额转换为阿拉伯数字并计算总和。

解题方法

方法一:手工计算

  1. 逐个转换中文数字为阿拉伯数字
  2. 手动计算总和

方法二:文本替换+数学计算

替换规则:

'零' -> ''
'壹' -> '1'
'贰' -> '2'
'叁叁' -> '3'
'肆' -> '4'
'伍' -> '5'
'陆' -> '6'
'柒' -> '7'
'捌捌' -> '8'
'玖' -> '9'
'拾' -> '*10+'
'佰佰' -> '*100+'
'仟仟' -> '*1000+'
'元' -> ''
'角' -> '/10+'
'分' -> '/100'
'整' -> ''

方法三:Python编程

  1. 安装cn2an库:
    python3 -m pip install cn2an
    
  2. 使用以下代码:
    import cn2an
    lines = open('bills.csv').readlines()[1:]
    s = 0
    for line in lines:
        a, b = line.strip().split(',')
        n = 0
        if '元' in a:
            y, a = a.split('元')
            n += cn2an.cn2an(y, "smart")
        if '角' in a:
            y, a = a.split('角')
            n += cn2an.cn2an(y, "smart") / 10
        if '分' in a:
            y, a = a.split('分')
            n += cn2an.cn2an(y, "smart") / 100
        s += n * int(b)
    print(s)
    

5. 超简单的世界模拟器

题目描述:通过构造初始状态消除指定位置的方块。

解题方法

手工构造解法

  1. 对于第一个方块(5,45),使用水平移动的"太空船":
    0011110
    0100010
    0000010
    0100100
    
  2. 对于第二个方块(25,45),使用会扩散的初始状态:
    000000011000000
    000000001100000
    000000011000000
    000000010000000
    

暴力解法

使用随机生成矩阵的方法,Python代码示例:

import random

MAP_SIZE = 50
CONTROL_SIZE = 15
STEP = 200
FLAGS = [(5, 45), (25, 45)]

# 完整代码见文档开头

6. 从零开始的火星文生活

题目描述:通过编码转换修复乱码文件。

解题步骤

  1. 用UTF-8编码打开文件
  2. 保存为GBK编码
  3. 重新用UTF-8打开
  4. 保存为ISO8859-1编码
  5. 最后用GBK编码打开

7. 自复读的复读机

题目描述:编写能输出自身逆序和哈希的Quine程序。

解题方法

第一问(输出自身逆序)

exec(s:='print(("exec(s:=%r)"%s)[::-1],end="")')

s='s=%r;print((s%%s)[::-1],end="")';print((s%s)[::-1],end="")

第二问(输出自身SHA256)

exec(s:='print(__import__("hashlib").sha256(("exec(s:=%r)"%s).encode()).hexdigest(),end="")')

import hashlib;s='import hashlib;s=%r;print(hashlib.sha256((s%%s).encode()).hexdigest(),end="")';print(hashlib.sha256((s%s).encode()).hexdigest(),end="")

8. 233同学的字符串工具

字符串大写工具

解题方法

  1. 使用Unicode连字"fl"(U+FB02)
  2. 输入"flag"会被转换为"FLAG"
  3. 获取flag:flag{badunic0debadbad}

UTF-7转换工具

解题方法

  1. 构造"flag"的UTF-7替代写法
  2. "f"的UTF-7编码为"+AGY-"
  3. 输入"+AGY-lag"会被转换为"flag"
  4. 获取flag:flag{please_visit_www.utf8everywhere.org}
Hackergame 2020 解题教学文档 1. 签到题 题目描述 :通过修改URL参数或绕过前端限制,提交数值1获取flag。 解题方法 方法一:直接修改URL参数 访问初始URL: http://202.38.93.111:10000/ 观察发现URL中包含 number 参数 直接修改URL为: http://202.38.93.111:10000/?number=1 提交后即可获得flag 方法二:绕过前端JavaScript限制 打开开发者工具(F12) 在Console标签页输入并执行: 点击提交按钮获取flag 方法三:修改HTML属性 检查滑杆元素 直接修改value属性为1 点击提交 方法四:修改step属性 修改滑杆的step属性为1 向右拖动滑杆到1的位置 点击提交 2. 游戏胜利获取flag 题目描述 :通过分析JavaScript代码找到正确的fruit参数值。 解题步骤 查看网页源代码,发现提示: 访问 static/js/html_actuator.js 找到关键代码: 在Console执行表达式得到"banana" 访问URL: /getflxg?my_favorite_fruit=banana 获取flag 3. 一闪而过的flag 题目描述 :运行提供的exe文件获取flag。 解题方法 下载题目提供的exe文件 打开cmd命令行 直接运行exe文件即可显示flag 4. 从零开始的记账工具人 题目描述 :将中文数字金额转换为阿拉伯数字并计算总和。 解题方法 方法一:手工计算 逐个转换中文数字为阿拉伯数字 手动计算总和 方法二:文本替换+数学计算 替换规则: 方法三:Python编程 安装cn2an库: 使用以下代码: 5. 超简单的世界模拟器 题目描述 :通过构造初始状态消除指定位置的方块。 解题方法 手工构造解法 对于第一个方块(5,45),使用水平移动的"太空船": 对于第二个方块(25,45),使用会扩散的初始状态: 暴力解法 使用随机生成矩阵的方法,Python代码示例: 6. 从零开始的火星文生活 题目描述 :通过编码转换修复乱码文件。 解题步骤 用UTF-8编码打开文件 保存为GBK编码 重新用UTF-8打开 保存为ISO8859-1编码 最后用GBK编码打开 7. 自复读的复读机 题目描述 :编写能输出自身逆序和哈希的Quine程序。 解题方法 第一问(输出自身逆序) 或 第二问(输出自身SHA256) 或 8. 233同学的字符串工具 字符串大写工具 解题方法 : 使用Unicode连字"fl"(U+FB02) 输入"flag"会被转换为"FLAG" 获取flag: flag{badunic0debadbad} UTF-7转换工具 解题方法 : 构造"flag"的UTF-7替代写法 "f"的UTF-7编码为"+AGY-" 输入"+AGY-lag"会被转换为"flag" 获取flag: flag{please_visit_www.utf8everywhere.org}