前言
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)
总结
学习自增的逆向方法,辨认逆向语句的前后顺序