Пока интернет бурлит новостями на тему обхода блокировок телеграма и сопутствующих с этим проблем у хостинговых компаний у меня была проблема посерьёзней — компания Innologica обновила до версии 6 приложение Inoreader для iOS.

Тихим будничным вечером приложение в телефоне было случайно обновлено до последней версии, т.к. обычно ничто не предвещало беды. Спустя пару дней во время поездки программа была запущена для чтения новостей и я не на шутку начал переживать.

Можно сравнить как было и как стало в двух примерах:


Конечно, на вкус и цвет и владельцы iPhone X были явно рады оптимизации под amoled-экраны, но именно этот апдейт побудил искать решения как откатить приложение назад, чего по умолчанию AppStore не позволяет делать.

Раньше достать ipa--файл приложения было делом 2 минут, достаточно было зайти на apptrackr и скачать, но он перестал работать и других подобных ресурсов дающих честно скачать ipa файл обнаружено не было (но вдруг вы такие знаете?).

Остались следующие способы получения старой версии приложения:

  1. У вас в iTunes лежит старый бэкап приложений с телефона и тогда можно просто скопировать приложение обратно (но у меня такого не было).
  2. Воспользоваться способом, описанным на скорую руку кем-то в интернете с помощью софта под названием Charles. Данный способ описан на ресурсах вроде 4dpa и пере-копирован множествами лиц без понимания что там вообще написано, однако, без дополнительных >100 грамм разобраться с этой писаниной сложно.

Возможно, я это сделаю более полно, с картинками и в более простой понятной форме. В общем, чтобы скачать софт старой версии из AppStore потребуется минут 5 времени и в моём случае Mac OS X. Способ явно будет работать и на Windows, т.к. приложение Charles есть и для этой системы.

Все ваши мучения начнутся ещё до того, как вы скачаете Charles. Дело в том, что если вы обновляете iTunes на Mac, то у вас будет отсутствовать возможность устанавливать приложения, начиная с версии 12.7. Чтобы её вернуть, нужно установить обратно версию 12.6.4.

Что мы будем делать дальше?

Коротко: загрузить приложение через AppStore в iTunes, затем включить прокси, затем загрузить ещё раз, отредактировать запрос, отправить запрос, получить старую версию, установить.

Подробно: после запуска Charles нужно установить сертификаты приложения в Mac. Это делается через меню Help > SSL Proxying > Install Charles Root Cetrificate. Сертификат затем нужно в Keychain Access перевести в статус Always Trust. Если не установить, то будут ошибки и метод не сработает.

В iTunes ищем приложение Inoreader (это для любого приложения подойдёт, но меня интересовало в тот момент только оно), запускаем Charles и нажимаем в окне установки приложения Download:


В окне Charles у вас появляется подобная строчка со слово «buy» в адресе, связанная с сервером apple:


Для информации можно обратить внимание на то, что размер скачиваемого файла равен 20,4 мб:


После чего нужно включить SSL Proxying для осуществления перехвата и редактирования запросов:


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

Ещё раз проверяем, что SSL Proxying включен и переходим к повторной загрузке приложения из AppStore при этом нужно поставить загрузку на паузу, чтобы у вас было время на следующие действия. После нажатия на Download в окне Charles появится ещё одна строка в сервером apple, содержащая слово «buy». Развернув эту строку нужно найти buyProduct:


Справа в окне нажимаем на Contents и внизу выбираем XML Text. Листаем вниз пока не найдем softwareVersionExternalIdentifiers со списком не понятным цифр.


Эти цифры и выступают в роли версий приложений. Соответственно, чем меньше число, тем старее версия приложения. Как узнать какая версия приложения будет загружена? Например, я наугад брал с конца списка значение 823964615:


Теперь нам нужно проверить версию приложения. Для этого мы делаем встаем на «buyProduct» и в меню выбираем Compose и справа в окне представление Text.


В самом верху поля будет знакомый вам набор цифр после параметра <key>appExtVrsId</key>. Этот набор цифр — актуальная версия приложения.


Вместо этих цифр подставляем скопированные выше 823964615 и должно получиться вот так:


и делаем Execute. Программа выдаст вам окно и выбрав режим отображения XML Text мы сможем внизу найти параметр bundleShortVersionString и увидим, что выбранное нами значение соответствует версии 5.4.4, что в моём случае то что нужно, т.к. эти версия практически последней перед обновлением до 6.0


Остаётся один шаг. Нужно скачать всё это дело. Для этого нужно в нашем последнем отредактированном запросе buyProduct с полученной версией 5.4.4 в меню выбрать Breakpoints.


По новой перейти в AppStore для загрузки приложения Inoreader (если приложение успело загрузиться в библиотеку и вы не успели его остановить, то просто удалите, чтобы была возможность загрузить заново).

Как только вы в iTunes нажмете скачать, то выскочит окно Charles, где нужно будет нажать на Edit Request и в уже знакомом параметре appExtVrsId исправить версию на 823964615, нажать Execute, а затем ещё раз на Execute.


В итоге у вас начнётся загрузка приложения и можно будет увидеть, что размер приложения изменился в меньшую сторону:


В библиотеке приложений itunes появится значок программы с ярлыком Update. Это и будет означать, что вы сделали всё верно. Можно сделать Get Info приложения и будет написано:


Дальше у приложения смотрим где оно находится в файловой системе и сохраняем на будущее если вдруг решите обновить приложение :)

По завершение работы следует в Charles сделать Disable SSL Proxying кликом на сервере p30-buy.itunes.apple.com.

Надо сказать, что получилось проделать у меня данную процедуру с 2 раза.
Надеюсь, это будет кому-то так же полезно как оказалось мне.

Комментарии (15)


  1. dmial
    24.04.2018 15:27

    «Не было у бабы горя, купила порося» :-)


  1. PAE
    24.04.2018 15:47

    Если эта инструкция кому-то полезна и позволяет сделать то, что описывает автор — замечательно, спасибо, что поделились. Однако, рискну предположить, это всё далеко не пять минут и я бы, наверно, предпочёл оставить новую версию приложения вместо такого хака.


    Офттоп: именно такие истории меня останавливают от использования iPhone — мне действительно нравятся унификация и единая экосистема, сборка и дизайн, функции, но вот такие танцы с бубном ради отката версии приложения — демотивируют, как и невозможность твиков за пределами ползунков и кнопочек.


    1. AndreyYu Автор
      25.04.2018 09:45

      Согласен с вами, однако, могу от себя добавить, что уже так привык к отсутствию всяких «кастомных фишечек» на iphone, что и без них живется просто замечательно.

      На самом деле когда я эту процедуру, описанную выше проделал второй раз, то это заняло меньше 2 минут. Там главное общий принцип понять.


  1. JhonCar
    24.04.2018 16:18

    А еще этот недотелефон не умеет работать при температурах ниже 0 градусов, даже нокиа 3310 это умела.


  1. Stchee
    24.04.2018 18:02

    Отличный пример man in the middle. И отличное описание одного из вариантов атаки на ssl.
    В сущности остаётся только сделать fake AP и отправлятся в людное место на рыбалку ;)


    1. LenKagamine
      25.04.2018 13:01

      Без установки корневого сертификата на атакуемое устройство ничего не получится. Разве что у вас есть приватный ключ какого-нибудь Digicert ;)


  1. savostin
    24.04.2018 18:13

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


    1. AndreyYu Автор
      25.04.2018 09:38
      +1

      Они фиксы выпускают, но дизайн кардинально обратно менять не собираются. В переписке было написано, что у них новый виток развития и т.п. отговорки, лишь бы оправдать свои действия.


  1. LIR
    24.04.2018 18:26

    Обновился. Ничего страшного не увидел. Но за статью спасибо)


  1. sev
    24.04.2018 23:20

    Непонятные цифры — это время в epoch: 823964615 = Tue, 24 Apr 2018 20:19:36 GMT


    1. AndreyYu Автор
      25.04.2018 10:00

      Согласен странное. Однако, у меня получается 1996 год.
      image


  1. SaddamHusein
    25.04.2018 09:48

    А можно подобным образом получить приложение, которое было когда-то установлено, но потом удалено из магазина? Linkedin, например.


    1. AndreyYu Автор
      25.04.2018 09:51

      Хм. Просто смените страну в настройках магазина AppStore и спокойно загрузите приложение.


  1. vindy123
    25.04.2018 15:10

    Для джейлбрейкнутых телефонов есть также приложение App Admin в сидии, которое позволяет выбрать любую старую версию для установки из AppStore, а не только последнюю.


  1. akai
    25.04.2018 15:16

    Удивительно, что в такой огороженной штуке нет certificate pinning.