首先打开py文件看一眼,输3退出,输2再输b33_1_4m_b3333会让某个自减的东西加一千,输1时会生成一个32位的随机数,并且将输入的随机数与其自己生成的随机数比较,相等则返回flag。
那么题目的思路就很明确了:生成624个随机数并且使用randcrack库计算第625个随机数上传即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| from pwn import * from randcrack import RandCrack import re
context.log_level = 'debug'
sh = remote('node4.buuoj.cn', 29318) sh.recvuntil('[3] - Exit\n') sh.sendline(b'2') sh.recvuntil('Enter your promocode:') sh.sendline(b'b33_1_4m_b3333') sh.recvuntil('[3] - Exit\n') sh.sendline(b'1') num = []
rc = RandCrack() for i in range(624): sh.recvuntil('[$] - $$$SPIN$$$\n') sh.sendline(b'$') sh.recvuntil('It will be:') sh.sendline(b'1234') data = sh.recvline() data = str(data) data1 = '' for j in range(8): data1 += data[4 + 2 * j] rc.submit(int(data1, 16)) aa = rc.predict_getrandbits(32) sh.recvuntil('[$] - $$$SPIN$$$\n') sh.sendline(b'$') sh.recvuntil('It will be:') sh.sendline(hex(aa).encode()) sh.recvlines(3)
|
- flag: flag{b346a745-1b98-4908-8e2e-7b25d3d5a46f}