您的位置:首页 > 编程语言 > PHP开发

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

2013-12-10 13:14 621 查看
在github上下了个PHP的webshell,代码如下图



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



一开始没有头绪,以为是采用了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 代码,且必须以分号结尾

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



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

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

总结:

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

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

具体的base64+gzinflate压缩编码和解码代码实现:脚本之家
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: