我最近正试图选择一种混淆器,我用谷歌搜索了这些东西:
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
,有人可以告诉我为什么吗?
答案 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="));
即使该示例显示,没有内置功能也无法完全实现混淆。编码通常会使源代码更长,并且您需要编码越多,执行速度就越慢。站点管理员确实关心站点的性能和所消耗的额外资源,但这不会使犯罪分子利用服务器自用。