nssctf第一题[SWPUCTF 2021 新生赛]re1
题目如上:
下载附件得到了一个可执行文件,
双击运行,
由于是逆向题,先放到ida中按f5,看一下伪码,
解读代码:strcpy(Str2, “{34sy_r3v3rs3}”);将字符串{34sy_r3v3rs3}赋给Str2;
scanf(“%s”, Str1);获取选手输入的值赋给Str1;
for ( i = 0; i <= 665; ++i ){if ( Str1[i] == 101 )Str1[i] = 51;}for ( i = 0; i <= 665; ++i ){if ( Str1[i] == 97 )Str1[i] = 52;}`
如果Str1中有e,则替换为3,因为e的ascll码是101,3的ascll码是51;
同理,如果Str1中有a,则替换为4,因为a的ascll码是97,4的ascll码是52;
strcmp 函数的作用与用法
strcmp 是 C 语言标准库中的一个字符串比较函数,位于 <string.h> 头文件中。它的主要作用是比较两个字符串的字典序(即按 ASCII 码值比较)。
函数原型
c
运行
int strcmp(const char *str1, const char *str2);
返回值含义
返回值 < 0:表示 str1 小于 str2(按字典序)
返回值 = 0:表示 str1 等于 str2
返回值 > 0:表示 str1 大于 str2(按字典序)
if ( strcmp(Str1, Str2) )printf("you are wrong,see again!");elseprintf("you are right!");
所以最后,比较Str1, Str2,如果想等就输出you are right!
已知Str2是{34sy_r3v3rs3},输入的字符串Str1将e换为4,a换为3后等于{34sy_r3v3rs3}即可,故应输入{easy_reverse},按格式提交NSSCTF{easy_reverse}
完结撒花