题目:
WP:
代码审计
<?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
*/
?>
解密$miwen,分析加密算法
15行的str_rot13()函数对字符串执行 ROT13 编码,ROT13 编码把每一个字母在字母表中向前移动 13 个字母。数字和非字母字符保持不变,编码和解码都是由相同的函数完成的,直接用ROT13在线解密得到n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf
strrev() 函数反转字符串,利用PHP编译器再次反转将得到原字符串fjg4OjM2ZTFiZzg0MzhlNDE3NTdkOjI5Y2dlYjZlNDhjYEdVRFRPfDtoYm1n
再进行base64解密,得到
~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg
for循环里面:
ord() 函数和chr() 函数是配对函数,ord() 函数以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
很显然将每个字符的ascii都加1
所以只要将每个字符都-1即可得到原字符串}77925d0af7327d30646c918bfda5d37b_FTCSN{:galf
再使用strrev()函数得到最初字符串