前言
刷一刷题。。才发现题目脑洞可以有多大
fd
这里可以看见这里有一个fd参数如果我们让fd等于0,那么之后调用read之后的第个参数为0就会读取我们键入的值了然后就可以输入下满要比较的值就可以了
collision
这里可以看见这里有一个强制类型的转换,char类型每一个占一位而int占4位所以我们输入的应该是5*4=20个字符并且每4个转换后相加的结果为hashcode = 0x21DD09EC这里没有截图完前面还有一点,这样就可以了,把这个数除以5然后输入就可以了
./col python -c "print '数'*5 "
bof
就是一个溢出操作覆盖变量
flag
是一个逆向脱壳的操作在linux下只有upx的壳只要
upx -d ./flag
然后就可以脱壳了然后再拖进ida就可以看见了
passcode
可以发现name数组存在一个溢出修改passcode1,然后利用scanf的任意地址写对passcode2的地址写入check的值就可以了
random
因为Linux,libc库中的rand()函数是一个伪随机数所以可以直接利用这个原理本地编译一下可以发现每次random的值都是不变的所以可以直接用这个值异或下就可以看见我们的输入了
未完。。。