flag9,完全没有思路,看其他人的writeup,是攻击AI,让AI泄密flag9,感觉就是自己的知识盲区。
flag10,打开抽奖界面,里面有个注释
// 这个 getVerifyCode 的 wasm 实现比 blueimp-md5 js 实现快 20 倍。
// 猜猜 flag10 藏在什么地方?
很明显,这个flag和get_verify_code.wasm有关系。在里面搜索flag,找到如图函数
根据函数定义可以知道参数和返回值类型,编写如下脚本。
WebAssembly.instantiateStreaming(fetch('')).then(({instance}) => {
window.getFlag10 = () => {
const timestamp = Math.floor(Date.now() / 1000);
const resultBufPtr = 0;
const resultBufLen = 16;
const memory = new Uint8Array(instance.exports.memory.buffer);
const resultLen = instance.exports.calc_flag10_uid_timestamp_resultbufptr_resultbuflen_return_resultlen(2074732, timestamp, resultBufPtr, resultBufLen)
const flag = (new TextDecoder()).decode(memory.subarray(resultBufPtr, resultBufPtr + resultLen));
console.log(flag)
}
});
调用getFlag10()获取flag10
flag11:
抽奖页面给出了开奖算法,并且每次开奖的blockNumber是事先计算出来的,通过blockNumber可以拿到一个blockHash,再用blockHash和参加人数取模,得到中奖号。
根据框内提示,获取blockHash
用blockHash计算中奖号码
import sys
if __name__ == "__main__":
for i in range(10000, 11000):
ret = 0x5a359d74c9c2964cfd56f9d195e0875ed2205f20f96df9d12ac4be865de4cb68 % i
if(ret > 9979):
print(i, ret)
运行结果里选最小的,让自己的UID拿到中奖号码,在写脚本补充够需要的参与人数即可