functionscramble(flag, key) { // 根据key的值和长度重新排列flag数组,从而获得flag for (var i = 0; i < key.length; i++) { let n = key.charCodeAt(i) % flag.length; let temp = flag[i]; flag[i] = flag[n]; flag[n] = temp; } return flag; }
functioncheck_action() { // 获取id=action的输入框中的值,即我们输入的值 var action = document.getElementById("action").value; // 被打乱的flag数组 var flag = ["{hey", "_boy", "aaaa", "s_im", "ck!}", "_baa", "aaaa", "pctf"]; var result = unscramble(flag, action); document.getElementById("output").innerText = result; }
使用脚本复原flag:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from itertools import permutations flag = ["{hey", "_boy", "aaaa", "s_im", "ck!}", "_baa", "aaaa", "pctf"] # 一般比赛的flag都会是xxx比赛{} # 所以猜测最终flag的格式为pctf{} # 重新对flag进行编排顺序输出pctf{}
# 获取对flag列表所有组合排列的结果,返回一个迭代器 item = permutations(flag) # print(item) # 遍历item中所有的排列组合 for i in item: # 将每个排列组合转化为list列表后,将list列表中的每个元素中间以''的方式连接在一起,形成整个字符串赋值给k k = ''.join(list(i)) # 判断字符串k是否以pctf{hey_boys开头,结尾是否以}结尾 if k.startswith('pctf{hey_boys') and k[-1] == '}': print(k)