BUUCTF Youngter-drive
主函数是一个双线程交替进行
变换函数:
对应的变换字符串
这个函数变换的本质:
若原来的是大写字母 就转为off[]中的小写
若原来的是小写字母 就转为off[]中的大写
这里逆向有个点要注意:
不能算出off[pos]的位置后用 pos+38 <97 这种来判断
最终exp:
#include<bits/stdc++.h>
using namespace std;
string s = "TOiZiZtOrYaToUwPnToBsOaOapsyS";
char offset[] = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
signed main(){
string flag = "";
// cout<<strlen(offset);
for(int i=1;i<=29;i++){
if(!(i&1)){ // change
int pos;
for(int j=0;j<52;j++){
if(s[i-1] == offset[j]){
pos = j;
break;
}
}
if(offset[pos]>='A'&&offset[pos]<='Z'){
flag += char(pos+96);
}
else{
flag += char(pos+38);
}
}
else{ // just sleep
flag += s[i-1];
continue;
}
}
cout<<flag;
}