这是题目,下载附件打开是个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{} 再提交!!!
}
代码审计:
1.输入一个长度为7的字符串;
2.对每个字符加1且对2进行异或操作;
3.如果进行上述两步操作的字符串与b相等,则flag正确;
所以对该加密过程进行逆向即可;
#include <stdio.h>
#include <string.h>
int main() {
char flag[8]={0};
char b[] = "d`vxbQd";
// 模拟程序中的加密过程
for(int i = 0; i < 7; i++) {
flag[i] = b[i] ^ 2;
flag[i]--;
}
flag[7]='\0';
printf("flag: %s\n", flag);
return 0;
}
得到
提交NSSCTF{easy_Re}