[Android] Перехват трафика с помощью прокси-сервера

Представим, что перед нами стоит задача проанализировать трафик, который генерирует тестируемое приложение в Android. Большинство современных приложений, ориентированных на клиент-серверное взаимодействие, использует  протокол HTTPS, поэтому без расшифровки такого траффика ничего понятно не будет. Однако есть и такие приложения, которые используют HTTP, и вот здесь уже можно будет многое чего интересного узнать.

Для перехвата трафика можно использовать прокси-сервер (Charles, Fiddler, Burp Suite и др.). В данной заметке я приведу пример по использованию Burp.

Переходим на вкладку «Proxy» -> «Options», в разделе «Proxy Listeners» жмем кнопку «Edit», и в опции «Bind to address» выбираем «All interfaces». Все, Burp настроен и теперь лишь осталось запустить Android-эмулятор с использованием прокси-сервера:

emulator -avd <avd_name> -http-proxy http://YOUR_COMPUTER_IP:8080

Теперь, после запуска тестируемого приложения, в Burp на вкладке «History» будут отображаться все сетевые активности.

К сожалению, указать прокси-сервер на реальном устройстве под управлением Android без использования root-доступа весьма затруднительно, хотя в некоторых вендорских моделях устройств эта возможность присутствует изначально. В таком случае можно попросить разработчика собрать приложение с явным указанием прокси:

HttpHost httpproxy = new HttpHost("YOUR_COMPUTER_IP", 8080, "http");
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy);

Про неполную поддержку юникодных шрифтов в Android

На днях, тестирую программу, обнаружил, что на HTC EVO 3D не отображаются символы некоторых экзотических языков, к примеру, таких как лаосский. Выяснилось, что это проблема самого Android’а, который по непонятным причинам по умолчанию не содержит шрифтов, которые бы полностью поддерживали Unicode. Хотя, производителя конкретного устройства при желании могут сами оснастить систему поддержкой более «продвинутых» шрифтов. Либо же это можно сделать самостоятельно, но для этого нужно иметь рут-права.

Материал по теме.

Could not open camera 2: -1

Сегодня нужно было кое-что сфотографировать. Достаю HTC EVO 3D, нажимаю на иконку фотокамеры — дефолтное приложение открывается и тут же закрывается. Повторяю еще раз — безрезультатно. Пытаюсь открыть стороннее приложение Camera FV-5 — пишет, что проблема с драйвером камеры, нужно перезагрузить устройство. Смотрю логи:

09-03 10:49:23.944: E/QualcommCameraHardware3D(117): ERR!! camera is opened and cameraId didn't match! now 0 new 2
09-03 10:49:23.944: E/CameraService(117): Could not open camera 2: -1
09-03 10:49:23.944: E/CameraThread(10961): open camera failed
09-03 10:49:23.944: E/CameraThread(10961): java.lang.RuntimeException: Fail to connect to camera service
09-03 10:49:23.944: E/CameraThread(10961): at android.hardware.Camera.native_setup(Native Method)
09-03 10:49:23.944: E/CameraThread(10961): at android.hardware.Camera.(Camera.java:307)
09-03 10:49:23.944: E/CameraThread(10961): at android.hardware.Camera.open(Camera.java:268)
09-03 10:49:23.944: E/CameraThread(10961): at com.android.camera.CameraThread.startPreview(CameraThread.java:2185)
09-03 10:49:23.944: E/CameraThread(10961): at com.android.camera.CameraThread$MainHandler.handleMessage(CameraThread.java:627)
09-03 10:49:23.944: E/CameraThread(10961): at android.os.Handler.dispatchMessage(Handler.java:99)
09-03 10:49:23.944: E/CameraThread(10961): at android.os.Looper.loop(Looper.java:154)
09-03 10:49:23.944: E/CameraThread(10961): at com.android.camera.CameraThread.run(CameraThread.java:3227)
09-03 10:49:24.204: E/(10961): Cannot handle asynchronous message because of current state : 4
09-03 10:49:24.224: E/ActivityThread(10961): Activity com.android.camera.CameraEntry has leaked IntentReceiver com.android.camera.HTCCamera$30@40dd5190 that was originally registered here. Are you missing a call to unregisterReceiver()?

Выключение и последующее включение аппарата с режиме Fast Boot не помогло. Пришлось отключать Fast Boot и перезапускать телефон еще раз. Помогло.

Еще пару багов в iOS 7 Beta 6

Первый баг: анимированные обои расплющило по ширине.

Второй баг: для приложения Mail отсутствует бэкграунд иконки уведомления.

Еще пару багов в iOS 7 Beta 6Еще пару багов в iOS 7 Beta 6

[iOS] Приложения для мониторинга системы

Для того, чтобы узнать основную техническую информацию об iPhone / iPad, необязательно делать джейлбрейк, и лезть в консоль. В App Store есть достаточное количество бесплатных приложений, которые готовы раскрыть такую информацию. К примеру, DeviceStats (автор Dennis Stücken):

  • Показывает уровень заряда батареи (кстати, значение расходится в меньшую сторону с тем, что показывает сама iOS)
  • Размер занятого / свободного дискового пространства
  • Параметры сотовой и Wi-Fi сети
  • Размер памяти (еще одна странность — приложение показывает Total = 632 МБ, в то время как у моего iPad 3 размер памяти составляет 1024 МБ)
  • Список текущих процессов

Скорее всего выше перечисленные проблемы связаны с тем, что приложение не поддерживает iOS 7, т.к. последняя дата релиза была  декабре прошлого года.

DeviceStats

Более интересное приложение — это System Information Lite (отличие от платной версии — показ рекламного баннера), которое находится в стадии активной разработки. По мимо всего прочего, умеет:

  • Счетчики обновляются в режиме реального времени
  • Отображение Boot Time и Uptime устройства
  • Имеется возможность скопировать все представленную информацию (или же сразу отослать по почте)

System Information Lite

Кстати, размер оперативной памяти, отображаемый этим приложением, равняется 987 МБ, что больше похоже на правду. А вот уровень заряда батареи также отличается в меньшую сторону.

Более навороченное приложение — Lirum Device Info Lite, представляющее, наверно, наиболее полную информацию об устройстве, которую только можно ожидать. Из особенностей:

  • Показ номера модели устройства и аппаратной начинки
  • Подробное описание размера дискового пространства, вплоть до указания точек монтирования
  • Подробная информация об экране и графическом ядре (GPU)
  • Использование процессора отображается в виде графика в реальном времени
  • Использование оперативной памяти отображается в виде графика в реальном времени + здесь же показываются процессы с указанием PID и приоритета
  • Подробная информация о камере устройства
  • Подробная информация о сенсорах устройства (гироскоп, акселерометр, цифровой компас и т.д.)

Из особенностей платной версии выделяется возможность просматривать системные логи и активные соединения.

Lirum Device Info Lite

[Android] Снятие скриншотов с экрана

Для записи видео с экрана устройства, работающего под управлением ОС Android есть не так уж и много действительно нормальных средств. Часть из них — это приложения, которые нужно устанавливать непосредственно на устройство, но они в большинстве свое требуют рут-права. Также еще есть приложение «Screencast Video Recorder«, не требующее рутового девайса, но оно не поддерживает платформу Tegra, поэтому проверить работоспособность этой программы на HTC EVO 3D не представляется возможным.

Также я нашел утилиту Ashot, написанную на Java, которая будучи запущенной на компьютере, позволяет записывать скринкаст, поступающий с устройства, правда, сохраняется все это дело не в привычном видеоформате, а в виде отдельных кадровых изображений в формате PNG (позднее их можно будет смонтировать в видеоряд).

Чтобы начать работать с Ashot, нужно:

  • Скачать — http://sourceforge.net/projects/ashot/
  • Папку «AndroidScreenCapture» можно скопировать, к примеру, в директорию, где установлен AndroidSDK
  • Из папки «platform-tools» скопировать файл «adb» в папку «tools» (это трюк для Mac OS. Для Windows нужно копировать еще парочку файлов)
  • Запустить AShot-1.1.jar и указать местоположение AndroidSDK

Есть устройство уже подключено к компьютеру, то программа сразу же отобразит его экран:

ashot

[iOS] Крах Safari при попытке открыть Google Translate

Чтобы добиться аварийного завершения работы браузера Safari в iOS 7 beta, можно зайти на сайт translate.google.com (по умолчанию откроется мобильная версия сайта), и нажать на ссылку «Полная версия», после чего браузер рухнет.

Актуально для iOS 7 beta 5 и 6 (возможно, проблема воспроизводилась и на более ранних версиях беты).

Fast Boot от HTC — после включения часы показывают старое время

Я уже делился своими впечатлениями об HTC EVO 3D. В этом телефоне, как и во многих других от HTC, есть интересная фишка, позволяющая «быстро» включать телефон (технология называется «Fast Boot»). По сути, когда вы выключаете устройство, оно переходит в спящий режим, а процесс включения (в данном случае пробуждения) занимает не более десяти секунд. Это очень хороший маркетинговый ход, да и вообще, такое быстрое включение — вещь удобная, хотя и потребляет, наверно, какой-то % использования аккумулятора.

Так вот, после «быстрого» включения заметил особенность, связанную с системным временем — экран блокировки все равно продолжает показывать то время, когда аппарат был выключен (хотя в таскбаре часы показывают правильное время). Если после этого разблокировать экран, а затем вновь заблокировать, то часы уже начинают показывать корректное время. А бывает и наоборот: экран блокировки показывает правильное время, а таскбар — то, когда аппарат был выключен.

Nokia 5800 XM -> HTC EVO 3D

Решил некоторое время походить с рабочим телефоном HTC EVO 3D. История его интересна: во-первых, данная модель является сборкой для разработчиков (на корпусе даже красуется соответствующий номер); во-вторых, его несколько раз на длительное пользование брал наш начальник, последнее из которых оказалось для телефона весьма болезненным — был частично разбит корпус, а на экране красуются две трещины (правда, матрица оказалась в порядке). Тем не менее, аппарат в рабочем состоянии (если брать во внимание тот факт, что в нижней области экрана перестал работать сенсор), и я решил им тоже некоторое время попользоваться (хуже ему уже точно не станет).

HTC EVO 3D хоть и был выпущен два года назад, но до сих пор представляет из себя достойное устройство с весьма неплохой аппаратной начинкой с двухядерным процессором 1,2 ГГц и 1 ГБ оперативной памяти. Работает телефон под управлением Android 4.0.3. Ну и, конечно, его главная фича — это автостереоскопический экран и возможность съемки стереоизображений, благодаря наличию двух камер на борту. Минусом считаю слабую батарейку на 1730 mAh, которая ели-ели держит один день.

До этого момента я использовал Android-устройства только в качестве тестирования разрабатываемой в нашей фирме приложения. И теперь вот настало время использовать телефон по прямому назначению. Импорт контактов из моей Nokia 5800 XM не составил труда — в 5800 имеется возможность передачи контактов на другое устройство через Bluetooth, чем я и воспользовался. SMS-сообщения, правда, я переносить не стал, т.к. это требует дополнительных телодвижений. В новых версиях Android’а есть замечательная опция «Mobile Network», отключение которой позволяет запретить различным программам и службам использовать Интернет, если телефон использует только сотовую связь (актуально, если у вас нет подключенных тарифных опций по использованию Интернета, к примеру, таких как «Бит» от МТС). Звук динамика при разговоре четкий и громкий, микрофон тоже нареканий не вызывает. Вообще, функции звонков, адресной книги и передачи СМС-сообщений в Android’е сделаны неплохо и уж точно не хуже, чем в моей Nokia 5800. Теперь хотелось бы сравнить эти функции с теми, которые присутствуют в iOS. Но это, скорее всего произойдет позже, когда я куплю iPhone.