我的解题过程

  1. 题目描述,”解密”

  2. 访问目标网页,网页内容如下

    <?php
    $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
       
    function encode($str){
        $_o=strrev($str);
        // echo $_o;
               
        for($_0=0;$_0<strlen($_o);$_0++){
              
            $_c=substr($_o,$_0,1);
            $__=ord($_c)+1;
            $_c=chr($__);
            $_=$_.$_c;   
        } 
        return str_rot13(strrev(base64_encode($_)));
    }
       
    highlight_file(__FILE__);
    /*
       逆向加密算法,解密$miwen就是flag
    */
    ?>
    
  3. 处理变量名,增大代码可读性

    <?php
    $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
       
    function encode($str){
        $input=strrev($str);
        // echo $input;
               
        for($i=0;$i<strlen($input);$i++){
              
            $tool2=substr($input,$i,1);
            $tool1=ord($tool2)+1;
            $tool2=chr($tool1);
            $output=$output.$tool2;   
        } 
        return str_rot13(strrev(base64_encode($output)));
    }
       
    highlight_file(__FILE__);
    /*
       逆向加密算法,解密$miwen就是flag
    */
    ?>
    
    • strrev(),将字符串反转
    • 凯撒加密向后移动一位:进入一个循环,循环次数为明文长度,每次循环将第i字符赋值给tool2,把tool2的ASCII数值+1之后转为字符重新赋值给tool2,拼接到输出
    • 对输出字符串进行base64加密,反转
    • 对输出字符串进行str_rot13编码,即把每一个字母在字母表中向前移动13个字母,数字和非字母字符保持不变,解码方式是再对它进行一次str_rot13
  4. 编写解码脚本

    <?php
    $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
       
    function decode($str){
        $input=base64_decode(strrev(str_rot13($str)));
               
        for($i=0;$i<strlen($input);$i++){      
            $tool2=substr($input,$i,1);
            $tool1=ord($tool2)-1;
            $tool2=chr($tool1);
            $output=$output.$tool2;   
        }
        return strrev($output);
    }
       
    echo decode($miwen);
    ?>
    
  5. 使用浏览器访问本地PHP环境,得到flag,flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

  6. 提交,答案正确