BUUCTF Youngter-drive

主函数是一个双线程交替进行
image
变换函数:
image
对应的变换字符串
image

这个函数变换的本质:
若原来的是大写字母 就转为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;
}
posted @ 2023-10-06 17:10  N0zoM1z0  阅读(2)  评论(0编辑  收藏  举报