用PHP隐藏和取消隐藏代码
如果您要出售系统,那么您想要做的最后一件事就是让人们复制该系统并将其免费传递给他人。有许多方法可以实现系统的各个部分,以阻止这种情况的发生。
到目前为止,最简单的方法是创建一段隐藏的代码,将其删除将导致应用程序崩溃。它甚至可以简单地链接到您的站点,因此即使您免费提供应用程序,您也始终可以看到该链接。
此方法涉及使用名为的函数eval(),该函数将PHP代码作为字符串并对其进行解释以产生输出。这是一个打印到#!的链接的示例。代码。
$code = "echo \"#! code\";"; eval($code);
因此,让我们使用一些代码对可能正在阅读我们源代码的任何人隐藏它。首先,我们通过隐藏函数将此字符串传递,以生成非人类可读的文本。obfuscate()依次调用每个字符并将其转换为ascii等效项即可调用此函数并起作用。
function obfuscate($text) { $length = strlen($text); $scrambled = ''; for ($i = 0; $i < $length; ++$i) { $scrambled .= ord($text[$i]). ' '; } return $scrambled; } $code = "echo \" #! code\";"; $obf = obfuscate($code); echo $obf;
这将打印出以下内容:
101991041113234609732104114101102613910411611611258474711911911946104971151049897110103991111001014699111109473932116105116108101393533329911110010139623235333299111100101604797623459
我们可以将其存储为变量,直到下一次需要它为止。为了运行此代码,我们需要将其转换为eval()可以理解的内容,为此,我们使用与相对的obfuscate(),称为unobfuscate()。该函数通过获取一组ascii值并将其转换为等效的字符来工作,请注意,我们还修剪了文本以删除代码末尾的最后一个空格。
function unobfuscate($scrambled) { $text = ''; $bits = explode(' ',$scrambled); foreach ( $bits as $bit ) { $text .= chr($bit); } return trim($text); }
然后,我们可以将隐藏的代码转换为PHP代码,然后将其传递给eval()函数并运行。
$code = '101 99 104 111 32 34 60 97 32 104 114 101 102 61 39 104 116 116 112 58 47 47 119 119 119 46 104 97 115 104 98 97 110 103 99 111 100 101 46 99 111 109 47 39 32 116 105 116 108 101 39 35 33 32 99 111 100 101 39 62 32 35 33 32 99 111 100 101 60 47 97 62 34 59'; $code = unobfuscate($code); eval($code);
这将产生以下输出。
请注意,执行这种操作可能会减慢您的应用程序的速度,特别是如果您尝试eval()使用大量代码的话。就我个人而言,这样的单个链接可能是可行的,因为还有很多更好的方法可以验证某个软件是否已获得适当许可。