Все новости с меткой: android


Для начала нужно установить программку на свой телефон - Packet Capture. Программа  является прокси-сервером, в котором для мониторинг SSL-траффика используется аттака "Man in the Middle". В программу добавляется подставной сертификат, который для клиента считается доверенным. А сам прокси-сервер устанавливает две независимсые SSL-сессии, анализируя дешифрованные данные. А рут не нужен потому, что приложуха использует VPNService, доступный с Android 4.0. С помощью такого прокси можно анализировать работу различных REST API, которые ходят по https протоколу. Например, мне понадобилось починить музыкальное API ВКонтакте для VkAudioSaver.

Packet Capture VK API

Пожалуй, самым трудоемким шагом во всей этой истории будет генерация подставного сертификата. Для этого используются утилита openssl.


openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.crt

sudo openssl pkcs12 -export -out cert.pfx -inkey cert.key -in cert.crt -certfile cert.crt -name "cert" -caname "cert"

Далее вводим пароль нового сертификата, получившийся файл cert.pfx. Его синхронизируем с устройством и затем в настройках программы добавляем сгенерированный самоподписанный сертификат. В диалговом окне импорта в поле алиас пишем "cert" и пароль. Затем добавляем сертификат в "Trusted credentials". Запускаем сниффинг запросов.

Доне.

Подробнее




Понадобилось, значит, мне выцепить User-Agent официальной приложухи ВКонтакте для Андроид. Выяснить-то удалось, формируется он как-то так:

USER_AGENT = String.format(Locale.US, "VKAndroidApp/%s-%d (Android %s; SDK %d; %s; %s %s; %s)", new Object[] { PackageInfo.versionName, PackageInfo.versionCode, Build.VERSION.RELEASE, Integer.valueOf(Build.VERSION.SDK_INT), Build.CPU_ABI, Build.MANUFACTURER, Build.MODEL, System.getProperty("user.language") });

Т.е. примерно такая строка - "VKAndroidApp/4.38-849 (Android 6.0; SDK 23; x86; Google Nexus 5X; ru)

Но, почитав код ниже, я неслабо так поугарал. Очень веселый код находится в файле com.vkontakte.android.api.ApiController.java. Подробности под катом.


Где смеяться:

  1. Я, конечно не имею по рукой гит блейма, но глядя на строку #5 не сложно догадаться об авторе писанного кода: https://vk.com/id25719408
  2. Строка #6, for (boolean bool = true;; bool = false) - это что блеать??
  3. Зачем вообще нужен цикл в строке #6, если скоуп все равно заканчивается return'ом в строке #35??
  4. Какую смысловую нагрузку несут конструкции str1 = str2 в строках ##15, 19, 21, 23
  5. Если вдруг словили эксепшн в строке #28 - то переходим в бесконечный цикл!!!
  6. Зачем нужна переменная j в строке #22 - хрен знает
  7. Отличное имя для константы FUCKING_AD_USER_AGENT = String.format(Locale.US, "VKApp/%s (Linux; U; Android %s; %s Build/%s)", new Object[] { str1, Build.VERSION.RELEASE, Build.MODEL, Build.ID });
Подробнее




Первое, что начинает коробить после запуска Android Studio на Ubuntu 16.04 - это ужасные нечитаемые шрифты. Это проблема будет в любом приложении, основанном на Swing.

Даже установка OracleJDK вместо OpenJDK не решает проблему. Точно так же пробовал играться с флагами при запуске, искать фонт-патчи для джавы. В итоге нашлось классное решение - TuxJDK. Это по сути OpenJDK, содержащий серию патчей для улучшения UX для Java-based приложений в Linux. В итоге после сборки по инструкции на странице readme.md c гитхаба все выглядит куда приятнее с классическим шрифтом Ubuntu

 

 


Если кому-то влом все собирать и устанавливать зависимости для сборки TuxJDK - можете взять у меня готовый. Либо сделать вот так:

wget http://bingosoft.info/filez/tuxjdk-8u66-b17.tar.gz
sudo tar zxvf tuxjdk-8u66-b17.tar.gz -C /usr/lib/jvm

После этого уже в самом скрипте для запуска Android Studio studio.sh добавьте константу где-нибудь повыше.

JAVA_HOME=/usr/lib/jvm/tuxjdk-8u66-b17/

Ну и остается наслаждайться читаемым интерфейсом после перезапуска студии :)

Подробнее