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

  #1  
Старый 18.12.2023, 18:22
Kevgen
Новичок
Регистрация: 11.05.2023
Сообщений: 0
С нами: 1585741

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

Всем привет!

Подошёл к концу Backdoor CTF и я хочу поделиться решениями некоторых тасков.
Сейчас разберу пока 2 таска: на реверс и форензику.

1. Reverse: Open Sesame

Нам дается apk файл.
Запускаем, смотрим что есть. Есть поле для ввода имени и ключа(далее пароль).



Запускаем APKlab в VScode и смотрим MainActivity.java.

Сразу были найдены переменные valid_user, а также valid_password, который равен
Код:
{52, AppCompatDelegate.FEATURE_SUPPORT_ACTION_BAR, 49, 98, 97, 98, 97};
.
Отбрасываем valid_user, работаем только с паролем.

Далее у нас идет XOR строки "U|]rURuoU^PoR_FDMo@X]uBUg" с тем самым паролем и проверки на валидность введенного пароля(нам ни к чему).
Обращаем внимание на то, что в valid_password не все значения числовые. Строка "AppCompatDelegate.FEATURE_SUPPORT_ACTION_BAR" тоже является числом, так как возвращает значение "108".

Пишем солвер:

Python:


Код:
import
re

valid_password
=
[
52
,
108
,
49
,
98
,
97
,
98
,
97
]
TextPassword
=
''
.
join
(
chr
(
num
)
for
num
in
valid_password
)
def
sh4dy
(
str_value
)
:
digits_only
=
re
.
sub
(
r"\D"
,
""
,
str_value
)
return
digits_only
def
sl4y3r
(
str_value
)
:
return
int
(
str_value
)
-
1
def
flag
(
str1
,
str2
)
:
sb
=
[
]
for
i
in
range
(
len
(
str2
)
)
:
sb
.
append
(
chr
(
ord
(
str2
[
i
]
)
^
ord
(
str1
[
i
%
len
(
str1
)
]
)
)
)
return
""
.
join
(
sb
)
print
(
flag
(
str
(
sl4y3r
(
sh4dy
(
TextPassword
)
)
)
,
"U|]rURuoU^PoR_FDMo@X]uBUg"
)
)
Получаем флаг:
Код:
flag{aLiBabA_and_forty_thiEveS}
2. Forensics: Forenscript

Нам даётся какой-то файл a.bin. Смотрим в hex редакторе:



Очень похоже на "магические" байты png картинки, да только в странном порядке.
Чтобы восстановить картинку нам надо сделать реверс каждых 4 байт, например "47 4e 50 89" должны превратиться в "89 50 4e 47"

Пишем программу для декодирования:

Python:


Код:
with
open
(
'C:/users/hidden/Desktop/a.bin'
,
'rb'
)
as
file
:
data
=
file
.
read
(
)
output
=
b''
for
i
in
range
(
0
,
len
(
data
)
,
4
)
:
segment
=
data
[
i
:
i
+
4
]
reversed_segment
=
segment
[
:
:
-
1
]
output
+=
reversed_segment
with
open
(
'C:/users/hidden/Desktop/out.png'
,
'wb'
)
as
file
:
file
.
write
(
output
)
Открываем и видим сие:



Раз флаг не на экране - значит он в картинке.
Открываем aperisolve, видим что там есть ещё одна картинка:



Скачиваем, распаковываем, переименовываем нужный файл в "flag.png" и получаем флаг:
Код:
flag{scr1pt1ng_r34lly_t0ugh_a4n't_1t??}


Спасибо за прочтение!
 
Ответить с цитированием
 





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


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




ANTICHAT ™ © 2001- Antichat Kft.