Android: відстеження смартфона без GPS, злом пакувальника Qihoo і модифікація додатків в Рантайм

  1. Зміст статті Сьогодні у випуску: відстеження смартфона з вимкненим GPS, злом просунутого пакувальника...
  2. Почитати
  3. Відстеження смартфона з вимкненим GPS
  4. Пентест для новачків
  5. Аналіз додатки, захищеного пакувальником Qihoo
  6. Відновлення історії листування WhatsApp
  7. Рантайм-модифікація додатків
  8. Кастомний Project Treble
  9. розробнику
  10. Поради щодо використання шифрування
  11. Розпізнавання пальців, обличчя і голоси
  12. Вивчаємо Android KTX
  13. Автоматизація отримання скріншотів
  14. бібліотеки

Зміст статті

Сьогодні у випуску: відстеження смартфона з вимкненим GPS, злом просунутого пакувальника Qihoo, відновлення історії листування та віддалених повідомлень WhatsApp, модифікація додатків в Рантайм. А також: поради по використанню шифрування в своїх додатках, огляд бібліотеки Android KTX, способи розпізнавання відбитків, обличчя і голоси і, звичайно ж, добірка свіжих бібліотек.

Інструменти

  • StaCoAn - інструмент для автоматизованого статичного аналізу програм для Android; шукає захардкоженние API-ключі, API-ендпойнти, ключі шифрування і помилки;
  • Quiet - Чи не нова, але досить цікава бібліотека для передачі даних (протокол TCP) за допомогою звуку;
  • Electra - jailbreak для iOS 11.0-11.1.2;
  • LibScout - інструмент для пошуку вразливих версій бібліотек в додатку (може працювати з обфусцірованним кодом).

Почитати

Відстеження смартфона з вимкненим GPS

PinMe: Tracking a Smartphone User around the World - дослідження, присвячене відстеження переміщень смартфона (і його власника) без використання GPS, геолокації з базових станцій і точок доступу Wi-Fi. Замість цього дослідники з Інституту інженерів електротехніки та електроніки використовували акселерометр, гіроскоп, барометр і компас, які дозволили відстежити маршрут переміщень з точністю GPS.

Суть методу в наступному. На смартфон встановлюється додаток PinMe. У момент запуску воно отримує інформацію про останньому IP-адресу смартфону і таким чином визначає його приблизне місце розташування. Потім починається збір інформації з датчиків, який дозволяє визначити швидкість руху, періодичність зупинок і висоту над рівнем моря. Ця інформація використовується для визначення способу пересування (ходьба, автомобіль, громадський транспорт, літак) за допомогою нейромережі. Інша нейросеть використовується для визначення точного місця розташування за непрямими ознаками, таким як висота, розклад рейсів і інші дані.

Результат виявився досить вражаючим. Дослідникам вдалося домогтися точності, порівнянної з GPS. Однак є і обмеження: PinMe не працюватиме в лісі та інших місцях, де немає доріг, він погано працює в плоскій негорістой місцевості зі схожою топологією вулиць (наприклад, Манхеттен з його квадратними вулицями). Також PinMe не спрацює, якщо на смартфоні активований Tor-тунель (IP-адреса відправної точки буде неправильним).

Також PinMe не спрацює, якщо на смартфоні активований Tor-тунель (IP-адреса відправної точки буде неправильним)

Чорним відзначений маршрут, побудований з використанням GPS, жовтим і зеленим - за допомогою PinMe

Пентест для новачків

A Virgil's Guide to Pentest: Operation Android - основи пентеста для початківців. Стаття досить сумбурно написана, але з неї можна винести багато цікавих речей. наприклад:

  • два головні інструменти - jadx-gui (декомпілятор) і apktool (дозволяє розібрати APK і зібрати його назад);
  • найпростіший спосіб обійти SSL pinning - Android-SSL-TrustKiller ;
  • найзручніший інструмент автоматичного пошуку вразливостей - Drozer ;
  • значення ro.build.version.release, ro.product.model і ro.product.brand в емуляторі варто змінити. Деякі додатки використовують їх для ідентифікації емуліруемой середовища;
  • якщо в емуляторі є root-доступ і додаток відмовляється працювати, просто перейменують файли /system/app/SuperUser.apk (SuperSU.apk) і / system / bin / su.

Аналіз додатки, захищеного пакувальником Qihoo

Dissecting mobile native code packers. A case study - аналіз додатки, захищеного за допомогою пакувальника Qihoo. У статті наведено величезна кількість деталей, зупинимося на деяких з них.

  1. DEX-файл програми важить більше чотирьох мегабайт, однак при його аналізі стає ясно, що там просто немає стільки коду: все, що він робить, - це передає управління нативной бібліотеці. Так відбувається тому, що більшу частину файлу займає дописаний в його кінець зашифрований фрагмент.
  2. Завантажена нативная бібліотека виконує кілька перевірок на те, чи не працює вона під отладчиком, а потім розшифровує і завантажує в пам'ять другу бібліотеку. Крім перевірок на присутність відладчика, бібліотека також використовує інший метод захисту - віртуальну машину, яка виконує байт-код замість нативного коду ARM.
  3. Друга нативная бібліотека - це завантажувач DEX-файлів. Він витягує з кінця оригінального DEX-файлу зашифрований фрагмент, розшифровує його, готує рантайм для виконання, а потім передає йому управління.

Використовувані техніки захисту від дебаггінга:

  • читання файлу / proc / self / status і перевірка, що значення TracerPid дорівнює нулю;
  • читання бінарного файлу линкера (/ system / bin / linker) і перевірка першого байта функції rtld_db_activity (якщо відладчик не підключений - ця функція буде порожній заглушкою);
  • моніторинг файлу / proc / PID / cmdline всіх процесів (до яких є доступ) в пошуках певних рядків (android_server, gdb, gdbserver та інших);
  • перевірка файлу / proc / net / tcp на утримання рядки 00000000: 23946 (це означає, що до пристрою підключений IDA);
  • моніторинг файлів / proc / self / mem і / proc / self / pagemap, щоб дізнатися, що ніяке інше застосування не прочитало їх.

Відновлення історії листування WhatsApp

WhatsApp Forensics: Decryption of Encrypted Databases and Extraction of Deleted Messages on Non-Rooted Android Devices - проста, але в ряді моментів цікава стаття про те, як отримати історію листування WhatsApp з Android-смартфона. Три основні методи:

  1. Зробити бекап листування за допомогою самого WhatsApp. Бекап буде зашифрований, і автори не розповідають, як витягти ключ, зате обіцяють випустити фірмову утиліту для автоматичного дампа бекапа.
  2. Отримати права root і скопіювати базу даних WhatsApp з приватного каталогу (файл msgstore.db). Вона не зашифрована, тому її легко переглянути за допомогою будь-якого SQLite-вьюера.
  3. Зробити бекап засобами Android. Деякі виробники додають в свої смартфони функцію резервної копії, і багато хто з них навіть не дбають про те, щоб його зашифрувати. На прикладі смартфона компанії Oppo автори роблять бекап даних встановлених додатків, а потім без всяких проблем беруть із нього дані WhatsApp (включаючи msgstore.db).

Як бонус автори розповідають, як в ряді випадків можна відновити видалені повідомлення. Справа в тому, що перед записом повідомлення в базу даних WhatsApp спочатку пише його в кеш (файл msgstore.db-wal), а потім переносить в msgstore.db. При видаленні повідомлення воно буде видалено з основної бази, але іноді може залишитися в кеші, звідки його легко витягти.

При видаленні повідомлення воно буде видалено з основної бази, але іноді може залишитися в кеші, звідки його легко витягти

Віддалене повідомлення, що залишився в кеші

Рантайм-модифікація додатків

Mobile Application Hacking Diary Ep.2 - стаття з описом технік, змінюють поведінку додатків Android і iOS, на прикладі обходу перевірок наявності прав root на пристрої. Отже, три різні техніки:

  1. Зміна коду. Декомпіліруем додаток за допомогою Bytecode Viewer (Автор рекомендує використовувати саме його через наявність відразу кількох двигунів декомпіляцію в комплекті). Знаходимо потрібну ділянку коду, дізассембліруем додаток за допомогою apktool, знаходимо ту саму ділянку коду і змінюємо повертається їм значення (наприклад, true на false). Збираємо назад і встановлюємо.
  2. Зміна коду на льоту за допомогою відладчика. Розпаковуємо програму за допомогою apktool, змінюємо значення поля android: debuggable в AndroidManifest.xml на true, запаковуємо назад. Підключаємося до додатка за допомогою відладчика AndBug і виконуємо трасування в пошуках потрібного нам методу. Потім підключаємося до додатка за допомогою jdb, ставимо брейк-пойнт на потрібний метод і змінюємо повертається їм значення.
  3. Автоматична зміна коду на льоту за допомогою Frida. інструмент Frida дозволяє виконати трасування і впровадити свій код в будь-який додаток на смартфоні. У прикладі автор використовує скрипт для пошуку потрібного методу, а потім наводить приклад скрипта, який знаходить цей метод і змінює повертається їм значення. Однак в більшості випадків тобі навіть не доведеться самому писати скрипти. У репозиторії Frida CodeShare можна знайти безліч вже готових.

Кастомний Project Treble

Developer Brings Full Project Treble Compatibility to the Xiaomi Redmi Note 4 - цікава стаття про те, як розробнику з форумів XDA Developers вдалося перенести фреймворк Treble на Xiaomi Redmi Note 4.

Нагадаю, що ініціатива Treble передбачає повністю реорганізувати низькорівневі компоненти Android, відповідальні за підтримку заліза. Починаючи з восьмої версії Android розділений на дві частини, які розташовуються в різних розділах: vendor і system. Перший містить виключно код, що залежить від заліза: драйвери та компоненти HAL. Другий - це сам Android. Між собою ці частини зв'язуються за допомогою повідомлень і ніколи не викликають один одного напряму.

Ідея тут в тому, що нові версії ОС, випущені після Android 8, будуть повністю сумісні з vendor-компонентами від попередніх версій, таким чином сам процес портування прошивки істотно спроститься (насправді Google навіть випускає збірку Android під назвою Generic System Image, її можна прошити на будь-який смартфон з підтримкою Treble, і вона запрацює). Проблема в тому, що вимога підтримувати Treble поширюється тільки на смартфони, спочатку працюють на Android 8, і її навряд чи отримають пристрої, випущені з Android 6 або 7 і лише потім оновлені до восьмої версії.

Розробник abhishek987 обійшов цю проблему. Він портував компоненти Treble на Xiaomi Redmi Note 4, використавши розділ cust, потрібний MIUI для зберігання інформації про пристрій, як розділу vendor.

розробнику

Поради щодо використання шифрування

Basic Android Encryption Do's and Don'ts - стаття з набором швидких порад про те, що треба і що не треба робити при використанні шифрування в Android. Коротка витримка:

Не використовуй AES в режимі ECB. За замовчуванням Android (і Java) при шифруванні по алгоритму AES застосовує режим ECB. Проблема режиму ECB в тому, що він може розкрити подробиці зашифрованої інформації. Замість нього слід використовувати режими CBC і GCM:

// Як треба робити Cipher.getInstance ( "AES / GCM / NOPADDING"); // Як не треба робити Cipher.getInstance ( "AES");

Завжди використовуй випадковий IV:

// Як треба робити SecureRandom secureRandom = new SecureRandom (); byte [] iv = new byte [IV_LENGTH]; secureRandom.nextBytes (iv); myCipher.init (Cipher.ENCRYPT_MODE, key, new IvParameterSpec (iv)); // Як не треба робити myCipher.init (Cipher.ENCRYPT_MODE, key); byte [] iv = myCipher.getIV ();

Заповнюй важливі масиви нулями після використання. Ти можеш забути очистити масив, що містить ключ, і зломщик скористається цим, щоб витягти ключ безпосередньо з оперативної пам'яті:

byte [] decrypt (byte [] dataToDecrypt, byte [] secretKey) {// Розшифровуємо дані ... // Очищаємо ключ Arrays.fill (secretKey, (byte) 0); return decryptedData; }

Розпізнавання пальців, обличчя і голоси

How to secure your Android application? - стаття з трохи недоречним назвою про те, як використовувати розпізнавання пальців, обличчя і голоси в своїх додатках. Ніяких одкровень, все просто:

  • Відбитки пальців. Всупереч розхожій думці, додаток, що запитує твій відбиток пальця, насправді ніколи його не побачить і не зможе відправити на віддалений сервер. Відбитки пальців (у вигляді математичної моделі) зберігаються в security-співпроцесор (TTE), отримати доступ до якого може тільки ОС. Розробнику додатків залишається тільки зробити запит відбитків і отримати відповідь (в колбеке) про збіг або розбіжності:

val fmanager = FingerprintManagerCompat.from (getApplicationContext ()) fmanager.authenticate (cryptoObject, 0, cancellationSignal, authenticationCallback, null)

  • Розпізнавання осіб. Тут у розробника два шляхи: або використовувати бібліотеку OpenCV , Призначену для реалтайм-розпізнавання об'єктів на зображенні (увага: це не нейросеть), або скористатися послугами Microsoft і Google . Проблема останнього варіанту в тому, що сервіси MS і Google платні і вимагають постійного підключення до мережі.

  • Розпізнавання голосу. Три спостереження: 1) Google Assistant вміє визначати людини по голосу; 2) в ранніх версіях Android 5.0 була функція Trusted Voice, яка дозволяла розблокувати смартфон голосом; 3) Google не надає стороннім розробникам ніяких API для розпізнавання голосу. Фактично варіант тільки один: платні сервіси MS .

Вивчаємо Android KTX

Exploring KTX for Android ( переклад ) - гарне введення в бібліотеку Android KTX , Яку 5 лютого анонсувала компанія Google. Android KTX являє собою набір функцій і класів, здатних істотно спростити розробку для Android на Kotlin. Ось лише деякі (не буду приховувати, найбільш соковиті) приклади:

// Модифікація налаштувань sharedPreferences.edit {putBoolean (key, value)} // Робота з часом і датами val day = DayOfWeek.FRIDAY.asInt () val (seconds, nanoseconds) = Instant.now () val (hour, minute, second, nanosecond) = LocalTime.now () val (years, month, days) = Period.ofDays (2) // Створення бандлів val bundle = bundleOf ( "some_key" to 12, "another_key" to 15) // Робота з AtomicFile val fileBytes = atomicFile.readBytes () val text = atomicFile.readText (charset = Charset.defaultCharset ()) atomicFile.writeBytes (byteArrayOf ()) atomicFile.writeText ( "some string", charset = Charset.defaultCharset ()) / / SpannableString val builder = SpannableStringBuilder (urlString) .bold {italic {underline {append ( "hi there")}}} // Трансформація рядки в URI val uri = urlString.toUri () // Робота з Drawable і Bitmap val bitmap = drawable.toBitmap (width = someWidth, height = someHeight, config = bitMapConfig) val bitmap = someBitmap.scale (width, height, filter = true) // Операції над об'єктом View view.postDelayed (delayInMillis = 200) {// some action} view.postOnAnimationDelayed (delayInMillis = 200) {// some action} view. setPadding (16) val bitmap = view.toBitmap (config = bitmapConfig) // ViewGroup viewGroup.forEach {doSomethingWithChild (it)} val view = viewGroup [0]

Автоматизація отримання скріншотів

Automate your app screenshots - стаття про те, як автоматизувати отримання «чистих» скріншотів для Google Play за допомогою утиліти screengrab і скрипта, який переводить смартфон в деморежім, що дозволяє в тому числі налаштувати рядок стану. Сам скрипт можна скачати тут , А ось найсмачніша частина - включення / відключення деморежимі:

function start_clean_status_bar {# Включаємо деморежім adb shell settings put global sysui_demo_allowed 1 # Показуємо година 12:00 adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1200 # Показуємо іконки мобільного і Wi-Fi-мереж без додаткових значків adb shell am broadcast -a com.android.systemui.demo -e command network -e mobile show -e level 4 -e datatype false adb shell am broadcast -a com.android.systemui.demo -e command network - e wifi show -e level 4 -e fully true # Приховуємо всі повідомлення adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false # Показуємо повний заряд батареї adb shell am broadcast -a com.android .systemui.demo -e command battery -e plugged false -e level 100} function stop_clean_status_bar {adb shell am broadcast -a com.android.systemui.demo -e command e xit}

бібліотеки

  • backgroundable-android - список механізмів енергозбереження різних смартфонів і ІНТЕНТ, що дозволяють відкрити їх налаштування (щоб користувач міг додати додаток до списку виключень);
  • kotlin-android-examples - безліч різних прикладів коду на Kotlin;
  • RichUtilsKt - набір утиліт на всі випадки життя (діалогові вікна, робота з зображеннями, файлами, буфером обміну і багато іншого);
  • AwesomeBar - гарний анімований ActionBar;
  • Fluid Slider - ефектний анімований слайдер;
  • Sneaker - бібліотека для показу повідомлень у верхній частині екрану;
  • ColorPickerPreference - діалог вибору кольору;
  • Videoapparat - проста у використанні бібліотека для роботи з відеокамерою;
  • ScrollingPagerIndicator - індикатор горизонтальної прокрутки у вигляді точок;
  • Android-Goldfinger - проста у використанні бібліотека для аутентифікації по відбитку пальця;
  • KFormMaster - порт бібліотеки для створення форм на Kotlin;
  • Prefekt - зручна у використанні бібліотека для роботи SharedPreferences з Kotlin;
  • Scripto - бібліотека для обміну повідомленнями між Java і JavaScript, який виконується всередині WebView;
  • Light - альтернативна реалізація снекбара (snackbar) з можливістю кастомізації.

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: