Что это за шестнадцатеричные коды и как их можно декодировать / кодировать?

1505
skub

У меня есть некоторый интерес, если я узнаю немного больше об опубликованном эксплойте, который создает пользователя root на машине с Linux; однако, прежде чем запускать код, я хочу убедиться, что я все понимаю, и я не могу найти какую-либо информацию об используемых шестнадцатеричных кодах.

Это ссылка на источник кода эксплойта: exploitdb.com/exploits/17439

Это базовая программа на C, но значение одного из указателей использует такой код:

 "\x6a\x26\x5a\x25\x04\xe3\xb3\x64" "\x04\xc7\x03\x65\x48\xe6\x02\xc3" 

Как мне декодировать это в ASCII и как я могу перекодировать его обратно?

Я думаю, что я мог бы быть совершенно неосновным, и на самом деле этот код должен декодироваться до сборки, но я не совсем знаю. В любом случае, что я могу сделать с этим кодом, чтобы убедиться, что я не выполняю произвольные команды?

Я совершенно новичок в C, но знаю достаточно VB.net/C#/PHP, чтобы быть опасным.

PS Для тех из вас, кто обеспокоен, я буду запускать это в виртуальной машине.

2

3 ответа на вопрос

5
JdeBP

Сама запись базы данных, на которую вы указали, дает как исходную программу на ассемблере, так и ее эквиваленты на языке C, непосредственно над шестнадцатеричным необработанным машинным кодом. Это язык ассемблера SuperH .

Да, я знаю; комментарии, которые содержат сборку, могут или не могут быть кодом, указанным в указателе. Я запрашивал способ (метод или процесс), чтобы проверить код, чтобы убедиться, что это действительно сборка, отмеченная выше. А также метод для кодирования * в * соответствующие значения шестнадцатеричного кода (на который никто не ответил). skub 12 лет назад 0
Это не в вашем вопросе, как его спросили, в котором ничего не говорилось о проверке машинного кода на языке ассемблера, но спрашивалось о преобразовании в символы ASCII, поэтому ответы людей говорят об этом. Вы не спрашивали ничего, как то, что вы спрашиваете сейчас. А метод кодирования языка ассемблера в машинный код известен как ** ассемблер **. JdeBP 12 лет назад 0
В любом случае, что я могу сделать с этим кодом, чтобы убедиться, что я не выполняю произвольные команды? skub 12 лет назад 0
1
Ignacio Vazquez-Abrams

REPL в Python хорош в такой ситуации.

>>> "\x6a\x26\x5a\x25\x04\xe3\xb3\x64" 'j&Z%\x04\xe3\xb3d' >>> "\x04\xc7\x03\x65\x48\xe6\x02\xc3" '\x04\xc7\x03eH\xe6\x02\xc3' 

Так что да, в значительной степени все сборки. Вам понадобится дизассемблер (или сборник данных процессора и много терпения), чтобы прочитать его.

Вероятно, это связано с переполнением стека, но не могли бы вы предоставить базовый пример кода (даже если псевдокод), как заставить Python разобрать это? skub 12 лет назад 0
Там нет дальнейшего разбора. Я показал, что Python знает об этом. Вам понадобится дизассемблер (или ...) отсюда. Ignacio Vazquez-Abrams 12 лет назад 0
Может быть, вы хотите спросить об этом на http://codegolf.stackexchange.com/, возможно, они могут помочь вам. Michael K 12 лет назад 0
0
Dave Sherohman

Декодирование его в ASCII будет бесполезным, поскольку это не текстовая строка - \x0...байты отображаются для управления символами в наборе символов ASCII, а не для печатных символов.

Похожие вопросы