我的解题过程
-
题目描述,”解密”
-
访问目标网页,网页内容如下
<?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 */ ?>
-
处理变量名,增大代码可读性
<?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
-
编写解码脚本
<?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); ?>
-
使用浏览器访问本地PHP环境,得到flag,flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}
-
提交,答案正确