Дисклеймер: описанная ниже дыра исправлена. На новых версиях App World она не работает. У меня нет времени заниматься поддержкой. Вы можете сами поэкспериментировать и поискать альтернативный вариант.
Итак, стало известно, что BlackBerry Messenger работает в России у Билайна и МТС, если у вас подключен BIS. Но BlackBerry App World запрещает скачивание приложения в России:
Такая несправедливость не остается безнаказанной. Я сделал небольшой реверс-инжиниринг и написал приложение, которое обходит это ограничение.
Вот так выглядит экран на устройстве в России, при попытке набрать «blackberry messenger» в строке поиска:
Как видим, искомый элемент не найден.
Далее ставим программу Router (исходники, ссылка для загрузки OTA). В настройках приложения разрешаем ему всё. Запускаем ее, на экране должно быть:
appworld.blackberry.com OK
Если там ошибка ControlledAccessException, то еще раз проверьте, что все разрешения приложению Router даны.
Не надо выходить из Router, а просто нажать красную кнопку. Router работает в фоне.
Запускаем App World и ищем «blackberry messenger»:
Ура! Можно скачать и запустить. BBM показывает, что доступен, но сообщения не ходят, если у вас нет BIS.
Таким образом, я установил BBM Жене и себе на 8520 и 9900. Дело осталось за малым: подключить BIS и насладиться общением лучшего в мире мобильного чата.
А теперь немного технических деталей.
Я использовал SmartSnif, чтобы получить URL, на которые обращается симулятор BlackBerry, когда запущен BlackBerry App World. Выяснилось, что все они выглядят примерно так:
http://appworld.blackberry.com/ClientAPI/list/13?os=7.0.0&model=9900&clientver=3.0&countryid=182&carrierid=356¤tmcc=250
MCC 250 — это мобильный код России.
Далее я написал приложение Router, которое перехватывает все запросы на домен appworld.blackberry.com и подменяет currentmcc=250 на currentmcc=302. 302 — это Канада, на всякий случай. Я даже не экспериментировал с другими параметрами. Неожиданно всё просто заработало.
Вообще я не планировал это делать, и в мыслях у меня была другая идея: обойти ограничение приложения Twitter для BlackBerry, которое работает только через BIS и Wi-Fi. Но там защита оказалась чуть хитрее. Перехватчик работает на уровне системы, то есть мы даже знаем, какого типа соединение (Wi-Fi, BES, BIS, Carrier APN, WAP) приложения третьих партий пытаются установить. По идее, если мы видим, что Twitter ломится на Wi-Fi по какому-либо URL, то нужно просто вернуть новое соединение на тот же URL, но не по Wi-Fi, а по Carrier APN. Говоря проще, выкинуть из URL подстрочку «interface=wifi». Я закончил тем, что выяснил, что приложение отправляет запросы на домен api.twitter.com (кто бы мог подумать!) и менее вероятно, что ходит по HTTPs на blackberryid.blackberry.com (но в этом меньше уверенности, наверное, какое-то другое приложение пошло и подпортило картину), но, судя по всему наличие соединения проверяется не путем попытки установки связи с сервером, а через API состояния соединения. Короче, не взлетело.
Я также посмотрел на Facebook, у которого такая же проблема. К сожалению, перехватчик урлов не сможет помочь в этом случае, поскольку снифинг показал, что приложение ломится на невероятно много доменных имен. Причем нельзя понять, сколько всего доменов может использоваться. А перехватчику урлов нужно знать точное доменное имя, без wildcard. У Вконтакта такая же фигня, куча доменов csXXXX.vkontakte.ru, где XXXX — это цифры. Установить перехватчик на 10000 доменных имен можно, но телефон начинает настолько тормозить, что лучше не надо 🙂
Вот такие находки сегодня.