【nssctf第三题】[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{} 再提交!!!
}
代码审计:
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}

浙公网安备 33010602011771号