php - 为什么 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
,谁能告诉我这是为什么?
解决方案
这些工具通过降低可读性来使您的代码更难理解:它们删除缩进和注释,替换变量和用户定义函数的有意义的名称,甚至对字符串内容进行编码。目标是使修改或重用代码变得更加困难,因为 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="));
即使这个例子也表明,如果没有内置函数,完全不可能进行混淆。编码通常会使源代码变长,而您需要编码的越多,执行速度就越慢。站点管理员确实关心站点性能和消耗的额外资源,但这并不影响利用服务器为自己使用的犯罪分子。
推荐阅读
- c# - 使用标记化字符串计算单词的循环
- javascript - 无法从 redux 接收反应组件中的状态
- grep - 为什么 `grep -v` 不反转匹配?
- assembly - vzeroall 零是否将 ymm16 注册到 ymm31?
- php - 路线 - Laravel 不加载半页
- simulink - Simulink 计数开关频率?
- javascript - 如何检查添加的课程是否有视频然后播放
- java - jaxws 和 apache cxf 和 glassfish 5 错误:java.lang.IllegalStateException:生命周期方法 [finalizeConfig] 不得抛出已检查异常
- swift - 使用大引号时,将字符串 JSON 转换为 Swift 中的字典
- kotlin - 使用 Kotlin Native,构建 Windows exe,我可以将库 (dll) 捆绑到 exe 中吗?