2012-03-28 4 views
3

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

NSURL *url = [NSURL URLWithString:@"https://predefinedUsername:[email protected]"]; 
+3

Возможно, вы должны прочитать здесь: http://stackoverflow.com/questions/3919765/how-safe-is-information-contained-within-iphone-app-compiled-code –

+6

Если вы храните это в текстовом виде в приложении шансы, что он будет виден без декомпиляции. – Hyperbole

ответ

6

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

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

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

+0

Большое спасибо за вашу помощь. Есть ли у вас какие-либо идеи о том, как более популярные приложения, особенно журналы, делают это? Содержимое загружается с защищенного веб-сайта, и не будет ли каждый раз имя пользователя и пароль одинаковыми? Почему люди не могут декомпилировать приложение и загружать вопросы бесплатно? Или я смотрю на это неправильно? Благодарю. –

+1

@JackHumphries Доступные опции зависят от платформы. Если вместо того, чтобы иметь единую жесткую учетную запись, используемую всеми экземплярами приложения, у вас вместо этого есть токен для каждой покупки, создавая новую учетную запись на бэкэнд на оплаченную покупку (которая может быть отозвана при злоупотреблении/совместном использовании/возврате), что быть началом. Я знаю лишь немного о Android Market и вообще ничего о инфраструктуре App Store от Apple, поэтому я не мог дать вам более конкретные подсказки. –

2

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

+0

Спасибо. Вся информация будет отправлена ​​через SSL. Не могли бы вы еще раз объяснить, что вы имеете в виду, когда говорите, чтобы хранить зашифрованную версию учетных данных в приложении? Как бы я их расшифровал, когда их нужно отправить на сервер? Большое спасибо. –

5

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

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

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

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

2

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

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

Смежные вопросы