-
-
[分享]pwnable.kr coin1 day9
-
2021-1-10 22:03 7760
-
题目
解题过程
1. nc 连接
查看题目描述
在一堆真硬币中找出一个假硬币,真假硬币只有重量不相同,真硬币重量为 10,假硬币重量为 9。在 60 秒内找 100 次。
输出案例如下
N 为硬币数目,C 为猜测次数
可以看出 C 每次都大于 log 以 2 为底 N 的对数,所以考虑用二分法找假硬币。
2. 编写 exp
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 34 35 36 | from pwn import * p = remote( 'localhost' , 9007 ) p.recv() for i in range ( 100 ): N, C = p.recv().split( ' ' ) N = int (N.split( '=' )[ 1 ]) C = int (C.split( '=' )[ 1 ]) log.info( 'N = ' + str (N) + ' C = ' + str (C)) start = 0 end = N while start < = end: mid = (start + end) / 2 tmpList = [ str (j) for j in range (start, mid + 1 )] tmpList = ' ' .join(tmpList) p.sendline(tmpList) msg = p.recv().rstrip() if msg.find( 'Correct' ) ! = - 1 : log.info(msg) break weight = int (msg) if weight % 10 = = 0 : start = mid + 1 else : end = mid print p.recv() |
3. pwn
执行 exp,红框内为 flag。
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
赞赏
他的文章
[分享] pwnable.kr asm
9716
看原图