re学习笔记(66)第五空间智能安全大赛-re-nop

打开老多花指令
挨个把这样的替换掉就好了
点击push的地址,ctrl+c复制。点击jmp ebp使用插件ctrl+alt+k修改,修改为jmp <复制的地址>
re学习笔记(66)第五空间智能安全大赛-re-nop_第1张图片

搜了一下字符串找到输出正确与否的代码,发现没有跳到Right的代码,,Right上面的那个jmp跳过了他,,,
re学习笔记(66)第五空间智能安全大赛-re-nop_第2张图片
刚开始以为是要修改main函数最底部栈顶的数值,让他等于Right的地址,然后pop ebx赋值给ebx,最后jmp ebx跳转到Right

调试了半天这里什么都没有!
整个main函数就是对表面上的,对输入的数Num+3-0x33333334
re学习笔记(66)第五空间智能安全大赛-re-nop_第3张图片
调试了好久才确信main函数没东西,,,
然后看提示错误的函数
re学习笔记(66)第五空间智能安全大赛-re-nop_第4张图片
唯一可以的就是8048691函数了,对result进行一个赋值操作,,,让他等于144
刚开始外层没有显示参数是Num,所以就没重点关注这里,,
re学习笔记(66)第五空间智能安全大赛-re-nop_第5张图片
也就是将Num解释成地址,将其的一个字节写入144,转换为十六进制正好是0x90也就是nop,,
所以这两个函数就是将Num的地址的两个字节改成nop。改完之后如果能出来Right的话
re学习笔记(66)第五空间智能安全大赛-re-nop_第6张图片

也就是将08048765地址的两个字节nop掉,jmp就不生效了,就可以运行Right了
re学习笔记(66)第五空间智能安全大赛-re-nop_第7张图片
也就是Num变换后的值应该等于0x08048765
输入的Flag+3-0x33333334 == 0x08048765
得到输入为993507990
re学习笔记(66)第五空间智能安全大赛-re-nop_第8张图片
可以看到得到Right(无法运行的直接nop掉main里的四个函数,eax=1时执行int 80h直接exit了,
re学习笔记(66)第五空间智能安全大赛-re-nop_第9张图片
flag为flag{993507990}

想着从1开始爆破来着,不知道为啥不能分配内存了,(这么大的数也爆破不出来,,
re学习笔记(66)第五空间智能安全大赛-re-nop_第10张图片

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()

你可能感兴趣的:(ctf小白成长ing,#,reverse)