[NSSCTF 2022 Spring Recruit]easy C
打开附件之后得到的是一串c语言代码:
#include <stdio.h>
#include <string.h>
int main(){
char a[]="wwwwwww";
char b[]="d`vxbQd";
//try to find out the flag
printf("please input flag:");
scanf(" %s",&a);
if(strlen(a)!=7){
printf("NoNoNo\n");
system("pause");
return 0;
}
for(int i=0;i<7;i++){
a[i]++;
a[i]=a[i]^2;
}
if(!strcmp(a,b)){
printf("good!\n");
system("pause");
return 0;
}
printf("NoNoNo\n");
system("pause");
return 0;
//flag 记得包上 NSSCTF{} 再提交!!!
}
代码意思是:输入flag存入数组a中,按位加1后与2亦或,得到新的数组b
所以我们的逆向思路为:将数组b按位与2亦或,再减1,得到的就是flag
#include <stdio.h>
int main() {
char a[] = "d`vxbQd";
for (int i = 0; i < 7; i++) {
a[i] = a[i] ^ 2;
a[i]--;
printf("%c", a[i]);
}
return 0;
}
运行之后得到本题flag:NSSCTF{easy_Re}