【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}

在这里插入图片描述

posted on 2025-07-25 12:59  ljbguanli  阅读(11)  评论(0)    收藏  举报