Remote wipe на android і exchange activesync

Одного разу наш адміністратор Microsoft Exchange згадав про функціональність повного очищення будь-якого пристрою на свій розсуд (будь то iPhone, або девайс на основі BlackBerry або Android), які отримують пошту по протоколу Exchange ActiveSync. Девайс рапортує сервера, доступний йому функціонал wipe, а адміністратор може заборонити передачу пошти на пристрої, які не підтримують wipe.

Remote wipe на android і exchange activesync

Зацікавившись, я вирішив вивчити це питання і, по можливості, відключити шкідливий функціонал поштового клієнта.

Додаток Settings.apk. що входить до складу open-source пакета Android, викликає його в такий спосіб:

Від несанкціонованого виклику він нібито захищений

Але, як ми побачимо нижче, звичайна програма може обійти цей захист.

Пошукавши, інші способи запуску очищення, на Stackoverflow я знайшов рецепт, як звичайна програма (без спеціальних permissions) може попросити Settings.apk показати сторінку управління очищенням, де користувач сам натисне «Очистити» на сторінці довіреної програми.

Поки все під контролем користувача ...

Далі я декомпілювати всі програми зі стандартної прошивки Gingerbread 2.42 (HTC Sense) для Desire Z, і пошукав в исходниках звернення до android.intent.action.MASTER_CLEAR, або до com.android.settings.MasterClear.

Всього таких додатки знайшлося чотири:

Перші два - функціонал блокування загубленого пристрою від онлайн-сервісів Google і HTC, далі - очищення девайса за запитом користувача з сторінки налаштувань і винуватець розслідування, поштовий клієнт.

Поштовик викликає очищення таким кодом:

тобто, від попереднього прикладу він пішов трохи далі і викликає не activity з кнопкою, яку може натиснути користувач, а activity, яка запускається після натискання кнопки.

У мене є підозра, що для виконання цього коду не потрібні особливі дозволи (не можу перевірити, тому що не встановлені ні java-IDE, ні Android SDK).

На закінчення опишу кілька граблів, які доставили мені багато задоволення в їх подоланні. Для андроїд-розробників це елементарні речі, але для початківців хакерів вони не очевидні.

1. Підпис пересобран додатки.

Будь-яке Android-додаток має бути підписана особистим сертифікатом розробника, інакше воно не запуститься. Безкоштовний сертифікат можна отримати з програми openssl. якщо попросити її про це так:

В результаті ми отримаємо жадані certificate.pem. key.pem і key.pk8. якими підпишемо пересобран Mail.apk за допомогою утиліти signapk.jar:

У кожної програми є кеш JIT-компіляції, щоб не проводити компіляцію кожен запуск. При установці apk звичайним способом кеш очищується, але при копіюванні додатки (в системний розділ / system / app) його потрібно очистити самостійно:

3. Глюки apktool

Утиліта apktool. якої я проводив дизасемблювання і перезбирання додатки, наполегливо створювала непрацездатний файл. Усередині apk знаходяться ресурси, зібрані в бінарний файл resources.arsc (наприклад, xml-ресурси в цьому файлі переведені в бінарний вигляд, швидше за все для зручної навігації по xml-дереву) і код, зібраний в classes.dex. Оскільки правити мені треба тільки код, при декомпіляції я задав опцію -r (Do not decode resources) і після компіляції виправленої тельбуха назад в apk-файл він нарешті-то запустився.