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

  #1  
Старый 09.07.2024, 14:27
Don Reverso
Новичок
Регистрация: 17.05.2025
Сообщений: 0
С нами: 524585

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

  • Название: Эльфийский смали
  • Категория: reverse
  • Платформа: antichat
В архиве нас ждут несколько файлов с расширением .smali:



Для справки: smali - это своего рода аналог ассемблера для android-приложений. А те, кто знаком с разработкой таковых на Java, могли уже заметить знакомый MainActivity.

Если вы знаете smaliи хотите узнать, как этот таск можно было решить, не переводя код в java- на форуме уже есть такой райтап. Мы же воспользуемся технологиями нашего времени и переведём этот smali-код в Java, и поможет нам в этом утилита JADX(gui-версия). Она есть как на Windows, так и на Linux, гитхабприлагаю. Вообще - очень полезная тулза при ревёрсе android-приложений, в многочисленных функциях которой есть перевод smaliв эквивалентный Java.

Открываем в ней эти 6 файлов:



В MainActivityничего особо интересного не наблюдается, так что теперь заглянем в MainActivityKt:



А вот здесь уже можно заметить довольно интересную переменную - xorKey. Судя по всему, в функции byteArrayToStringпередаваемый массив байт ксорится с этим ключом, и на выходе получается зашифрованная/расшифрованная строка. А чуть выше, в byteArrayToString$defaultможно найти некоторое условие с двумя переменными (их я переименовал в соответствие со следующим скриншотом), через которое определяется сам xorKeyи вызывается предыдущая функция. Попробуем поискать вызов этой самой byteArrayToString$default:



А вот и сам вызов, в 27 строке! Первым аргументом у нас передаётся какой-то массив байт, вторым - 0 (num_0с предыдущего скриншота), который потом заменится на 7, затем - 2 (num_2) - число, которое удовлетворит проверке. И в конечном итоге этот набор байт поксорится с числом 7. Напишем простенькую программу на питоне:

Python:


Код:
secret
=
"68, 72, 67, 66, 69, 94, 124, 116, 106, 71, 107, 110, 88, 100, 55, 99, 66, 88, 97, 55, 85, 88, 102, 105, 67, 117, 55, 110, 99, 122"
secret
=
secret
.
split
(
", "
)
secret
=
[
chr
(
int
(
i
)
^
7
)
for
i
in
secret
]
print
(
""
.
join
(
secret
)
)
Запустим её:



Получили флаг, сработало!
Надеюсь, этот небольшой райтап поможет вам в нашей нелёгкой стезе.

Удачного ревёрса!

made 4@rev_with_da_boys
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.