这是题目,下载附件打开是个C文件
#include <stdio.h>
#include <string.h>int main(){char a[]="wwwwwww";char b[]="d`vxbQd";//try to find out the flagprintf("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}