攻防世界-web2(逆向加密算法)

打开链接是PHP源码

攻防世界-web2(逆向加密算法)_第1张图片 给了一串密文,并对这串密文进行了一系列操作加密,注释里说解密$miwen就是flag

在此我们先介绍一些PHP内置函数:

strrev(string): 反转字符串

strlen(string): 返回字符串的长度

substr(string, start, length): 返回字符串的一部分

string: 所需要的字符串

start: 在字符串何处开始

length: 规定被返回字符串的长度,默认是直到字符串的结尾

ord(string): 返回字符串首个字符的 ASCII 值

chr(): 从指定的 ASCII 值返回对应的字符

str_rot13(string): 对字符串执行 ROT13 编码

ROT13 编码:把每一个字母在字母表中向前移动 13 个字母,数字和非字母字符保持不变,

编码和解码都是由该函数完成的,如果把已编码的字符串作为参数,那么将返回原始字符串

base64_encode(string): 使用 MIME base64 对数据进行编码

知道这些后我们开始写PHP解密脚本

因为最后返回的是 str_rot13(strrev(base64_encode($_)))

所以我们先对密文进行这三个的解密(注意顺序要反过来)

即 base64_decode(strrev(str_rot13($miwen)))

所以前半部分脚本为:

(Myon只是我随便定义的一个变量,PHP中$就是变量的意思)攻防世界-web2(逆向加密算法)_第2张图片

 得到 ~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg

后半部分脚本只需对它给的源码进行一些修改即可

给的源码:

 for($_0=0;$_0

将解密后得到的字符串赋给 $_o 

后面的 +1 变为 -1 

输出最后的变量

攻防世界-web2(逆向加密算法)_第3张图片

 可是我们发现并没对,运行后得到 }77925d0af7327d30646c918bfda5d37b_FTCSN{:galf

再次查看源码,发现前面还有一句  $_o=strrev($str);

strrev() 是反转字符串,所以我们这里还要对它进行一个反转:

echo strrev("}77925d0af7327d30646c918bfda5d37b_FTCSN{:galf");
?>

攻防世界-web2(逆向加密算法)_第4张图片

 得到 flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977

合起来的PHP脚本为:

攻防世界-web2(逆向加密算法)_第5张图片

你可能感兴趣的:(web,CTF,PHP,php,PHP常用函数,逆向加密算法,代码审计,脚本编写)