BUUCTF--xor1

这题考察的是亦或。查壳:

BUUCTF--xor1_第1张图片


无壳。看下IDA的流程:BUUCTF--xor1_第2张图片


我们看到将用户输入做一个异或操作,然后和一个变量做比较。如果相同则输出Success。这里的知识点就是两次异或会输出原文。因此我们只需要把global再做一次异或就能解出flag。在IDA中按住shift+e就能找到对应字符串的ascll:

BUUCTF--xor1_第3张图片


#include

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

BUUCTF--xor1_第4张图片

你可能感兴趣的:(Reverse,java,算法,数据结构)