下载附件,查壳,发现无壳,拖进IDA,shift+F12查找字符串
发现可疑字符串,点击跟进,有
F5查看伪代码,有
发现该程序要求我们输入一段字符串,经过判断字符串长度后,再异或运算,得到的字符串再和字字符串数组 arr[] 比较,最终判断是否正确
由伪代码易得flag的长度为22,再点击arr[i]跟进查看,有
可得arr[22] ,编写反异或脚本,c语言实现如下
#include <stdio.h>
#include <stdlib.h>
int main() {
int arr_list[] = {0x03FE, 0x03EB, 0x03EB, 0x03FB, 0x03E4, 0x03F6, 0x03D3, 0x03D0, 0x0388, 0x03CA, 0x03EF, 0x0389, 0x03CB, 0x03EF, 0x03CB, 0x0388, 0x03EF, 0x03D5, 0x03D9, 0x03CB, 0x03D1, 0x03CD};
int size = 22;
char flag[size];
for (int i = 0; i < size; i++) {
flag[i] = (char)((arr_list[i] - 900) ^ 0x34);
}
printf("%s\n", flag);
return 0;
}
运行可得结果
即flag:NSSCTF{x0r_1s_s0_easy}