运行报错
直接用exeinfope查看
用ida打开,找到main函数
这里的sub_1400111D1和sub_14001128F明显是c中的printf和scanf,这里为了方便查看按N修改名字。粗略分析一下代码,大概得知,对比str1和str2,两个值一样的话就是flag,由于str1是我们输入的字符串,所以从str2入手。下面双击str2。
str2的内容为'{hello_world}'
然后,再仔细分析main代码。代码的大概意思是,对比我们输入的str1和处理过后的str2,相同的话str1就是flag了。这部分就是对str2进行处理的代码。
这部分的代码意思是,遍历str2字符串ASCLL表的值为111的字符串替代为48的字符串。
就是将字母o替代为数字0。下面编写exp。
str2='{hello_world}'
str3=''
for i in range(len(str2)):
if (i > len(str2)):
break
if (ord(str2[i])==111):
str3=str3+chr(48)
else:
str3 = str3 + str2[i]
print(str3)
运行结果为{hell0_w0rld}
加上前缀提交flag{hell0_w0rld}