2022Newstar新生赛week1—calc

看看开了什么保护机制

打开64位ida,发现有两个函数


通过第一个函数puts的话和第二个函数的阅读,发现这一题就是给你100题计算题,30s内全对就可以拿到shell了,这个对于有python编程功底的应该不难,毕竟计算机算的快得多

from pwn import*
p=process('./pwn1')
for i in range(100):
	p.recvuntil('answer? ')
	a=p.recvline()
	b=a.split(' ')
	print(b[0])
	print(b[1])
	print(b[2])
	if '+' in b[1]:
		p.sendline(str(int(b[0])+int(b[2])))
		print(int(b[0])+int(b[2]))
	if '-' in b[1]:
		p.sendline(str(int(b[0])-int(b[2])))
		print(int(b[0])-int(b[2]))
	if 'x' in b[1]:
		print(int(b[0])*int(b[2]))
		p.sendline(str(int(b[0])*int(b[2])))
	if '/' in b[1]:
		print(int(b[0])/int(b[2]))
		p.sendline(str(int(b[0])/int(b[2])))
p.interactive()

还有另一种思路,我们知道,c语言的随机数其实是伪随机,他是有循环节的,只不过循环节很大,所以可以看作随机数,而且他生成的算法是固定的,所以说只要种子一样,那么生成的第几个随机数一定是对应相同的,所以我们使用python调用c语言的库,这样子我们就可以提前获得题目了,不过要注意的是,种子是当前时间,所以如果网速慢,导致电脑启动的代码完了的话就会种子不一样,从而导致随机数错误,这时候换个网多试几次就行了

from pwn import*
from ctypes import*
p=remote('node4.buuoj.cn',26702)
lib=CDLL('pwn1.so')
for i in range(0,100):
	a1=lib.xyqrand(i+114)%1919+1
	a2=lib.xyqrand(i+514)%810+1
	a3=lib.xyqrand(i+1919810)%3
	if a3==0:#+
		a4=a1+a2
	elif a3==1:#-
		a4=a1-a2
	elif a3==2:#x
		a4=a1*a2
	else :a4=a1/a2
	p.sendline(str(a4))
p.interactive()
posted @ 2022-09-28 22:43  予柒  阅读(42)  评论(0)    收藏  举报
返回顶端
Live2D /*修改地一:waifu.css*/
/*修改地二:waifu.css*/
/*修改地三:live2d.js*/ /*修改地四:waifu-tips.js*/