BUUCTF:[ACTF新生赛2020]rome
进入IDA后只有,main函数里只有func,点进去一看, strcpy(v12, "Qsw3sj_lz4_Ujw@l"); ,然后根据 定义 以及各种 强制转换 可以看出ACTF{}里的长度为16,设它为s[16]好了。
如果是大写字母那么,s[ i ] = ( s[ i ] - 51 ) % 26 + 65;
如果是小写字母那么,s[ i ] = ( s[ i ] - 79 ) % 26 + 97;
最终字符串 s 变为 Qsw3sj_lz4_Ujw@l 。
所以写出求逆代码,得出结果
#include<stdio.h>
#include<string.h>
int main()
{
int i=0,j,l;
char s[]="Qsw3sj_lz4_Ujw@l";
l=strlen(s);
char s1[]="Qsw3sj_lz4_Ujw@l";
for(i=0;i<l;i++){
if(s1[i]>64&&s1[i]<91){
s1[i]=s1[i]-65+51;
if(s1[i]<65)
s1[i]+=26;
}
else if(s1[i]>96&&s1[i]<123){
s1[i]=s1[i]-97+79;
if(s1[i]<97)
s1[i]+=26;
}
printf("%c",s1[i]);
}
}
最后结果(BUUCTF里的)是 flag{Cae3ar_th4_Gre@t}