[SWPUCTF 2021 新生赛]re2

发布时间 2023-05-09 12:52:24作者: TFOREVERY

查个壳:

64位,运行:

进IDA看看:

简单加密函数,不多赘述上脚本就好:

int main(){
    string Des = "ylqq]aycqyp{";
    string flag = "";
    for (int i = 0; i < Des.size(); i++) {
        for (int j = 32; j < 127; j++) {
            if ((Des[i] <= 96 || Des[i] > 98) && (Des[i] <= 64 || Des[i] > 66)) {
                if (j - 2 == Des[i])flag += j;
            } else {
                if (j + 24 == Des[i])flag += j;
            }
        }
    }
    cout << flag << endl;
    return 0;
}

得到一个a{nss_ca{esa{r},看着明显就不对,(不信的话就交一下看),看到每个‘{’前边都有一个a,会不会是多解?(因为我没加break,所以如果多解的话是会出现多一个字符出来)我们把break加上。

int main(){
    string Des = "ylqq]aycqyp{";
    string flag = "";
    for (int i = 0; i < Des.size(); i++) {
        for (int j = 32; j < 127; j++) {
            if ((j <= 96 || j > 98) && (j <= 64 || j > 66)) {
                if (j - 2 == Des[i]){
                    flag += j;break;
                }
            } else {
                if (j + 24 == Des[i]){
                    flag += j;break;
                }
            }
        }
    }
    cout << flag << endl;
    return 0;
}

得到anss_caesar},‘{’没得了,还真是多解,根据惯例,{}内是不会出现‘{’,所以我们把第一个‘a’改成‘{’,就可以了。

最后NSSCTF