进入环境直接看到题目
很明显我们需要根据代码进行解密
相关函数
- ord() 函数返回字符串中第一个字符的 ASCII 值。
- strlen() 函数返回字符串的长度。
- substr(string,start,length)函数返回字符串的一部分。
- chr() 函数从指定 ASCII 值返回字符。
- strrev() 函数反转字符串。
- str_rot13() 函数对字符串执行 ROT13 编码。(ROT13 编码是把每一个字母在字母表中向前移动 13 个字母得到。数字和非字母字符保持不变。属于凯撒密码)
- base64_encode()函数对字符串进行base64编码。
代码分析
我们只需根据代码的思路进行逆向解答即可。
解题过程
本次解题用到了CTFcrafttools解密工具—— github链接
通过工具进行解题
-
进行rot13解密
结果:
n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf -
反转
结果:
fjg4OjM2ZTFiZzg0MzhlNDE3NTdkOjI5Y2dlYjZlNDhjYEdVRFRPfDtoYm1n -
base64解密
结果:
~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg -
ASCII码值均-1(这一步上文提到的工具中没有,可以在网页中搜索在线转码工具完成
结果:
}77925d0af7327d30646c918bfda5d37b_FTCSN{:galf
这里我最开始想的是用偏移量为1的凯撒密码解密完成,但是忘记了凯撒密码是只针对字母的 -
反转
结果:
flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}
通过脚本进行解题
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
echo('凯撒解密:');
$a=str_rot13($miwen);
echo($a);
echo("\n");
echo('字符串反转:');
$b=strrev($a);
echo($b);
echo("\n");
echo('base64解密:');
$c=base64_decode($b);
echo($c);
echo("\n");
echo('字符串ascii码值-1:');
$d= null;
for($_0=0;$_0<strlen($c);$_0++){
$_c=substr($c,$_0,1);
$__=ord($_c)-1;
$_c=chr($__);
$d=$d.$_c;
}
echo($d);
echo("\n");
echo('反转后得到flag:');
$flag=strrev($d);
echo($flag);
?>
运行结果:
凯撒解密:n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf
字符串反转:fjg4OjM2ZTFiZzg0MzhlNDE3NTdkOjI5Y2dlYjZlNDhjYEdVRFRPfDtoYm1n
base64解密:~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg
字符串ascii码值-1:}77925d0af7327d30646c918bfda5d37b_FTCSN{:galf
反转后得到flag:flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}
最终结果即为得到flag
flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}