# Как я 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) Флаг найден! Ждем сертификат от ребят о прохождении лабы!