Jailbreak по ссылке: удаленное исполнение кода на iOS
Первые попытки программировать под iOS я предпринимал в 2011 году, но с первого захода ничего не понял без знания ООП. А изучив ООП на примере параллельно C++ и Objective-C у меня были большие вопросы к... C++. К чему вся эта история? К тому что именно покупка iPad и простота Jeilbraik тех времен влюбила меня в изящность приложений на планшетах. Именно про то как в те времена был устроен Jeilbreak я с удовольствием и прочитал. Как удавалось установить стороннее приложение через посещение сайта?
🟢 Через уязвимости WebKit в iOS.
🟢 Уязвимость позволяет удаленно выполнить код на устройстве жертвы.
🟢 Уязвимости Trident позволили осуществить первый удаленный джейлбрейк.
🟢 Затрагивает JavaScriptCore, движок времени выполнения для JavaScript-кода в WebKit.
🟢 Позволяет создать произвольный примитив для чтения и записи в памяти любого процесса в приложении Safari.
🟢 Была исправлена только в iOS 9.3.5, но код все еще доступен в открытом доступе в архиве WebKit на GitHub.
🟢 Уязвимость может использоваться для повреждения памяти Safari и запуска вредоносного кода.
🟢 Эксплойт для iOS выглядел следующим образом: создает нехватку памяти, чтобы вызвать сборку мусора а после создает произвольный примитив для чтения и записи, который может повредить память.
Через этот же эксплойт позже был взломан Nintendo Switch
Первые попытки программировать под iOS я предпринимал в 2011 году, но с первого захода ничего не понял без знания ООП. А изучив ООП на примере параллельно C++ и Objective-C у меня были большие вопросы к... C++. К чему вся эта история? К тому что именно покупка iPad и простота Jeilbraik тех времен влюбила меня в изящность приложений на планшетах. Именно про то как в те времена был устроен Jeilbreak я с удовольствием и прочитал. Как удавалось установить стороннее приложение через посещение сайта?
Через этот же эксплойт позже был взломан Nintendo Switch
Please open Telegram to view this post
VIEW IN TELEGRAM
Кто-то любит сам писать сам регулярки? Я нет, несмотря на все плюшки
Swift 5.7
для работы с регулярными выражениями, для меня противной осталась формирование регулярки по ТЗ. Для облегчения этой нашел опенсорсный онлайн редактор регулярных выражений:Swift
на вебеHTTP
сервераSwift
регулярок и DSL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
Интероп с C++ открыл новое измерение сложности в Swift, как заметил создатель языка, Chris Lattner в своем интервью, свифт стал слишком сложным. Я слежу за тем как развивается язык и тем, какие конструкции туда добавляются и эти 2 предложения точно не делают язык проще. В чем суть:
SE-0447
вводит абстрацию доступа к непрерывной памяти - Span<T>
Array
, UnsafeBufferPointer
, Foundation.Data
и т.д. SE-0446
вводит новое ограничение ~Escapable
для того чтобы реализовать SE-0447
~Escapable
будет использоваться для типов, которые могут быть скопированы локально, но не могут быть назначены или переданы вне текущего контекста Выглядит круто и логично, но у меня вопросы:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
AVAudioEffectNode: звуковые эффекты, написанные на Swift
Очень редко приходится работать с
🟢 Создается
🟢 Подклассы, такие как
🟢 Для определения описания аудиокомпонента используется
🟢 В
🟢 Объединение источника (SourceNode), приемника (SinkNode) и эффекта (EffectNode) создает надежный и гибкий API для обработки и генерации звука
😺️ Полный проект
Очень редко приходится работать с
AVFoundation
и каждый раз как в первый 😅 . Оказывается, на WWDC 2019 Apple представила AVAudioSourceNode
и AVAudioSinkNode
. Так как это часть AVAudioEngine
и работает с железом, то API там не очень дружелюбное, но очень гибкое. В статье разбирается пример как создавать звуковые эффекты в более приятной манере: AVAudioNode
, который можно подключить к движку, используя AVAudioUnit
AVAudioUnitEffect
, используются для создания пользовательских аудиоэффектов AudioComponentDescription
AVAudioEffectNode
определяется удобный инициализатор для передачи блока рендеринга. Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Короткая но полезная статья про простоту миграции на новый фреймворк тестирования, а именно по переходу на новый
#expect
. Самое приятное что на примере показывается возможность миграции через замнe по-шаблоны, я ранньше писал о использовании такого подхода при миграции с RxSwift на Combine#expect
заменяет XCAssertEqual
и XCAssertTrue
#require
не проходит проверку на ранней стадии #expect
содержит больше деталей и позволяет выполнять тест без дальнейшей отладки.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
3 новые фишки Xcode 16
🟢 Создание файлов: можно создавать пустой файл, без указания расширения или просто выделить кусок кода, скопировать и вставить в навигатор проекта
🟢 Каталог ресурсов: позволяет показать все использования каждого ресурса в проекте
🟢 Режим отладки: можно смотреть весь стек вызова внутри одного таба
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍5
У каждого iOS разработчика был момент, когда при создании нового проекта - листаешь что еще можно создать кроме Command Line Tool и iOS Application. Для браузера можно написать расширение с использованием всех нативных технологий, тут и Swift и SwiftUI и Swift Testing, главный минус только в работе HTML DOM. Вводное демо по созданию и публикации такого расширения показывали еще на WWDC22, но актуальность не потеряло. Если заинтересуетесь, более подробная инструкция есть у Apple:
Я лично еще раз убедился в том, что у меня в браузере не будет никаких расширений, слишком много у них доступа
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
На мой взгляд, не достаточно замеченное сообществом нововведение, которое может значительно повлиять на наши приложения. На WWDC 2023 Apple анонсировала «объединяемые библиотеки»: динамические библиотеки с достаточным количеством метаданных, которые можно статически связать с приложениями.
Это перевернуло игру, теперь есть не только 2 плохих решений, но и компромиссное, хоть и не идеальное. В чем суть была проблема выбора статической или динамической линковки? Статическая линковка означает, что библиотека будет объединена с приложением при компиляции, а динамическая загружает библиотеку при запуске:
И тут появляются Mergeable Libraries, это действительно новый формат, позволяющий динамически подключаться к ним или «объединять» их с приложениями, что по сути является статическим связыванием. Единственный оставшийся компромисс заключается в том, что библиотека остается динамической
Настоятельно рекомендую всем ознакомиться со статьей по миграции проекта на Mergable Libraries, это может значительно улучшить приложения без значительных усилий со стороны разработки
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Очень интересная реализация анимации печати текста. Логика, лежащая в основе анимации:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👌5