[CISCN 2022 东北]easycpp
关键是要找到&Buf2
对应的值
直接静态是找不到的
注意到v12 = &Buf2
而v12
是rdx
指向的
所以动调找到这条语句及后面rdx
指向的地址即可
在
下断点 main开头也下一个 输入38个字符绕过长度判断后运行到断点处
右边调出rdx
的窗口
从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]);
}