为什么`system`没有被PHP的这些混淆器隐藏

时间:2019-03-17 05:00:05

标签: php obfuscation

我最近正试图选择一种混淆器,我用谷歌搜索了这些东西:

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,有人可以告诉我为什么吗?

1 个答案:

答案 0 :(得分:2)

那些工具通过降低代码的可读性来使您的代码更难理解:它们删除缩进和注释,替换变量的有意义的名称和user-defined functions甚至对字符串内容进行编码。目标是使修改或重用代码变得更加困难,因为PHP是一种解释型语言,使源代码对站点/应用程序管理员可见。 为此,在混淆PHP的built-in functions 中没有用,您可能会看到类似的情况,例如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="));

即使该示例显示,没有内置功能也无法完全实现混淆。编码通常会使源代码更长,并且您需要编码越多,执行速度就越慢。站点管理员确实关心站点的性能和所消耗的额外资源,但这不会使犯罪分子利用服务器自用。