首页 > 解决方案 > 为什么 PHP 的这些混淆器不隐藏`system`

问题描述

我最近试图选择一个混淆器,我尝试了这些我用谷歌搜索的:

https://www.gaijin.at/en/tools/php-obfuscator
http://www.pipsomania.com/best_php_obfuscator.do
https://www.tools4nerds.com/online-tools/php-obfuscator

他们在混淆变量名和函数名方面做得很好,但是他们都不能隐藏函数system,谁能告诉我这是为什么?

标签: phpobfuscation

解决方案


这些工具通过降低可读性来使您的代码更难理解:它们删除缩进和注释,替换变量和用户定义函数的有意义的名称,甚至对字符串内容进行编码。目标是使修改或重用代码变得更加困难,因为 PHP 是一种解释性语言,使源代码对站点/应用程序管理员可见。为此目的,混淆 PHP 的内置函数是没有用的,您可以看到同样的情况发生在例如echo()

ORIGINAL:     echo "Obfuscated string.\n";
Gaijin.at:    echo base64_decode('T2JmdXNjYXRlZCBzdHJpbmcuCg==');
Tools4Nerds:  echo "O\x62f\x75s\x63a\x74\x65\x64 \x73t\x72\x69n\x67\x2e\n";

用于混淆甚至内置函数名称,eval()被广泛用于邪恶目的。这样,PHP 源代码可以在执行之前作为字符串处理,从而启用用于字符串混淆的每个方法。

ORIGINAL:     system('uptime');
OBFUSCATED:   eval(base64_decode("c3lzdGVtKCd1cHRpbWUnKTs="));

即使这个例子也表明,如果没有内置函数,完全不可能进行混淆。编码通常会使源代码变长,而您需要编码的越多,执行速度就越慢。站点管理员确实关心站点性能和消耗的额外资源,但这并不影响利用服务器为自己使用的犯罪分子。


推荐阅读