【问题标题】:Why `system` is not hide by these obfuscator of PHP为什么 PHP 的这些混淆器不隐藏`system`
【发布时间】:2019-08-07 21:57:24
【问题描述】:

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

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,谁能告诉我这是为什么?

【问题讨论】:

  • 顺便说一句,因为这最初是在 security.SE 上发布的:请注意混淆是 NOT 安全性的,并且 NOT 可以安全地存储秘密在源代码中。计算机可以计算出的任何东西——也就是说,它可以执行的任何脚本甚至二进制文件——人类也可以计算出来。混淆让阅读你的脚本变得更慢、更烦人,但它并没有让它变得不可能,甚至比最随意的逆向工程师更难劝阻。它还尖叫着“我在隐瞒一些事情!”肯定会找到任何存储的秘密,而且可能比您预期的要快得多。
  • 哦,另外,从安全角度来看,使用system 是一个糟糕的、糟糕的想法。它在 shell(/bin/shcmd.exe)中运行您的命令,而不是直接运行它(这仍然有风险,但更容易安全地执行)。 Shell 提供了多种破解和执行任意代码的方法。绝大多数产生任意代码执行的成功远程攻击可能是 shell 转义。

标签: php obfuscation


【解决方案1】:

这些工具通过降低可读性使您的代码更难理解:它们删除缩进和 cmets,替换变量的有意义名称和 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="));

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多