PHP中代码编码解码的一些问题总结(base64+gzinflate|gzdeflate+str_rot13)

在github上下了个PHP的webshell,代码如下图

PHP中代码编码解码的一些问题总结(base64+gzinflate|gzdeflate+str_rot13)_第1张图片

中间省略几百行代码......


一开始没有头绪,以为是采用了PHP官方的ZendGuard加密算法,所以会自动解码

百度了下发现其实不然,用ZendGuard加密的话,在PHP代码中会显示@zend字样。

其实是自己没弄懂PHP,忽视了前面的变量,想当然的以为用的PHP自带的编码解码算法

函数问题:

1.str_rot13():对字符串执行 ROT13 编码,是一种每一个字母被另一个字母代替的方法。这个代替字母是由原来的字母向前移动 13 个字母而得到的。数字和非字母字符保持不变。编码和解码都是由相同的函数完成的。如果把一个已编码的字符串作为参数,那么将返回原始字符串

2.strrev():原型是extern char *strrev(char *s)把字符串s的所有字符的顺序颠倒过来(不包括空字符NULL)

3.gzinflate(),gzdeflate()是压缩与解压缩算法

4.eval():把字符串按照 PHP 代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾


那么经过计算变量$_,$__,$___的值如下变化

PHP中代码编码解码的一些问题总结(base64+gzinflate|gzdeflate+str_rot13)_第2张图片

最后一个即为每个变量的值,它们都对应着函数名。

最终在eval函数中,把变量$_,$__,$___替换后,代码转换成:gzinflate(base64_decode(str_rot13('bEzgeKTPKxTZIQvPBRf······'))),这个式子执行后会返回被加密的PHP代码,然后执行。


总结:

所以得出原PHP文件的编码顺序为:gzdeflate(压缩)->base64_encode(base64编码)->str_rot13(ROT 13编码)

经过这样方式加密的方式可以有效的阻拦别人查看、修改源代码。

具体的base64+gzinflate压缩编码和解码代码实现:脚本之家



你可能感兴趣的:(加密,PHP)