---
# System prepended metadata

title: Как я Strings порешал

---

# Как я Strings порешал
Всем привет! Недавно обнаружил, что на платформе https://www.mobilehackinglab.com/ появились лабы и я решил посмотреть, насколько будет прикольным их порешать. 
Начать решил с таска 
![image](https://hackmd.io/_uploads/r1ff5rx2Jx.png)
Почему-то он привлёк моё внимание
Скачиваем и устанавливаем на девайс

![Снимок экрана 2025-03-13 в 19.08.17](https://hackmd.io/_uploads/Skla5Blnyg.png)
Ну да :) а чего я ожидал от таска на экспортируемые активити :)
Ладно давайте в Jadx
Ну и ожидаемо находим активити с `android:exported="true"` и обраткой схемы `mhl://labs`
![Снимок экрана 2025-03-13 в 19.10.53](https://hackmd.io/_uploads/HJoLiSeh1g.png)

Ну все, пора распаковать свой adb и попробовать обратится 
![Снимок экрана 2025-03-13 в 17.04.27](https://hackmd.io/_uploads/BkhU2Sxhkg.png)
Но это явно было не всё 
Снова идём в jadx и пробуем посмотреть код обработчика

![Снимок экрана 2025-03-13 в 19.17.06](https://hackmd.io/_uploads/HJZRhSgnkg.png)

Видим, что flag лежит в нативной библиотеке, которая вызывается после ряда проверок 
Давайте попробуем до него добраться, максимально ломая все проверки, которые нам мешают. Для начала давайте накинем frida hook на функцию `getflag()` - не люблю всплывашки на экране :)
```javascript
Java.perform(function () {
let Activity2 = Java.use("com.mobilehackinglab.challenge.Activity2");
Activity2["getflag"].implementation = function () {
    console.log(`Activity2.getflag is called`);
    let result = this["getflag"]();
    console.log(`Activity2.getflag result=${result}`);
    return result;
};
});
```
![Снимок экрана 2025-03-13 в 19.24.23](https://hackmd.io/_uploads/HyLYRSg2ye.png)
Теперь самое весёлое 
![Снимок экрана 2025-03-13 в 19.27.55](https://hackmd.io/_uploads/rJFUkLl2ke.png)
Ну и радостно выпиливаем проверки с 37 
![Снимок экрана 2025-03-13 в 19.32.59](https://hackmd.io/_uploads/rkOcgLe31e.png)
> Тут показалось, что патч одной инструкции более элегантное решение

и 47 строки в Jadx

![Снимок экрана 2025-03-13 в 19.40.37](https://hackmd.io/_uploads/B1BUMUe2yg.png)

> Когда ищете нужную инструкцию, цепляйтесь за строки и названия переменных 

Собираем apk

![Снимок экрана 2025-03-13 в 19.42.21](https://hackmd.io/_uploads/r16hMIg3kl.png)

Подпишем и установим на девайс
![Снимок экрана 2025-03-13 в 19.44.57](https://hackmd.io/_uploads/Skd87Lx3Jx.png)

Не забудьте перезапустить фрида скрипт после того, как переустановили apk
Пробуем вызвать нужную активити и видим, что флаг получен успешно
![Снимок экрана 2025-03-13 в 19.47.29](https://hackmd.io/_uploads/SkbgV8enyg.png)
На экране уведомлялка тоже есть
![Снимок экрана 2025-03-13 в 19.49.11](https://hackmd.io/_uploads/Hkzv4Llh1g.png)

Итак: флаг то загрузили, но получить его не смогли
Знаем, что флаг формата `MHL{}`, как-то связан со строками и явно находится в нативной библиотеке. 
Сдампим память процесса и пройдёмся по ней strings c помощью fridump


![Снимок экрана 2025-03-13 в 19.54.52](https://hackmd.io/_uploads/HkijS8e3yx.png)

Дальше просто откроем файл со строками из дампа и грепнем
![Снимок экрана 2025-03-13 в 19.57.33](https://hackmd.io/_uploads/HknHLIe3kg.png)
Флаг найден! Ждем сертификат от ребят о прохождении лабы!