适用于PHP的空白混淆器

阅读有关JavaScript混淆的文章 (即文章的第3部分)之后,我对类似的PHP混淆器感兴趣。

文章中提到的混淆器将JavaScript代码变成了不可见的内容(乍看之下),其中包括制表符和空格代码。

最重要的是,将源代码的每个符号表示为已转换为二进制系统的该符号的代码。 然后将1替换为空格,将0替换为制表符(当然可以,反之亦然)。

通过在PHP中实现此算法,一切都变得很简单,就像JavaScript中一样。

混淆器代码:

function obfuscate($code) { $len = strlen($code); $obf = ''; for ($i = 0; $i < $len; $i++) { //        i-  $bin = decbin(ord($code[$i])); //      ,      0 $bin = ($binLen = strlen($bin) > 7) ? $bin : implode('', array_fill(0, 8 - strlen($bin), '0')) . $bin; //    1  ,  0        ,      $obf .= str_replace(array('1', '0'), array(chr(9), chr(32)), $bin); } return $obf; } 

此处一切似乎都很好(如果不进行详细介绍),现在我将举一个调用混淆代码的示例。

反混淆器(“执行者”)

 function include_o($file) { $file = trim($file); //     if ( empty($file) || !is_readable($file) ) { throw new Exception("Filename is empty or file isn't readable"); } $string = file_get_contents($file); $len = strlen($string); $out = ''; for ($i = 0; $i < $len; $i++) { /* *  8      , *               */ $out .= chr(bindec(str_replace(array(chr(9), chr(32)), array('1', '0'), substr($string, $i, 8)))); $i += 7; } if (!empty($out)) { eval($out); } } 

似乎该函数返回的值将是“混合的”(如果我理解正确的话,则为void-它的一部分将如何?),但这是您要讲究的细节。

结论

在我看来,结果是可以忍受的,但是这种类型仍然不能声称是有效的(实际上是暗示使用的)混淆器(我知道,有人说过平庸的话)。 这样做很有趣,至少我很感兴趣看到结果。
谢谢,祝你好运。

Source: https://habr.com/ru/post/zh-CN458710/


All Articles