这题考察的是亦或。查壳:
无壳。看下IDA的流程:
我们看到将用户输入做一个异或操作,然后和一个变量做比较。如果相同则输出Success。这里的知识点就是两次异或会输出原文。因此我们只需要把global再做一次异或就能解出flag。在IDA中按住shift+e就能找到对应字符串的ascll:
#include<stdio.h>
int main() {
unsigned char aFKWOXZUPFVMDGH[] =
{
0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11,
0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 0x70, 0x19, 0x46, 0x1F,
0x76, 0x22, 0x4D, 0x23, 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F,
0x47, 0x32, 0x4F, 0x00
};
int i;
for (int i = sizeof(aFKWOXZUPFVMDGH) - 1; i > 0; i--) {
aFKWOXZUPFVMDGH[i] ^= aFKWOXZUPFVMDGH[i - 1];
}
for (i = 0; i < sizeof(aFKWOXZUPFVMDGH) / sizeof(aFKWOXZUPFVMDGH[0]); i++) {
printf("%c", aFKWOXZUPFVMDGH[i]);
}
return 0;
}