Hackergame 2020
字数 1282 2025-08-11 17:40:24
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标签页输入并执行:
$('#number')[0].value = 1; - 点击提交按钮获取flag
方法三:修改HTML属性
- 检查滑杆元素
- 直接修改value属性为1
- 点击提交
方法四:修改step属性
- 修改滑杆的step属性为1
- 向右拖动滑杆到1的位置
- 点击提交
2. 游戏胜利获取flag
题目描述:通过分析JavaScript代码找到正确的fruit参数值。
解题步骤
- 查看网页源代码,发现提示:
<!-- changelog: - 2020/10/31 getflxg @ static/js/html_actuator.js --> - 访问
static/js/html_actuator.js - 找到关键代码:
url = "/getflxg?my_favorite_fruit=" + ('b'+'a'+ +'a'+'a').toLowerCase(); - 在Console执行表达式得到"banana"
- 访问URL:
/getflxg?my_favorite_fruit=banana获取flag
3. 一闪而过的flag
题目描述:运行提供的exe文件获取flag。
解题方法
- 下载题目提供的exe文件
- 打开cmd命令行
- 直接运行exe文件即可显示flag
4. 从零开始的记账工具人
题目描述:将中文数字金额转换为阿拉伯数字并计算总和。
解题方法
方法一:手工计算
- 逐个转换中文数字为阿拉伯数字
- 手动计算总和
方法二:文本替换+数学计算
替换规则:
'零' -> ''
'壹' -> '1'
'贰' -> '2'
'叁叁' -> '3'
'肆' -> '4'
'伍' -> '5'
'陆' -> '6'
'柒' -> '7'
'捌捌' -> '8'
'玖' -> '9'
'拾' -> '*10+'
'佰佰' -> '*100+'
'仟仟' -> '*1000+'
'元' -> ''
'角' -> '/10+'
'分' -> '/100'
'整' -> ''
方法三:Python编程
- 安装cn2an库:
python3 -m pip install cn2an - 使用以下代码:
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. 超简单的世界模拟器
题目描述:通过构造初始状态消除指定位置的方块。
解题方法
手工构造解法
- 对于第一个方块(5,45),使用水平移动的"太空船":
0011110 0100010 0000010 0100100 - 对于第二个方块(25,45),使用会扩散的初始状态:
000000011000000 000000001100000 000000011000000 000000010000000
暴力解法
使用随机生成矩阵的方法,Python代码示例:
import random
MAP_SIZE = 50
CONTROL_SIZE = 15
STEP = 200
FLAGS = [(5, 45), (25, 45)]
# 完整代码见文档开头
6. 从零开始的火星文生活
题目描述:通过编码转换修复乱码文件。
解题步骤
- 用UTF-8编码打开文件
- 保存为GBK编码
- 重新用UTF-8打开
- 保存为ISO8859-1编码
- 最后用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同学的字符串工具
字符串大写工具
解题方法:
- 使用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}