re | [MRCTF2020]VirtualTree
re | [MRCTF2020]VirtualTree
这个题是一个错题,是有多解的。
原因是使用了abs函数
考察了二叉树后序遍历,和一点基本花指令,还有一点点smc的内容。
直接丢exp了:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
unsigned char cmps[]={0x17,0x63,0x77,0x3,0x52,0x2E,0x4A,0x28,0x52,0x1B,0x17,0x12,0x3A,0xA,0x6C,0x62};
unsigned char buff[1000],size=0;
int order[] = {12,11,6,15,14,10,5,2,9,4,13,8,7,3,1,0}; // 后序(先右后左)
int main(){
unsigned char n[16];
int i;
for(i=0;i<16;i++)
n[i]='A'+i;
// 先倒序修正cmps
cmps[15] -= 2;
cmps[14] ^= cmps[15];
// cmps[12] += cmps[2];
cmps[12] = cmps[2] - cmps[12];
cmps[11] ^= cmps[12];
// cmps[10] += cmps[7];
cmps[10] = cmps[7] - cmps[10];
// cmps[9] += cmps[8];
cmps[9] = cmps[8] - cmps[9];
cmps[8] ^= cmps[7];
cmps[7] -= 3;
// cmps[6] += cmps[1];
cmps[6] = cmps[1] - cmps[6];
cmps[4] ^= cmps[5];
cmps[3] += cmps[7];
cmps[2] -= 7;
cmps[1] ^= cmps[2];
cmps[0] -= 10;
// 再根据后序遍历xor
for(i = 0; i < 16; i ++){
cmps[i] ^= n[order[i]];
}
for (i = 0; i < 16; i ++){
printf("[%d] %d: %c \n", i, cmps[i], cmps[i]);
}
printf("%s \n", cmps);
return 0;
}
本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/17034454.html
如果有问题可以在下方评论或者email:mzi_mzi@163.com