Как декомпилировать ios приложение
> tools\bin\sdkmanager.bat --list
build-tools;25.0.2 | 25.0.2 | Android SDK Build-Tools 25.0.2
build-tools;25.0.3 | 25.0.3 | Android SDK Build-Tools 25.0.3
cmake;3.6.3155560 | 3.6.3155560 | CMake 3.6.3155560
> tools\bin\sdkmanager.bat "build-tools;25.0.3" "platform-tools"
Далее получаем на руки apk-шку, которую будем препарировать. Название пакета можно взять из адресной строки браузера, открыв страницу с программой на Play Market. Далее ищем и вытаскиваем архив через adb (root не требуется).
Пусть например, для программы "Sample Foobar" имя пакета будет com.example.foobar
> adb devices
List of devices attached
> adb shell "pm list packages -f -3 | grep com.example.foobar"
> adb pull /data/app/com.example.foobar-1.apk
/data/app/com.example.foobar-1.apk: 1 file pulled. 3.0 MB/s (39955506 bytes in 12.719s)
> java -jar apktool_2.2.2.jar d -o foobar_src com.example.foobar-1.apk
> dex2jar-2.0\d2j-dex2jar -os -ts -r com.example.foobar-1.apk
На выходе имеем com.example.foobar-1-dex2jar.jar. Запускаем jd-gui и открываем в нем этот jar:
> java -jar jd-gui-1.4.0.jar
Можно изучать код прямо в jd-gui, а можно экспортировать весь Java-код через меню File -> Save all sources.
После того, как поизучали, добавили нужное и удалили ненужное, собираем обратно smali в apk:
> java -jar apktool_2.2.2.jar b -o foobar_unaligned.apk foobar_src
Выравниваем запакованные файлы по 4-байтовой границе:
> build-tools\25.0.3\zipalign 4 foobar_unaligned.apk foobar_fixed.apk
> keytool -keystore android_keystore.jks -genkey -alias recompile
Далее подписываем apk, используя сертификат из своего keystore. Указываем такое же значение min-sdk-version, как указано в исходнике foobar_src\apktool.yml, в параметре minSdkVersion:
> build-tools\25.0.3\apksigner sign --ks android_keystore.jks --min-sdk-version 14 foobar_fixed.apk
Перед тем, как ставить обновленную apk, надо вручную удалить оригинальную программу, если она установлена, так как оригинал и переделанная версия подписаны разными ключами.
А мне было полезно, плюсану
думаю тут будет актуален тег "реверс-инжиниринг".
на 4пда, этих памяток .
ТС, Пикабу вообще то не личная записная книжка если что.Яндекс погода
Никогда особо не парился по поводу памяти в телефоне, но тут решил посмотреть список приложений с фильтрацией по размеру.
Спотифай - ладно, слушаем с женой музыку, сохраняем, один общий плейлист в машине.
2ГИС - многовато для приложения, использующего векторную графику для построения карт без фото-подложки как у Яндекс карт к примеру, но тоже ладно, москва+глобальная карта в любом случае сейчас+еще пара регионов и по ним путеводители с фоточками имеются, так что простительно.
Вконтакте - тоже все понятно, это уже целый комбайн с мини приложениями, огромным функционалом, музыкой и тонной контента.
Но вот Яндекс погода? Какого хрена? Единственное назначение этого приложения - это небольшой виджет на экране который дает мне немного информации. Ладно там есть еще карта осадков на макетной подложке. И всё.
Лучше один раз увидеть
Протестировал, проверил вроде всё что можно. ))
Сегодня пишет пользователь - "при вводе данных - приложение выбрасывает".
Ок, опять тестирую, проверяю на разных телефонах - работает.
По логам - чисто.
Присылают видео - действительно выбрасывает.
И тут, пригляделся внимательнее.
Пользователь вводит число заканчивающееся на ноль, промахивается и нажимает на кнопку сворачивающее приложение.
Уфффф. Расследование окончено. :)
Автономность
Нужен ещё параметр для учёта температуры на улице
Войти в айти. Часть 5
Привет, Пикабу! Да, да.. это очередной пикабушник с кризисом среднего возраста, который вдруг осознал и понял, что с детства мечтал быть программистом. Давненько не было отчёта о моём пути в профессиональный мир разработки. Если вдруг Вам интересен мой опыт, то предыдущие срезы тут:
Вкратце, с чего всё начиналось:
0) Увольнение с военной службы по контракту
2) Высшее образование (заочное) по направлению "Информатика и вычислительная техника"
3) Выучил Java, сейчас изучаю Kotlin и Swift
4) Есть несколько карманных проектов в Play Market, всё довольно простенькое, но стараюсь развивать
5) Женат, детей нет, кот есть
6) В it не работал
Цель - к декабрю 2020 набрать в сумме 1.000.000 загрузок на Android, выучить Swift и выпустить приложение на ios.
Первый пост был написан 10 месяцев назад, в котором я ставил себе рубеж - декабрь 2020. Но не дотянув 2 месяца я схожу с дистанции. Причина этому довольно меркантильная, но приятная - пора устроиться на работу, нужны деньги так как ждём пополнения.
Давайте подведу итоги того, что я имею на данный момент:
- Выучен язык программирования и технологии, позволяющие писать под Android всё, что приходит в голову. Ограничен только временем. На любой вопрос уже есть ответ, стоит только почитать, поэкспериментировать, вникнуть.
- На создании собственных приложений жить можно. Деньги не большие, но на жкх и холодильник хватает. Доход постоянно растёт, если не останавливаться, создавать что-то новое и поддерживать старое.
- Физкультура важна не менее умных книг. Мало движения - тает мотивация, появляется прокрастинация.
- 1.000.000 загрузок набрать не удалось. Цифры гораздо скромнее. На данный момент в сумме загрузок около 240.000, активных пользователей в сумме по приложениям около 83.000
- если из 100 скачавших приложение человек 30 не удаляют его, то это вполне хороший показатель, значит его можно и нужно развивать!
- гайды создания интерфейсов не всегда работают. Порой плюнув на рекомендации корпораций можно сделать что-то, что "зайдёт" людям.
- после 30 на работу в it устроиться можно!
В последнем своём приложении я собрал весь накопленный опыт и понял, что теперь не стыдно рискнуть пройти собеседование. Казалось бы, всего лишь блокнот. Но мне так понравилось работать над деталями, и пробовать новые технологии при работе над ним, что я могу говорить теперь об этом часами. Оказывается, что к созданной тобой программе можно испытывать чувства привязанности и симпатии, что-то вроде любви к своему питомцу. Странно это=)
Результаты по Android меня вполне удовлетворили, чего не сказать о ios. Времени и сил не хватило на всё, буду заниматься им в рамках общего развития. Надеюсь что к весне смогу сделать что-то простенькое.
Если мечтаете сменить род деятельности, выделите время, составьте план, определите сроки и вперёд! Другой жизни не будет, а занятие любимым делом профессионально - это очень, очень круто!
Русская азбука Mорзе для Андроид
Впечатлившись произведениями Павла Кучера решил изучить морзянку.
Да и вообще морзянка всегда может пригодиться, например можно гудком автомобиля сказать пешеходу, что про него думаешь. Или подсказать кому то правильный ответ морганием глаз или пожатием руки или покашливанием.
Нашёл неплохие программы по изучению для PC. Но за компьютер лишний раз сесть некогда и стал искать, что есть под андроид для обучения русской азбуке морзе. Выяснилось, что нет ничего. Т.е. что-то якобы есть, но по факту это оказывались или трейнеры для отработки того, что уже умеешь или справочники или что то типа превратим ваш текст в морзянку.
Я не программист, но пробовал как то писать на Яве под андроид программку для своих детей для обучения математике и игре в математику. И вроде получилось. Ну думаю попробую и тут написать, дело то нехитрое. Оказалось, что дело очень даже хитрое, ибо эта Ява под андроид не умела даже то, что делал мой ZX Spectrum в прошлом веке. Там можно было задать частоту звука и его длительность и наслаждаться прослушиванием. Тут же для получения нужного звука приходилось программировать по точкам синусоиду с которой будет колебаться динамик устройства.
В общем думал справлюсь за несколько вечеров, но шли дни, недели, месяцы. Программа рождалась в муках, справочного материала на Яве под Андроид на русском ничтожно мало, на форумах помогают плохо. И повторюсь, что я вообще не программист. В итоге, когда доделал, то понял, что программке пропадать грех, ибо аналогов то нет. Решил уж потратить ещё несколько вечеров на оформление и выкладывание для всеобщего использования на Google Play и 4PDA.
Программа полностью бесплатна и не содержит рекламы.
Поэтапное изучение знаков азбуки Морзе на приём и на передачу по методике близкой к методике ДОСААФ СССР. Приложение можно использовать и в качестве игры из двадцати уровней с увеличивающейся сложностью.
После прохождения десяти уроков останется не только удовлетворение от пройденного, но и базовый опыт приёма и передачи букв и цифр посредством азбуки Морзе. Воспользовавшись режимом тренировка можно будет отработать приём и передачу отдельных символов до автоматизма.
Изучать морзянку с использованием компьютера обычно некогда, а телефон или планшет всегда под рукой, желательно только иметь наушники, чтобы не мешать окружающим.
Приложение активно скачивается, почти 65 тысяч установок. В основном людям нравится. Правде не все андроид устройства одинаково полезны. На некоторых есть проблемы на "приём", у Явы есть особенности проигрывания звуков. Так, что у кого не пойдёт - не обижайтесь. Буду не против, если кто-то возьмёт за основу и перепишет программу профессионально.
Хотя система iOS относительно безопасна по сравнению с другими операционными системами для мобильных телефонов, эта безопасность не является абсолютной. Я всегда считал, что высота дороги равна высоте высоты. Эта статья хочет начать с практических примеров и рассказать всем, как декомпилировать приложение, и с определенной точки зрения iOS не обладает легендарной «безопасностью».
Вот только самые простые выводы для всех: конкретные принципы и подробное использование инструментов, пожалуйста, Google, почему вы это делаете, потому что я хочу использовать самый простой язык, чтобы ученики, не имеющие оснований в сборке, также могли понять.
Следующие аспекты будут использованы для иллюстрации моей точки зрения:
- Приложения для iOS можно декомпилировать «условно»
- Снимите пальто, которое App Store положил на «вторичный файл»
- Как использовать инструменты для декомпиляции
- Генерация псевдокода в достопримечательностях
- Как предотвратить декомпиляцию
Приложения для iOS можно декомпилировать «условно»
Прежде всего, позвольте всем рассказать вам печальную новость о том, что приложение, помещенное в App Store, было зашифровано Apple. Таким образом, заголовок является «условным» для декомпиляции. Что радует, так это то, что ipa, сгенерированный при отладке, или пакет ipa под релизом, или пакет канала (пакет ipa, который может использоваться на различных рынках приложений), может быть напрямую Decompile.
Снимите пальто, которое App Store положил на «вторичный файл»
Конечно, во введении уже говорилось, что высота дороги составляет один фут, а высота магии велика, даже если она зашифрована Apple, ее можно декомпилировать, но это относительно хлопотно.
Приходите и дайте вам несколько инструментов, чтобы разблокировать шифрование Apple.
- clutch
- dumpdecrypted
- gdb
- AppCrackr
Поскольку AppCrackr наказывается многими разработчиками, эта дурацкая дешифровка серьезно приведет к распространению пиратства, поэтому этот инструмент уже очень сложно использовать.
Демонстрация здесь не будет показана. Мне кажется, что если я декомпилирую контент в App Store и отправлю его в Интернет, я чувствую, что моя карьера программиста может быть закончена.
Как использовать инструменты для декомпиляции
Два инструмента класса-dump и Hopper Disassembler будут представлены здесь.
Прежде всего, давайте начнем с самого простого приложения для создания мыши. Адрес загрузки (включая двоичные файлы и результаты дампа)
Посмотрите на картинку, вот и все, я только изменил класс ViewController.
ViewController.h
ViewController.m
Как видно из кода, я написал два метода testClassDump и testHideClassDump, последний не объявлен в .h (ps: я хочу проверить, можно ли это декомпилировать).
Хорошо, после того, как прелюдия закончена, вы можете начать работать.
Запускаем проект, затем открываем каталог, в котором DecompilingTest.app в папке Products, отображаем содержимое пакета, получаемдвоичный файл。
Затем я скопировал его на рабочий стол и выполнил следующую команду, чтобы получить файл .h в проекте.
ОК, получены следующие результаты, давайте посмотрим, какой метод мы можем получить в ViewController.h
Оказывается, необъявленный метод также был сброшен.
Следующий шаг, который мы должны сделать, это посмотреть, сможем ли мы получить конкретную реализацию этих двух методов, тогда мы используемHopper DisassemblerПриходи попробуй.
Hopper DisassemblerИспользование очень просто, просто перетащите бинарный файл в него. Посмотрите на результат после перетаскивания.
В это время мимо мчались десять тысяч травяных и грязных лошадей, что за черт! ! Младенцы на ассемблере не могут этого понять. (Конечно, этот ответ должен означать возвращение)
Генерация псевдокода в достопримечательностях
Не беспокойся! Нажмите в правом верхнем углуif(b)f(x); Button, мы можем увидеть псевдокод этого метода, большую часть времени мы можем видеть информацию, которая нам нужна из псевдокода.
Результаты приведены ниже:
псевдокод 1
псевдокод 2
На данный момент оба метода декомпилированы! !
Здесь следует отметить, что даже если метод не объявлен в .h, он может быть выгружен и затем декомпилирован.
Как предотвратить декомпиляцию
Сказав так много, давайте предотвратим это, нужно ли нам добавлять все виды сложной путаницы, как в Java?
На самом деле, я не думаю, что это необходимо. Сама стоимость декомпиляции очень велика. Существует очень много кодов. Декомпиляция по одному болезненна. Даже если существует псевдокод, его нужно понимать, а некоторые коды трудно понять, даже если они имеют псевдокод.
Пока основной код выполнен хорошо, путаница, например, включает пароли и основные алгоритмы.
Нет абсолютно безопасной системы, ни системы, которая не может быть взломана хакерами, достаточно времени.
Первый вопрос: возможно ли установить файл.deb на iOS или я скачал неправильный файл?
После распаковки файла.deb у меня есть некоторые файлы, в том числе.nib,.storyboard и некоторые другие файлы.
Мой главный вопрос: как декомпилировать эти.nib файлы?
Я попытался декомпилировать эти файлы с помощью NibToXibConverter, но мне это не удалось.
Ответ на ваш первый вопрос:
Я думаю, вы загрузили неправильный файл. Файлы .deb для iOS являются общими для сообщества джейлбрейков, а не для приложений, я думаю, что все продукты Cydia упакованы в .deb . Если ваше приложение специально сделано для сцены джейлбрейка, вы можете попытаться установить его с помощью функции автоматической установки Cydia на джейлбрейк-устройстве.
Ответ на ваш главный вопрос:
Это общая информация об декомпиляции и модификации приложений iOS (не предназначена для ножей, но вы все равно можете найти ее полезной).
Приложения iOS распределяются в архивах .ipa , которые являются обычными zip-архивами. Они содержат, как правило, один исполняемый файл в виде файла Mach-O и ресурсы, такие как .plist , звуки, изображения - каждый ресурс, который вы включаете в свой проект xcode. Декомпиляция исполняемого файла возможна только в jailbroken iDevice, поскольку он зашифрован специально для текущего устройства, а волшебный ключ для дешифрования двоичного файла сжигается внутри процессора устройства, и насколько я знаю, нет программного способа для чтения этого ключа. Система шифрования здесь называется FairPlay.
Вкратце описано, что один из способов дешифрования этого двоичного файла состоит в том, чтобы приложение было установлено на джейлбрейк-устройстве и запустило его из командной строки с помощью отладчика (gdb), который вы можете скачать из Cydia. Вы должны установить точку останова где-то, и когда ваше выполнение кода приостанавливается в точке останова, вы делаете дамп памяти устройства, и это ваш расшифрованный бит.
Поэтому, когда у вас есть расшифрованный двоичный файл, вы можете запустить один инструмент под названием "класс-дамп" и получить информацию для объявленных классов и их методов, если приложение написано в Objective C. После того, как вы знаете эту информацию, вы можете изменить реализацию данный метод из какого-либо класса, используемого в вашем приложении, используя "Cydia Subtstrate", а также "Мобильный субстрат". Фактически, именно так сделаны все хитроумные iOS-твики. В основном вы подключаете вызов метода, и когда этот метод вызывается, он использует вашу реализацию. Кроме того, ваша реализация может вызвать первоначальную реализацию, и это действительно полезно, если вы хотите сделать небольшое добавление кода.
Я не уверен, возможно ли это в Swift, но если вы имеете дело с гибридным приложением, подобным тому, что сделали с помощью cordova, phonegap и т.д., Тогда вы можете увидеть весь его источник javascript, потому что он сохраняется как ресурс внутри Файл "ipa". Кроме того, вы можете изменить этот javascript-код непосредственно, если у вас есть устройство с джейлбрейком, и найти, где приложение установлено в файловой системе (обычно /var/containers/Bundle/Application/uuid_for_your_app/ ). Тем не менее, я думаю, что нет возможности получить эту исправленную версию и перераспределить ее (исправьте меня, если я ошибаюсь).
В этой статье мы рассмотрим утилиту Hopper как более дешевую альтернативу IDA Pro.
Автор: Пратик Джианчандани (Prateek Gianchandani)
В двадцать шестой статье мы рассматривали утилиты IDA Pro и Hex Fiend, которые использовались для модификации бинарных файлов IOS-приложений. У патчинга есть неоспоримое преимущество (по сравнению с техникой method swizzling): не нужно выполнять его постоянно при каждом запуске приложения, а достаточно выполнить эту процедуру один раз. Однако для выполнения простейших манипуляций в IDA Pro нам приходилось делать много телодвижений (в основном из-за того, что мы пользовались демо версией). В этой статье мы рассмотрим утилиту Hopper как более дешевую альтернативу IDA Pro.
Hopper – утилита для реверс-инжиниринга под OS X, Linux и Windows, которая позволяет дизассемблировать, декомпилировать и отлаживать (доступно только для OS X) исполняемые файлы операционных систем 32/64bits Intel Mac, Windows и iOS (ARM).
В этой статье я буду использовать платную версию Hopper, стоимость которой около 60$. Думаю, что цена смехотворна, учитывая возможности программы. Рекомендую для начала ознакомиться с бесплатной версией, чтобы вы могли получить некоторое представление об этом инструменте. Интерфейс Hopper выглядит так:
Рисунок 1: Внешний вид Hopper
Здесь мы также будем работать с тестовым приложением GDB-Demo, которое вы можете загрузить с моего аккаунта на github. Настоятельно рекомендую ознакомиться вам с двадцать шестой статьей этой серии. В качестве напоминания: приложение GDB-Demo представляет собой форму авторизации и выглядит так:
Рисунок 2: Внешний вид приложения GDB-Demo
Чтобы пройти процесс авторизации, необходимо ввести корректное имя пользователя и пароль. Наша задача сделать так, чтобы процесс авторизации заканчивался успешно вне зависимости от введенной информации на форме. Мы будем отлаживать и патчить приложение, скомпилированное под архитектуру x86, на ноутбуке, хотя вы можете сделать то же самое и для исполняемых файлов для ARM.
После загрузки приложения запустим его при помощи Xcode, после нам необходимо найти папку с программой. Симулятор Xcode создает подобные папки в директории /Users/$username/Library/Application Support/iPhone Simulator/$ios version of simulator/Applications/. В моем случае это директория /Users/Prateek/Library/Application Support/iPhone Simulator 6.1/Applications/. Зайдите в эту директорию и введите команду ls –al, после чего появится список папок с датой последнего их изменения. Папка с самой крайней датой изменения и будет папкой с нужным нам приложением.
Рисунок 3: Перечень папок с датой последнего изменения
Далее используйте команду open DirectoryName, чтобы открыть директорию в приложении Finder.
Рисунок 4: Содержимое папки приложения GDB-Demo
Кликните правой кнопкой мыши на директории GDB-Demo.app (это пакет приложения) и выберите Show Package contents. Внутри этой папки вы найдете бинарный файл GDB-Demo, который мы будем патчить, используя Hopper.
Рисунок 5: Содержимое пакета приложения GDB-Demo
Теперь откройте Hopper и выберите пункт меню File->Read Executable To Disassemble, а затем укажите путь к бинарному файлу. Также не забудьте закрыть приложение в Xcode, но оставьте симулятор открытым.
После этого Hopper начнет дизассемблировать приложение.
Рисунок 6: Результаты дизассемблирования
Если вы выберите с левой стороны раздел Strings, то увидите все константы, которые Hopper смог достать из исполняемого файла. Если вы читали двадцать шестую статью, то заметите, что пароль также находится в этом списке.
Рисунок 7: Строковые константы, полученные из исполняемого файла
Если вы выберете раздел Labels, то увидите все методы, константы, классы и т. д.
Рисунок 8: Перечень всех методов, констант и классов приложения
Нам нужно найти метод loginButtonTapped, который, как вы помните, отвечает за процесс авторизации. Наберите слово «loginButtonTapped» в поисковой строке. Как только метод найден, необходимо кликнуть по нему, чтобы увидеть дизассемблированную версию.
Рисунок 9: Дизассемблированный метод loginButtonTapped
Одна из самых полезных функций Hopper – возможность увидеть псевдокод функции. Чтобы увидеть псевдокод, необходимо кликнуть на иконку Pseudo Code в правом верхнем углу.
Рисунок 10: Иконка Pseudo Code
Как видно из рисунка ниже, Hopper показал псевдокод функции.
Рисунок 11: Псевдокод метода loginButtonTapped
Это очень полезная возможность, значительно ускоряющая знакомство с логикой работы метода. В данном случае метод возвращает пароль. Еще одна прекрасная возможность Hopper – функция Show CFG, которая позволяет увидеть блок-схему приложения. Кликните на иконку Show CFG, находящуюся слева от иконки Pseudo code.
Рисунок 12: Блок-схема приложения
Если мы прокрутим чуть ниже, то увидим в левой ветке текст Incorrect Username or Password, а в правой - admin page. Наша задача - сделать так, чтобы выполнение всегда шло по правой ветке.
Рисунок 13: В зависимости от введенных данных, приложение идет под одной из веток
Теперь нам нужно найти проверку, после которой алгоритм решает, по какой ветке идти. Как видно из рисунка ниже, это инструкция test cl, 0x1. Если нулевой флаг не заполнен, алгоритм идет по правой ветке (инструкция jne 0xcbc).
Рисунок 14: Здесь решается, по какой ветке алгоритм будет работать дальше
Метка 0x2cbc связана с правой веткой. Если мы изменим инструкцию так, чтобы алгоритм всегда шел по правой ветке, наша задача будут решена.
Рисунок 15: Метка 0x2cbc связана с отображением страницы администратора
Решение задачи довольно простое: нам необходимо поменять инструкцию jne 0xcbc на jmp 0xcbc. Для этого необходимо кликнуть на Modify->Assemble instruction.
Рисунок 16: Для изменения инструкции выбираем соответствующий пункт меню
Далее мы указываем нужную инструкцию и кликаем на Assemble and Go Next.
Рисунок 17: Изменяем нужную инструкцию
Теперь сохраняем все изменения и заменяем предыдущий исполняемый файл. Выберите Go to File -> Produce New, а затем замените предыдущий бинарный файл.
Рисунок 18: Создаем новый исполняемый файл
Далее закройте в симуляторе все работающие экземпляры GDB-Demo и запустите приложение вновь. Нажав на кнопку Login, вы увидите, что процесс авторизации прошел успешно.
Рисунок 19: Успешное завершение процесса авторизации
Мои поздравления. Вы только пропатчили приложение при помощи Hopper. Однако это лишь малая часть возможностей этого инструмента. Рекомендую вам ознакомиться с множеством других его функций.
Когда я загружаю приложения Mac, они имеют расширение .app. Когда я щелкаю правой кнопкой мыши и просматриваю информацию о пакете, я вижу много файлов в нем. Что это за файлы? Означает ли это, что приложения с открытым исходным кодом? Кроме того, как я могу декомпилировать приложение? В Windows я мог использовать шестнадцатеричный редактор и декомпилирование программного обеспечения, чтобы связываться с внутренними компонентами, заставляя приложение делать новые вещи. Как это работает на Mac??
3 ответа 3
Папки .app называются пакетами. Они представляют собой простую презентацию для приложения и позволяют легко перемещать или удалять. Mac OS использует пакеты в каждом месте, когда нужно показать один объект, содержащий несколько файлов (Frameworks, Preferences Pane, Plugins и т.д.).
Большинство приложений в OS X распространяются в виде пакетов, которые выглядят как файл, но на самом деле это папка, содержащая другие файлы и папки. Эти "другие" файлы и папки являются ресурсами, используемыми приложением. В OS X ресурсы (изображения, звуковые файлы и т.д.) Распределяются как отдельные файлы, а не как один большой файл, содержащий все ресурсы - поэтому вам не нужен шестнадцатеричный редактор для просмотра этих файлов ресурсов.
Содержимое пакета .app обычно содержит такие элементы:
Обратите внимание, что каждое приложение в OS X содержит макет, подобный этому, независимо от того, являются ли они приложениями с открытым исходным кодом или нет.
.app "файлы" - это папки, содержащие несколько файлов. То, что вы видите, это файлы, распространяемые вместе с программой, а не исходный код.
Лучшая аналогия, которую я могу придумать, - это если программы Windows были распространены в ZIP-файлах, и вы просто поместили их в C:\Program Files, чтобы установить их вместо их извлечения. (Таким образом, файлы, которые вы видите, являются файлами, которые вы видите в папке «Program Files\program name» этой программы в Windows)
Читайте также: