目录

  1. 1. 前言
  2. 2. 知识点
  3. 3. 题目
  4. 4. 思路
    1. 4.1. 操作
  5. 5. 总结

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

RE初探索0x03

2023/4/6 REVERSE
  |     |   总文章阅读量:

前言

NSS上的[NSSCTF 2022 Spring Recruit]easy C

知识点

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{} 再提交!!!
}

a为我们要输入的7位长度参数,在执行for循环中的自增与异或后与b进行比较

思路

要让a先自增再异或从而得到b

这里就反过来让b先异或再自减得到a

操作

编写c脚本

#include <stdio.h>
#include <string.h>
int main()
{
    char b[] = "d`vxbQd";
    for (int i = 0; i < 7; i++)
    {
        b[i] = b[i] ^ 2;
        b[i]--;
    }
    printf("%s", b);
    return 0;
}
//easy_Re

附大佬的python脚本

str="d`vxbQd"
flag=''
for i in str:
    flag += chr((ord(i)^2)-1)
print(flag)

总结

学习自增的逆向方法,辨认逆向语句的前后顺序