是一个小游戏,会给100堆小硬币,在每堆硬币中找到假币(重量为9,其他重量为10),其中每堆硬币都设置了金币数和固定的尝试次数。
思路是:在每堆硬币中,在有限的尝试次数中对硬币通过二分法计算硬币重量不断缩小范围找到假币;这样操作100堆硬币,即顺利通关,获得flag。
执行程序时,发现不能愉快地执行程序,会超时,应该是远程网络连接产生延迟的原因,解决方法是通过其他题目SSH登录服务器,在本机tmp文件夹下创建并运行脚本程序。
程序代码:
import time from pwn import * conn = remote('0', 9007) conn.recv(10024) for _ in range(100): line = conn.recv(1024).decode('UTF-8').strip().split(' ') print (line) n = int(line[0].split('=')[1]) c = int(line[1].split('=')[1]) left = 0 right = n for _ in range(c): guess=' '.join(str(left) for left in range(left,int((left+right)/2))) print guess conn.sendline(guess) output = int(conn.recv(1024).decode('UTF-8').strip()) if (output % 10 == 0): left = int((left+right)/2) else: right = int((left+right)/ 2) conn.sendline(str(left)) print(conn.recv(1024).decode('UTF-8')) print(conn.recv(1024).decode('UTF-8')) conn.close()