Реверс-инжиниринг чужого приложения
Dolgo.polo Dev x Coffee&Code
#cross_post
На вопросы отвечает наш участник комьюнити - @gronzeisl✌️
Эртэм Быйык, программист-разработчик команды инфраструктуры ВКонтакте
💎 iOS
➖
в .ipa-файл, а в нем код в формате unix executable file (бинарь, скомпилированный код)
➖
да, если у вас есть доступ до .ipa файла (как его получить), можно с легкостью дойти до ассемблерного кода (используя Hopper, можно получить даже псевдо код)
приложения из AppStore шифруются и без jailbreak будет сложно достать что-то полезное из обфусцированного бинаря, но добрые (или не очень) люди создают сайты, где выкладывают незашифрованные бинари популярных приложений
➖
да, например тулза sideloadly позволяет пересобрать .ipa файл с дополнительным фреймворком (который мы можем написать сами)
этот фреймворк, к примеру, может случайно посвиззлить (подменить реализацию метода в рантайме) функцию начисления количества внутриигровой валюты и сделать нас миллионерами
➖
🔵 источник приложений только один — AppStore (уже нет)
🔵 подпись .ipa-файла, связанная с аккаунтом разработчика
🔵 DeviceCheck — фича, позволяющая сгенерировать токен оригинальность приложения и проверить его на бэкенде
➖
только если она в публичном доступе
в остальном, также декомпилировать и смотреть ассемблер или дампнуть хедеры (интерфейс либы)
еще есть возможность изучить библиотеку прямо в рантайме, если она написана на Objective-C, используя инструменты рантайма
например можно:
🔵 запринтить все методы объекта (подробнее)
🔵 переопределить любой (да да, любой, даже приватный) метод
🔵 подменить класс в рантайме, создать класс в рантайме
🔵 вызывать любой метод (даже не объявленный)
🔵 подключить любую библиотеку (даже системные фреймворки Apple) и много чего еще
💎 Android
➖
в .apk-файл, в котором лежит java-байткод (Java/Kotlin-код компилируется в java-байткод на этапе сборки .apk)
➖
да
получить .apk-файл можно из любого приложения, установленного на устройстве
дальше достаточно использовать любую программу, умеющую превращать байткод обратно в Java-код
единственная защита от этого — обфускация кода. но она лишь усложняет читаемость кода, а не защищает от считывания
➖
да, поскольку после декомпиляции мы получаем обычный Java-код, который можем изменить его и заново собрать .apk
➖
🔵 подпись приложения
подпись — грубо говоря, уникальная строка, которая формируется на основе хэша от кода приложения и пароля, который знает только разработчик приложения
если изменить исходный код приложения, то подпись потеряет актуальность, и система не даст установить такое .apk
🔵 Play integrity API — фича, позволяющая сгенерировать токен оригинальность приложения и проверить его на бэкенде
➖
да, у нас есть доступ к исходникам любой либы, написанной на Java/Kotlin (в том числе системных/гугловских) прямо из Android Studio
💎 Выводы
все секреты, попавшие в .apk/.ipa-файл (токены/алгоритмы шифрования/пароли/протоколы...), могут быть вытащены и подменены с помощью реверс-инжиниринга на обоих платформах
на iOS изучить/подменить чужое приложение сложнее, но тоже реально
так что все что попало в .apk/.ipa-файл — считай open-source
спасибо Coffee&Code и в частности @gronzeisl за экспертизу по iOS
Dolgo.polo Dev x Coffee&Code
#cross_post
На вопросы отвечает наш участник комьюнити - @gronzeisl
Эртэм Быйык, программист-разработчик команды инфраструктуры ВКонтакте
во что собирается приложение? в .ipa-файл, а в нем код в формате unix executable file (бинарь, скомпилированный код)
можно ли декомпилировать чужое приложение?да, если у вас есть доступ до .ipa файла (как его получить), можно с легкостью дойти до ассемблерного кода (используя Hopper, можно получить даже псевдо код)
приложения из AppStore шифруются и без jailbreak будет сложно достать что-то полезное из обфусцированного бинаря, но добрые (или не очень) люди создают сайты, где выкладывают незашифрованные бинари популярных приложений
можно ли пересобрать чужое приложение, изменив его исходники, и поставить себе на устройство?да, например тулза sideloadly позволяет пересобрать .ipa файл с дополнительным фреймворком (который мы можем написать сами)
этот фреймворк, к примеру, может случайно посвиззлить (подменить реализацию метода в рантайме) функцию начисления количества внутриигровой валюты и сделать нас миллионерами
что защищает от хакнутых приложений?можно ли посмотреть исходники любой библиотеки?только если она в публичном доступе
в остальном, также декомпилировать и смотреть ассемблер или дампнуть хедеры (интерфейс либы)
еще есть возможность изучить библиотеку прямо в рантайме, если она написана на Objective-C, используя инструменты рантайма
например можно:
во что собирается приложение?в .apk-файл, в котором лежит java-байткод (Java/Kotlin-код компилируется в java-байткод на этапе сборки .apk)
можно ли декомпилировать чужое приложение?да
получить .apk-файл можно из любого приложения, установленного на устройстве
дальше достаточно использовать любую программу, умеющую превращать байткод обратно в Java-код
единственная защита от этого — обфускация кода. но она лишь усложняет читаемость кода, а не защищает от считывания
можно ли пересобрать чужое приложение, изменив его исходники?да, поскольку после декомпиляции мы получаем обычный Java-код, который можем изменить его и заново собрать .apk
что защищает от хакнутых приложений?подпись — грубо говоря, уникальная строка, которая формируется на основе хэша от кода приложения и пароля, который знает только разработчик приложения
если изменить исходный код приложения, то подпись потеряет актуальность, и система не даст установить такое .apk
можно ли посмотреть исходники любой библиотеки?да, у нас есть доступ к исходникам любой либы, написанной на Java/Kotlin (в том числе системных/гугловских) прямо из Android Studio
все секреты, попавшие в .apk/.ipa-файл (токены/алгоритмы шифрования/пароли/протоколы...), могут быть вытащены и подменены с помощью реверс-инжиниринга на обоих платформах
на iOS изучить/подменить чужое приложение сложнее, но тоже реально
так что все что попало в .apk/.ipa-файл — считай open-source
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9 4❤🔥3 3 3🔥2❤1