我最近试图选择一个混淆器,我尝试了这些我用Google搜索:
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
,有人能告诉我为什么会这样吗?
这些工具通过降低其可读性来使代码更难理解:它们删除缩进和注释,替换有意义的变量名称和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="));
即使这个例子也表明,如果没有内置函数,就不可能完全混淆。编码通常会使源代码更长,编码越需要执行得越慢。站点管理员确实关心站点性能和消耗的额外资源,但这并不会使犯罪分子利用服务器供自己使用。