Ответ 1
Посмотрел на него, и он не связан с IOSurface. Однако я обнаружил, что он использует dlsym
, и после некоторой дополнительной обратной инженерии я нашел это:
/System/Library/Frameworks/IOKit.framework/IOKit
IOServiceGetMatchingServices
IOServiceGetMatchingService
IOServiceMatching
IOMasterPort
IOIteratorNext
IORegistryEntryCreateCFProperty
IOObjectRelease
/System/Library/Frameworks/UIKit.framework/UIKit
UIGetScreenImage
/System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer
IOMobileFramebufferOpen
IOMobileFramebufferGetLayerDefaultSurface
/System/Library/PrivateFrameworks/IOSurface.framework/IOSurface
IOSurfaceAcceleratorCreate
IOSurfaceAcceleratorTransferSurface
IOSurfaceLock
IOSurfaceUnlock
IOSurfaceGetWidth
IOSurfaceGetHeight
IOSurfaceCreate
IOSurfaceGetBaseAddress
Итак, как вы видите здесь, после каждого пути каркаса - это строки символов, которые он загружает из каждой структуры, динамически. Это делается для того, чтобы избежать проблем с привязкой к частной структуре. Поскольку он загружается во время выполнения, статический анализатор не может сказать, что это приложение использует его, тем самым избегая обнаружения.
Это похоже на то, что мое первоначальное подозрение было правильным; он использует IOSurface для скрытия прошлых ограничений на песочницу, чтобы иметь доступ к сырому экрану. Он также использует UIGetScreenImage
, который я предполагаю для второго метода генерации видео. Он также использует некоторые функции IOKit и функции IOMobileFramebuffer. Похоже, приложение захватывает IOSurface из функции IOMobileFramebufferGetLayerDefaultSurface
. Не совсем уверен, что он использует IOKit, хотя.
В заключение, это приложение использует некоторые подлые методы, чтобы избежать обнаружения статическими анализаторами: он не связан с частными фреймворками, а вместо этого захватывает символы динамически. Он использует комбинацию IOSurface и IOMobileFramebuffer для записи видео или UIGetScreenImage
для другого режима. Это сложное приложение, которое БУДЕТ вытащить из AppStore, поэтому, если вы этого хотите, вам лучше получить его сейчас.
UPDATE:
Похоже, что это приложение действительно было вытащено из AppStore. Если вам посчастливилось схватить копию, прежде чем ее потянуть, это здорово. Я знаю, что я рад, что понял.
Apple, вероятно, оправдала свое решение, заявив, что приложение использует частные API, и это можно рассматривать как потенциальную проблему безопасности (приложение, которое следит за вами, когда вы вводите свой пароль в iTunes, является одним из примеров, страшная мысль). Интересно, приведет ли это к изменению их процесса рассмотрения, но мы, скорее всего, никогда не узнаем. Мне интересно, что есть еще много трюков, которые разработчики могли бы использовать, чтобы скрыть поведение своего приложения от статического анализа. Никакой процесс рассмотрения не является совершенным, но они могут делать очень хорошо. Даже если Apple автоматически откажется от приложений, которые ссылаются на символ dlsym
, существуют методы, которые можно использовать для обхода обнаружения.
ОБНОВЛЕНИЕ 2:
По-видимому, теперь есть еще одна версия этого приложения в AppStore. Он называется "Disp Recorder" и имеет тот же самый точный значок, что и первый. GUI выглядит почти идентично оригинальному с небольшими незначительными изменениями. Я еще не отменил новый, но я готов поспорить, что они использовали одни и те же методы, чтобы скрыть незаконное поведение. Я обновлю этот ответ, как только изменю новую версию. Новый стоит 5 долларов США, но если вы когда-либо захотели использовать приложение для записи на экране на неуправляемом устройстве, вы должны его захватить до его вытягивания.
ОБНОВЛЕНИЕ 3:
Похоже, я был очень прав, как работает это приложение. В GitHub есть реализация с открытым исходным кодом @coolstarorg под названием RecordMyScreen. Если вам все еще интересно, как работает это приложение, я предлагаю вам проверить его.