Возможно ли декомпилировать приложение? - PullRequest
3 голосов
/ 29 марта 2012

Мне нужно кодировать информацию аутентификации для определенных частей моего веб-сайта в моем приложении. Возможно ли вообще «декомпилировать» приложение и раскрыть имя пользователя и пароль?

NSURL *url = [NSURL URLWithString:@"https://predefinedUsername:predefinedPassword@www.website.com"];

Ответы [ 4 ]

6 голосов
/ 29 марта 2012

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

Вам действительно нужно, чтобы пользователь выполнил какое-то задание, которое их аутентифицирует. Есть миллион и один способ сделать это, и для каждого из них миллион и два способа сделать это неправильно. :)

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

5 голосов
/ 29 марта 2012

Как сказал @Hyperbole, если вы сохраните имя пользователя и пароль в виде обычного текста, они будут видны в исполняемом файле.Очень просто проверить исполняемый файл на наличие строк, и обычно это первое, что кто-то со злым умыслом попробует.

Щелкните правой кнопкой мыши любое приложение, которое вы загрузили в iTunes, и выберите «Показать в Finder».Сделайте копию приложения на рабочем столе и переименуйте приложение из AppName.ipa в AppName.zip.Дважды щелкните, чтобы распаковать его и заглянуть внутрь папки.Перейдите к папке «Полезная нагрузка», а затем щелкните правой кнопкой мыши (вероятно, единственный) файл в этом файле с именем AppName, который выглядит как приложение, но имеет большой круг с крестиком для значка.Выберите Показать содержимое пакета.Прокручивайте, пока не найдете файл с именем AppName без расширения и черноватый прямоугольник с зеленым словом «exec» в качестве значка.Откройте этот файл в текстовом редакторе или другом текстовом редакторе.Вы обнаружите, что большинство из них заканчиваются случайными символами и прочей ерундой, но иногда вы должны увидеть какой-нибудь простой текст.Компилятор берет строковые константы и встраивает их непосредственно в приложение, когда вы компилируете его в большинстве случаев.

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

Другие решения включают в себя подписание / хеширование уникального ключа.

2 голосов
/ 29 марта 2012

Это очень плохо, потому что тривиально легко восстановить эти учетные данные, просто запустив «строки» для двоичного файла приложения без необходимости его декомпиляции.

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

2 голосов
/ 29 марта 2012

Ваш пример предоставит имя пользователя и пароль без необходимости декомпиляции, поскольку вы отправляете его в виде обычного текста в запросе URL. Любой, у кого есть сервис сниффера или MITM, вырвет его из воздуха. Лучшим подходом было бы использовать SSL по протоколу http * s *. Вы можете пойти еще дальше и либо запросить во время выполнения учетные данные и / или сохранить зашифрованную версию в приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...