下载后看一下有没有壳
无壳64位
用ida打开
简单的题目会有flag或者敏感数据字符等信息,方便我们定位函数查看字符串的方法为shift+F12
ctar+x找一下位置
F5转换成c语言
从下往上分析
strncmp(str1,str2,v3)是把str1与str2两字符串的前v3位数做一个比较,若str1=str2,返回0;大于返回正数,小于返回负数
if(!strncmp(str1,str2,v3))是一个判断语句,if()括号里面的内容如果为真,则输出
"this is the right flag",这时我们只需要知道什么情况为真。
然后看括号里面的内容 !( strncmp(str1,str2,v3) )为真的情况
!为非,所以只要( strncmp(str1,str2,v3) )为0, !( strncmp(str1,str2,v3) )即为真;为0的情况已经在上面对strncmp函数的讲解说过了,str1,str2两个字符串相等返回值即为0
sub_1400111D1是print函数,不难猜测sub_14001128F是scanf函数,所以字符串str1为我们输入的内容。接下来看字符串str2.
试了一下并不是答案,接着分析
for循环是对str2做了一个转换的处理,str2里面ascii码为111的字符会被转换为ascii码为48的字符,在IDA中,选中数字按"R"键可以将数字转换为字符。
、str2中的o都为0
那么根据的str2的内容将o该为0
所以flag为 flag{hell0_w0rld}