Comments 28
А ларчик просто открывался :)
0
По моему
получается всё же менее заметен. Или это такая фишка, зашифровать, чтобы не был понятен смысл кода, который всё равно удалят?
$_GET[0]($_GET[1] )
получается всё же менее заметен. Или это такая фишка, зашифровать, чтобы не был понятен смысл кода, который всё равно удалят?
+5
Спасибо за деобфускацию. Предупрежден — значит вооружен.
0
Я уже потренировался в написании в таком стиле, вот пример, выводящий «Hello!»: http://bolknote.ru/2013/09/16/~4065.
+5
Кстати, ещё вот забавное про PHP:
$a = "2d9"; $a++; $a++; echo $a;
→ 3$a = "2d9"; $a+=2; echo $a;
→ 4$a = "2d9"; $a++; echo $a;
→ 2e0 +7
Язык с динамической типизацией :)
0
UFO just landed and posted this here
www.php.net/manual/ru/language.operators.increment.php
После инкремента получаем 2e0, а это уже не строковый тип, а числовой (http://www.php.net/ru/language.types.float.php)
Инкремент числовых переменных уже действует по правилу:
PHP следует соглашениям Perl (в отличие от С) касательно выполнения арифметических операций с символьными переменными. Например, в PHP и Perl $a = 'Z'; $a++; присвоит $a значение 'AA', в то время как в C a = 'Z'; a++; присвоит a значение '[' (ASCII значение 'Z' равно 90, а ASCII значение '[' равно 91). Следует учесть, что к символьным переменным можно применять операцию инкремента, в то время как операцию декремента применять нельзя, кроме того, поддерживаются только ASCII символы (a-z и A-Z). Попытка инкремента/декремента других символьных переменных не будет иметь никакого эффекта, исходная строка останется неизменной.
После инкремента получаем 2e0, а это уже не строковый тип, а числовой (http://www.php.net/ru/language.types.float.php)
Инкремент числовых переменных уже действует по правилу:
$a++ Возвращает значение $a, затем увеличивает $a на единицу.
+1
Как то слишком сложно расшифровываете. Проще же можно всегда.
+1
Господа минусующие, если вы видите обфусцированный код, не нужно идти в лоб, начать надо с evalhook ( или искать конструкции похожие на eval, их видно на глаз, что то типа $dsdgdg($fsfdsfs) )
Если не как в данном примере не используется эта или похожая функция, можно запустить код в отладчике, и посмотреть значение каждой переменной, а не высчитывать все вручную.
Если не как в данном примере не используется эта или похожая функция, можно запустить код в отладчике, и посмотреть значение каждой переменной, а не высчитывать все вручную.
пример

+3
В данном случае всего 11 строк, но их может быть и 200 и 300.
Неоднократно на различных CTF подобный код деобфусцировал в обычном отладчике.
Неоднократно на различных CTF подобный код деобфусцировал в обычном отладчике.
+1
Вообще самый сложный и интересный кусок который мне приходилось деобфусцировать выглядел вот так.
function b($b) {return eval(Ü瑈©²ÓÒœÄ ¬žó¶é²îŒ–‰…ú í©¦Î²Œ×ª±§èù伦¡®Óð¿¿àšÒ ڊоßÁÜ•ï͵þë™Ä–þ¶±¤³ŒÀåòÈàÙ¡‰¿¸–¦õðöÌ¼Š‰ßº‘ìØÚåàÇÐÑ‘ÊÛ‰âä þŠéÁÔÛ’ÈÕÑ Ï„ªüä±µÑÛÏÉ^®‚åýÛÜó¡è¶ÿÞûƒÓˆÆÆáò¼‰ÕÚÒ¼š´îûšŸÁÕÎÓć°•ÖÓȲ¡Ô¨æµÐ÷å¾¼ÂõœÑÚ¯í¿ ÆÐþÏ›®œÆð¼¡ÜΨúÊÚåÒ‡ØÒ®² ö);}
+2
А тут точно кодировка правильная? Что-то не сильно похоже на валидный код.
+1
Опкод внутри исходника, пока копировал само собой часть байтов потерялась. Да и запустится такое не везде.
Вот разбор задания одной из команд, для того чтобы понять, что находится конкретно в этой строке использовался Vulcan Logic Decompiler (php opcode disassembler)
codezen.fr/2012/10/19/hackyou-ctf-web-300-rng-of-ultimate-security-writeup/
довольно интересный материал.
Вот разбор задания одной из команд, для того чтобы понять, что находится конкретно в этой строке использовался Vulcan Logic Decompiler (php opcode disassembler)
codezen.fr/2012/10/19/hackyou-ctf-web-300-rng-of-ultimate-security-writeup/
довольно интересный материал.
+2
Изначальная концепция (шаманство с преобразованиями) почему-то ассоциируется у меня с названием другого языка программирования — brainfuck :)
+1
Автору статьи, браво! И плюс за пытливость и настойчивость :)
0
Следующая задача — написать транслятор нормального кода в такой, чтобы не обфусцировать руками.
0
Прошу прощения за невежество, а что должно получиться при вызове
?
$_GET[0]($_GET[1] );
?
0
example.com/script.php?0=function&1=argument
что-то вроде этого, я считаю
т. е. в первом аргументе передаём имя функции, во втором аргумент(ы), который(е) будет(ут) ей передан(ы).
а $_GET[0]($_GET[1] ); превращается в:
function( argument);
что-то вроде этого, я считаю
т. е. в первом аргументе передаём имя функции, во втором аргумент(ы), который(е) будет(ут) ей передан(ы).
а $_GET[0]($_GET[1] ); превращается в:
function( argument);
+2
Сколько времени потратил на решение?
0
Only those users with full accounts are able to leave comments. Log in, please.
Деобфускация бэкдора без единого буквенно-цифрового символа