放入ida,可看出我们的输入是v9,长度小于等于17,当v10等于v13时,成功
image.png
题目提示flag不是明文
image.png
memset给v10开辟了空间,v10为空,strcat连接v10与v8说明,v10就是v8。
sprintf是格式化字符串,v4就是我们输入的字符被格式化了,其实最后v10还是我们原来输入的字符,最后发现,那串16进制数字解码后就是真正的flag了。
小总结:链接:https://www.jianshu.com/p/e25f78b24232
sprintf():int sprintf( char *buffer, const char *format, [ argument] … ) eg:int sprintf(buff,'%c',s) s为数组名,'%c’为c语言格式符(char)
功能:把格式化的数据写入某个字符串
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]..******.:可选参数,可以是任何类型的数据。
返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。
strcat():连接两个字符串
memset:memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
image.png