Вы хорошо поработали, и вот ваше приложение в App Store!
Disclaimer от переводчика: из оригинального текста убрано много «воды» и отсылок к Голливуду (и так длинно). Добавлен ряд ключевых пояснений.
Чтобы вы творчески подошли к процессу, предлагаю вам сценарий. Представьте: вышло новое приложение для айпада - «Собиратель мемов» (Meme Collector). Всем нравится. Но вам шепнули на ухо, что встроенные покупки вытянут из вас значительную сумму денег.
В общем, вы задумали получить платный контент (мемы) бесплатно. Есть несколько направлений, куда можно двигаться, мы поговорим о них - и о соответствующих методах защиты.
Небольшое упрощение
Из-за длины этого урока мы изначально допустили некоторые упрощения в тестовом проекте. Например, «покупка» игровой валюты представляет из себя не настоящий in-app purchase, а фэйковый запрос к StoreKit (всё происходит локально на девайсе).
Связка ключей «повышает ставки» для хакера. Злоумышленники не смогут ничего стянуть, если устройство заблокировано.
Тем не менее, не стоит полностью полагаться на одну только Связку ключей! И вот почему. Связку ключей поддерживает Apple. (Ну вы уже всё поняли, да?) Информация в ней зашифрована паролем пользователя, который обычно является простым 4-значным цифровым кодом. А это значит, что атака брутфорсом займёт минут двадцать. Узнав пароль, легко сдампить всю связку ключей.
Находясь в папке бандла (Meme Collector.app), наберите в терминале:
Strings "Meme Collector"
Стой, куда столько! Команда strings идёт по разделам бинарника и выводит все элементы данных, похожие на строки. Отфильтруем шум:
Strings "Meme Collector" | grep http
А, ну вот, одна строка:
Http://version1.api.memegenerator.net/Generator_Select_ByUrlNameOrGeneratorID
Похоже, в какой-то момент приложение обращается к генератору мемов по этому урлу. Будучи хакером, вы бы хотели исследовать это дело дальше, изучив сетевой трафик приложения. Для этого нам понадобится сетевой монитор, перехватывающий все входящие и исходящие запросы.
Charles, упомянутый в начале статьи - хороший вариант для такого исследования. Скачайте его, если ещё не сделали это. Установите и запустите.
Проверьте, что Charles ловит сетевое взаимодействие с симулятора iOS (путём запуска «Карт», или в Safari набрать урл). Вы увидите, как в Charles побегут сетевые запросы. Если этого не произошло, убедитесь, что в меню Proxy > Mac OS X Proxy галочка установлена.
Кстати, Charles отлично перехватывает SSL-трафик.
Мы не будем это делать, потому что не увидели HTTPS-урлов на выходе команды strings . Но этот шаг потребуется для других приложений, которые могут использовать HTTPS. В меню Proxy > Proxy Settings… > SSL нужно включить SSL-прокси и добавить домены, по которым требуется перехватывать (и расшифровывать) HTTPS-трафик. Пока вы это не сделаете, SSL будет выглядеть примерно так:
Выберите вкладку Response и затем внизу JSON. Ответ сервера, расшифрованный из JSON, представлен в виде красивой таблички:
Мы видим здесь множество строк вида «ключ-значение»: заголовок (displayName), описание (description), URL картинки (imageUrl) - в общем, некая информация по данному типу мемов «Four Bachelor Frog» из GET-параметра.
Похоже на то, что мы видели в приложении, правда? Двум другим картинкам в этот раз повезло меньше, они так и не дождались ответа от сервера (Charles сообщает об этом на вкладке Overview) и поэтому не отобразились в приложении.
А я вообще не вижу, чтобы запрашивались картинки!
При повторном запуске картинки могут браться из кэша симулятора, Charles лб этом не знает. Очистите кэш и перезапустите приложение.
Rm -R Library/Caches/
Итак, с определённой долей вероятности делаем вывод: приложение берёт мемы с данного API и представляет их в виде платного контента. А что если попытаться изменить URL с целью приобрести какой-то новый контент, кроме этих трёх мемов? Непохоже, что тут есть проверка, действительно ли приложение получает с сервера то, что ожидал разработчик!
Вам уже надоели эти три мема? Ну-ка попробуем, можно ли отобразить и «купить» что-то новое, скажем, «Success Kid».
Выберите в меню Charles: Tools > Rewrite . Эта функция позволяет перехватывать входящие/исходящие запросы и модифицировать их по тем правилам, которые вы установите. Включите галочку Enable Rewrite . Правила группируются в «наборы» (Sets). Под списком Sets нажмите Add для добавления нового набора правил. По желанию, переименуйте (Name). Мы создали набор правил, но он пока пустой. Давайте добавим правило - в разделе Rules есть кнопка Add , нажмите её.
Открылось окно Rewrite Rule. Измените Type на «Modify Query Param» («Изменить параметр запроса») и заполните два поля:
Нажмите OK, OK. Перезапустите приложение… Success! Мы можем покупать контент, который ранее был недоступен.
Интересно: для этого нового мема указана конкретная цена. Откуда? Приложение должно было как-то определить стоимость, исходя из JSON-ответа.
Откройте вкладку Response и посмотрите на JSON, который возвращает сервер. Что может определить стоимость цены?
Попробуйте найти JSON-ключи, которые могут определить стоимость мема в приложении. Может быть, это generatorID, totalVotesScore, instancesCount, templatesCount или ranking. В качестве упражнения для вас: найдите тот ключ, который влияет на стоимость мема.
Чтобы сделать это, перейдите к Proxy > Breakpoints. Нажмите Enable Breakpoints и нажмите Add , чтобы добавить новую точку останова. Появится окно Edit breakpoint, введите в нём следующие данные:
Теперь перезапустите приложение. Как только нам придёт ответ с сервера, сработает точка останова (breakpoint). Когда это произойдёт, щелкните на вкладке Edit Response, внизу выберите JSON:
Здесь вы можете вручную модифицировать JSON-ответ, который пойдёт в приложение. Поиграйтесь с этими параметрами и попробуйте определить, какие ключи влияют на цену, отображаемую в приложении. Изменив JSON-ответ, нажмите Execute (выполнить) для отправки ответа. Приложение делает три запроса к API, поэтому вам понадобится нажать Execute трижды.
Важно: действуйте быстро! AFNetworking имеет таймаут 30 секунд. Если вы перехватили ответ, но не успели внести изменения, AFNetworking вернёт ошибку таймаута запроса и выполнит соответствующий обработчик в коде (который в данном случае не делает ничего). Если у вас вышло время, перезапустите приложение и попробуйте снова.
Возможно, эти знания повысят безопасность вашего iOS-приложения… чуть-чуть. В следующей части мы углубимся гораздо дальше в недры приложения, будем изменять его функционал! А пока вы ждёте, когда я выложу перевод (до следующей пятницы), можно много чего попробовать на тему хранения данных в приложении:
Замечания по поводу перевода или неработающих примеров можно отправлять на почту dev @ x128.ru .
Наверное, каждый продвинутый пользователь Mac OS X в жизни хоть раз, да сталкивался с plist-файлами. Сегодня я расскажу читателям про очень интересное и простое приложение для работы с ними под названием PlistEdit Pro.
Для начала, очень краткий ликбез. Файл с расширением.plist (Property List) представляет собой обыкновенный XML-файл с настройками приложений. Данный формат хорош тем, что он удобен и быстр в работе. Многие настройки приложений в таких файлах лежат в /Home/Library/Preferences, а их названия обычно состоят из 4 частей: приставка.компания.приложение.plist (к примеру, com.apple.iTunes.plist).
Большинство таких файлов могут быть открыты в любом текстовом редакторе, но вот только их изменение может оказаться не простым занятием. В этом случае нам, как раз, и может пригодиться утилита PlistEdit Pro, которая отображает «сырой» текст файла в виде списка с тремя параметрами: название переменной (Key), тип данных (Class) и значение (Value).
В приложении поддерживается drag-n-drop, поэтому отдельные переменные или целые секции можно перетаскивать мышкой, при этом не требуется вручную переписывать содержимое файла. Кстати, выбрав один из видов отображения его содержимого (бинарный, ASCII или XML), можно автоматически просматривать изменения в нижней части окна. А если добавить туда код «руками», то он синхронизируется с верхним XML-деревом.
Мне очень понравился встроенный файловый браузер, с помощью которого просмотр и редактирование большого количества настроек других приложений становится практически элементарным занятием. Программа сканирует системные каталоги и отображает найденные plist-файлы в специальном окне.
Также, в PlistEdit Pro предусмотрен продвинутый поиск с возможностью замены найденных элементов. Сужать и расширять диапазон поиска можно при помощи разнообразных критериев.
Среди других преимуществ данного приложения можно выделить такие:
Единственное, что на мой взгляд, омрачает впечатление от PlistEdit Pro, - это его цена в 30$.
Сайт разработчика:
Fat Cat Software
Стоимость:
29.95$
При наличии на компьютере установленной антивирусной программы можносканировать все файлы на компьютере, а также каждый файл в отдельности . Можно выполнить сканирование любого файла, щелкнув правой кнопкой мыши на файл и выбрав соответствующую опцию для выполнения проверки файла на наличие вирусов.
Например, на данном рисунке выделен файл my-file.plist , далее необходимо щелкнуть правой кнопкой мыши по этому файлу, и в меню файла выбрать опцию «сканировать с помощью AVG» . При выборе данного параметра откроется AVG Antivirus, который выполнит проверку данного файла на наличие вирусов.
Иногда ошибка может возникнуть в результате неверной установки программного обеспечения , что может быть связано с проблемой, возникшей в процессе установки. Это может помешать вашей операционной системе связать ваш файл PLIST с правильным прикладным программным средством , оказывая влияние на так называемые «ассоциации расширений файлов» .
Иногда простая переустановка Microsoft Notepad может решить вашу проблему, правильно связав PLIST с Microsoft Notepad. В других случаях проблемы с файловыми ассоциациями могут возникнуть в результате плохого программирования программного обеспечения разработчиком, и вам может потребоваться связаться с разработчиком для получения дополнительной помощи.
Совет: Попробуйте обновить Microsoft Notepad до последней версии, чтобы убедиться, что установлены последние исправления и обновления.
Это может показаться слишком очевидным, но зачастую непосредственно сам файл PLIST может являться причиной проблемы . Если вы получили файл через вложение электронной почты или загрузили его с веб-сайта, и процесс загрузки был прерван (например, отключение питания или по другой причине), файл может повредиться . Если возможно, попробуйте получить новую копию файла PLIST и попытайтесь открыть его снова.
Осторожно: Поврежденный файл может повлечь за собой возникновение сопутствующего ущерба предыдущей или уже существующей вредоносной программы на вашем ПК, поэтому очень важно, чтобы на вашем компьютере постоянно работал обновленный антивирус.
Если ваш файл PLIST связан с аппаратным обеспечением на вашем компьютере , чтобы открыть файл вам может потребоваться обновить драйверы устройств , связанных с этим оборудованием.
Эта проблема обычно связана с типами мультимедийных файлов , которые зависят от успешного открытия аппаратного обеспечения внутри компьютера, например, звуковой карты или видеокарты . Например, если вы пытаетесь открыть аудиофайл, но не можете его открыть, вам может потребоваться обновить драйверы звуковой карты .
Совет: Если при попытке открыть файл PLIST вы получаете сообщение об ошибке, связанной с.SYS file , проблема, вероятно, может быть связана с поврежденными или устаревшими драйверами устройств , которые необходимо обновить. Данный процесс можно облегчить посредством использования программного обеспечения для обновления драйверов, такого как DriverDoc .
Если шаги не решили проблему , и у вас все еще возникают проблемы с открытием файлов PLIST, это может быть связано с отсутствием доступных системных ресурсов . Для некоторых версий файлов PLIST могут потребоваться значительный объем ресурсов (например, память/ОЗУ, вычислительная мощность) для надлежащего открытия на вашем компьютере. Такая проблема встречается достаточно часто, если вы используете достаточно старое компьютерное аппаратное обеспечение и одновременно гораздо более новую операционную систему.
Такая проблема может возникнуть, когда компьютеру трудно справиться с заданием, так как операционная система (и другие службы, работающие в фоновом режиме) могут потреблять слишком много ресурсов для открытия файла PLIST . Попробуйте закрыть все приложения на вашем ПК, прежде чем открывать Property List XML File. Освободив все доступные ресурсы на вашем компьютере вы обеспечите налучшие условия для попытки открыть файл PLIST.
Если вы выполнили все описанные выше шаги , а ваш файл PLIST по-прежнему не открывается, может потребоваться выполнить обновление оборудования . В большинстве случаев, даже при использовании старых версий оборудования, вычислительная мощность может по-прежнему быть более чем достаточной для большинства пользовательских приложений (если вы не выполняете много ресурсоемкой работы процессора, такой как 3D-рендеринг, финансовое/научное моделирование или интенсивная мультимедийная работа). Таким образом, вполне вероятно, что вашему компьютеру не хватает необходимого объема памяти (чаще называемой «ОЗУ», или оперативной памятью) для выполнения задачи открытия файла.
Если вам лень копаться в магазине Cydia , и искать нужные твики, то всегда есть вероятность того, что можно решить вашу проблему простым изменением файлов настроек iPhone .
О маленьких твиках iOS , которые может сделать самостоятельно каждый пользователей Jailbreak тут и пойдёт речь. Все нижеописанное проверено на iOS 5.
Что нам понадобится:
Изменения файлов Plist - взломы и улучшения, которые может сделать каждый пользователь Jailbreak.
200?"200px":""+(this.scrollHeight+5)+"px");">
200?"200px":""+(this.scrollHeight+5)+"px");">
Функция тестовая, её придется еще включить в обычных настройках камеры. Качество получаемой панорамы также не очень качественное, но если вам нужна панорама на iPhone без установки сторонних программ тогда этот твик для вас.
200?"200px":""+(this.scrollHeight+5)+"px");">
200?"200px":""+(this.scrollHeight+5)+"px");">
Теперь помещаем файл со скринсейвером Demo.mov в папку
var/mobile/
После ReSpring’а всё должно заработать.
200?"200px":""+(this.scrollHeight+5)+"px");">
200?"200px":""+(this.scrollHeight+5)+"px");">
200?"200px":""+(this.scrollHeight+5)+"px");">
System/library/CoreServices/SpringBoard.app/English.lproj/SpringBoard.strings
и редактируем следующий ключ:
"AWAY_LOCK_LABEL" = "slide to unlock"
Заходим в:
/System/Library/LaunchDaemons/
и переименовываем com.apple.apsd.plist
в com.apple.apsd.plist%
, перезагружаем устройство.
Так же, все выше перечисленные действия может сделать каждый даже без использования . Для этого надо просто создать резервную копию iPhone, iPad, потом можно изменять ее программой iBackupBot, после чего необходимо восстановить ваш iOS девайс отредактированным бекапом.
И это ещё не всё, лист будет обновляться, по нахождению новых твиков. Отписывайтесь и задавайте вопросы ниже, ответим.
Если вы не нашли ответа на свой вопрос или у вас что-то не получилось, а в комментаряих ниже нет подходящего решения, задайте вопрос через нашу . Это быстро, просто, удобно и не требует регистрации. Ответы на свой и другие вопросы вы найдете в разделе.
Присоединяйтесь к нам во
В интернете очень много программ, позволяющих редактировать исходный код другой программы, файла и др. Однако большинство из подобных программ являются всего лишь текстовым редактором наподобие блокнота. Отличаются они от вышеуказанного редактора лишь тем, что имеют подсветку синтаксиса. Однако в некоторых случаях, такого функционала программы оказывается недостаточно. Программисту бывает необходимо быстро находить различные части документа. И вот, наконец-то, в появилась программа, позволяющая решить эту проблему. Программа называется SynWrite. Её отличительная особенность – наличие навигационной панели с деревом, котор...