可以看到如下源代码
<?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){
$_o=strrev($str);//反转字符串
// echo $_o;
for($_0=0;$_0<strlen($_o);$_0++){//循环字符串
$_c=substr($_o,$_0,1);//substr(a,b,c)分割字符串函数,a为字符串,b代表位置,从字符串的第几位开始提取,c代表提取几个字符,则此处表示为依次提取一个字符
$__=ord($_c)+1;//ord()函数返回长度为一的字符串对应的ASCII值,返回十进制整数
$_c=chr($__);//chr(),返回ASCII值对应的字符,参数可以为十进制和十六进制的数字
$_=$_.$_c; //php中点号表示字符拼接
}
return str_rot13(strrev(base64_encode($_)));//str_rot13编码并解码字符串,如,str_rot13(hello)=qwert,那么str_rot13(qwert)=hello
//strrev(base64_encode($_))是反转base64加密后的字符,
}
highlight_file(__FILE__);
/*
逆向加密算法,解密$miwen就是flag
*/
?>
写出逆向代码:
怎么一步步加密的,我们就一步步解密回去
这里简单说一下php页面的编写格式如下,中间是脚本代码:
- <?php ?>
- $定义变量,如$a,变量a
像剥洋葱,一步步来
<?php
$str="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$_=base64_decode(strrev(str_rot13($str)));
$_o=NULL; //不需要定义也可以,只不过会报一个未定义变量的错,但结果还是会运行出来
for($_0=0;$_0<strlen($_);$_0++){
$_c=substr($_,$_0,1);
$__=ord($_c);
$_c=chr($__-1);
$_o=$_o.$_c;
}
echo strrev($_o);
?>
flag为:flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}
参考CSDN _Christo,侵删