HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 04.03.2024, 16:40
fara0n
Новичок
Регистрация: 13.10.2023
Сообщений: 0
С нами: 1362405

Репутация: 0
По умолчанию

Добро пожаловать путник. Готовим печеньки с чайком и погнали.

Для начала, разберёмся с самим заданием:
"Эльфы создали своё приложение под зелёного робота. Я смог разобрать его, но докопаться до сути - нет. Но точно одно: разобранный вариант - это какой-то смали. Хоть и всё на эльфийском."

Что бросается в глаза:
1) "Эльфы создали своё приложение под зелёного робота' - Приложение, сделанное под android
2) "Я смог разобрать его" - т.е. его декомпилировали и получили какой-то смали (smali). Быстрая гуглёжка показала, что SMALI - Формат ассемблерного языка Android Smali. Ok.

В данном задании нам предоставлены несколько файлов:



Все основные "штуки" всегда начинаются в Main.

Смотрим файл MainActivity.smali и ничего не понимаем. Поэтому Гугл + Чат GPT.
Интернет сказал, что в этом файле код представляет собой аннотацию @Metadata, которая содержит информацию о классе `MainActivityKt` настройку и установку контента активности с использованием Compose UI и заданных функций и параметров.

И долго не думая, лезем в файл MainActivityKt.smali, проанализировав который, нам становится понятно следующее:

1) В нём определяется класс MainActivityKt, который содержит единственный метод byteArrayToString.
2) Метод byteArrayToString принимает два параметра: массив байтов и значение байта для ключа XOR.



3) Выполнение операции XOR между значениями переменных v6 и p1, преобразование результата в байт и сохранение его в переменную v8



4) Преобразование значения переменной v8 в символ и добавление его в конец StringBuilder v0.



5) Преображение содержимого StringBuilder v0 в строку и сохранение результата в переменную v1.



Теперь, если смотреть на весь файл получаем, что:
Метод byteArrayToString объявлен как public static Final, что означает, что это статический метод, который не может быть переопределен подклассами.
Он принимает два параметра: input, который представляет собой массив байтов, и xorKey, который представляет собой байтовое значение для ключа XOR.
Метод сначала проверяет, имеет ли входной массив значение NULL, и, если это так, выдает исключение.
Затем метод создает новый объект StringBuilder для хранения результата.
Затем метод перебирает входной массив, используя цикл for-each. Для каждого байта в массиве метод выполняет операцию XOR с помощью xorKey и добавляет полученный байт в StringBuilder.
После завершения цикла метод возвращает строковое представление StringBuilder.

Уф... Вроде бы стало понятно. Но теперь появились вопросики:
1) Где взять входной массив?
2) Кто-нибудь видел xorKey?

Отвечаем на свои же вопросы. Открываем оставшиеся файлы *.smali в файле ComposableSingletons$MainActivityKt$lambda-1$1.smali видим это:



Чем не массив байт? Будем считать, что на первый вопрос ответили. P.S. пусть вас не смущает буква t, позже мы поймём, что с ней сделать
С вторым вопросом пришлось возиться дольше. Но, вернувшись к "истокам" (к файлу MainActivityKt.smali) мы видим код:



Видишь xorKey? Нет? А он есть и это строчка: const/4 p1, 0x7
Теперь, имея на руках все "ингредиенты", накидываем от руки скрипт, который сделает эльфийскую магию.

Цитата:

Python:


Код:
def
byteArrayToString
(
input_byte
,
xorKey
)
:
if
input
is
None
:
raise
ValueError
(
"Err: null input"
)
result
=
[
]
for
byte
in
input_byte
:
xorResult
=
byte
^
xorKey
        char
=
chr
(
xorResult
)
result
.
append
(
char
)
return
""
.
join
(
result
)
def
main
(
)
:
input_byte
=
[
0x44
,
0x48
,
0x43
,
0x42
,
0x45
,
0x5e
,
0x7c
,
0x74
,
0x6a
,
0x47
,
0x6b
,
0x6e
,
0x58
,
0x64
,
0x37
,
0x63
,
0x42
,
0x58
,
0x61
,
0x37
,
0x55
,
0x58
,
0x66
,
0x69
,
0x43
,
0x75
,
0x37
,
0x6e
,
0x63
,
0x7a
]
xorKey
=
0x7
result
=
byteArrayToString
(
input_byte
,
xorKey
)
print
(
result
)
if
__name__
==
'__main__'
:
main
(
)
P.S. Помните букву t? Мы просто её удаляем и у на с получается красивый массив.
Не знаю почему, но задание настолько понравилось, что именно по нему решил написать writeup. Хоть я и не силён в реверсе.
Спасибо что дочитал до конца бро. Удачи в тасках.
 
Ответить с цитированием

  #2  
Старый 04.03.2024, 18:11
yetiraki
Новичок
Регистрация: 07.02.2023
Сообщений: 0
С нами: 1719376

Репутация: 0
По умолчанию

Спасибо за райтап.
а можно было воспользоваться jadx-gui и читать java код.
 
Ответить с цитированием

  #3  
Старый 04.03.2024, 18:18
fara0n
Новичок
Регистрация: 13.10.2023
Сообщений: 0
С нами: 1362405

Репутация: 0
По умолчанию

Цитата:

yetiraki сказал(а):

Спасибо за райтап.
а можно было воспользоваться jadx-gui и читать java код.

Если руки дойдут, то попробую. Это что-то новое (для меня)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.