[CISCN 2022 东北]easycpp

关键是要找到&Buf2对应的值
直接静态是找不到的
注意到v12 = &Buf2v12rdx指向的
所以动调找到这条语句及后面rdx指向的地址即可
image
下断点 main开头也下一个 输入38个字符绕过长度判断后运行到断点处
右边调出rdx的窗口
image
0Ah开始的一串就是Buf2
然后一个简单的异或回去即可得到flag

#include<bits/stdc++.h>
using namespace std;
signed main(){
	unsigned char flag[] =
{
  0x0A, 0x0B, 0x7D, 0x2F, 0x7F, 0x67, 0x65, 0x30, 0x63, 0x60, 
  0x37, 0x3F, 0x3C, 0x3F, 0x33, 0x3A, 0x3C, 0x3B, 0x35, 0x3C, 
  0x3E, 0x6C, 0x64, 0x31, 0x64, 0x6C, 0x3B, 0x68, 0x61, 0x62, 
  0x65, 0x36, 0x33, 0x60, 0x62, 0x36, 0x1C, 0x7D, 0x00
};
// encrypt
//	for(int i=0;i+3<38;i++){
//		flag[i]^=flag[i+1];
//		flag[i+1]^=flag[i+2];
//		flag[i+2]^=flag[i+3];
//	}

	//decrypt
	for(int i=34;i>=0;i--){
		flag[i+2]^=flag[i+3];
		flag[i+1]^=flag[i+2];
		flag[i]^=flag[i+1];
	}
	for(int i=0;i<38;i++)
		cout<<char(flag[i]);
}
posted @ 2023-10-21 19:09  N0zoM1z0  阅读(85)  评论(0编辑  收藏  举报