Problem: [SWPUCTF 2021 新生赛]re2
[[toc]]
思路
拖进ida中分析

首先进去看到了类似于flag的字符串str2,然后接下来就是输出函数跟输入函数,v7存的是str的字长用于限制下面for循环的次数,下面for循环的意思是满足条件改变字符串,懂了大概的意思就是str2是被改的字符串,循环的次数就是str2的长度也就是12次。
思路清晰编写exp。

犯的第一个错误就是直接把代码原搬过来,以为按着这个循环if语句判断完输出的数就是正确的flag,但其实是错的。
正确的方法应该是要逆运算式,因为这个flag是已经被打乱的字符串我们要做的是恢复字符串,那就要跟着它相反过来。
所以正确的exp如下:
EXP
*#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char Str[]="ylqq]aycqyp{";
int l;
l=strlen(Str);
for (int i = 0; i < l; ++i)
{
if ( (Str[i] <= 94 || Str[i] > 96) && (Str[i] <= 62 || Str[i] > 64) )
Str[i] += 2;
else
Str[i] -= 24;
}
printf("%s",Str);
return 0;
}
总结
flag是NSSCTF{nss_c{es{r},但是用这个提交是错误的,可能是作者搞错了之类的,只有把{替换成a才能提交成功也就是NSSCTF{nss_caesar}。
