打开老多花指令
挨个把这样的替换掉就好了
点击push的地址,ctrl+c复制。点击jmp ebp使用插件ctrl+alt+k修改,修改为jmp <复制的地址>
搜了一下字符串找到输出正确与否的代码,发现没有跳到Right的代码,,Right上面的那个jmp跳过了他,,,
刚开始以为是要修改main函数最底部栈顶的数值,让他等于Right的地址,然后pop ebx赋值给ebx,最后jmp ebx跳转到Right
调试了半天这里什么都没有!
整个main函数就是对表面上的,对输入的数Num+3-0x33333334
调试了好久才确信main函数没东西,,,
然后看提示错误的函数
唯一可以的就是8048691函数了,对result进行一个赋值操作,,,让他等于144
刚开始外层没有显示参数是Num,所以就没重点关注这里,,
也就是将Num解释成地址,将其的一个字节写入144,转换为十六进制正好是0x90也就是nop,,
所以这两个函数就是将Num的地址的两个字节改成nop。改完之后如果能出来Right的话
也就是将08048765地址的两个字节nop掉,jmp就不生效了,就可以运行Right了
也就是Num变换后的值应该等于0x08048765
输入的Flag+3-0x33333334 == 0x08048765
得到输入为993507990
可以看到得到Right(无法运行的直接nop掉main里的四个函数,eax=1时执行int 80h直接exit了,
flag为flag{993507990}
想着从1开始爆破来着,不知道为啥不能分配内存了,(这么大的数也爆破不出来,,
from pwn import *
i = 0
while True:
r = process('./nop0')
r.sendline(str(i))
fu = r.recvline()
if 'Right' in fu:
print(i)
break
i += 1
r.close()