此处去以iOS逆向YouTube的app为例,介绍典型的iOS逆向的过程。
此处逆向YouTube的目的暂且定为,尝试搞懂YouTube广告过滤的可能性和底层涉及相关机制。
逆向YouTube过程
下面介绍,如何进行iOS逆向YouTube的过程。
砸壳ipa
在iPhone越狱后,接着去逆向iOS的YouTube。
先准备好砸壳后的ipa。
两种可能=来源:
别人的
【部分解决】下载16.36.4旧版本YouTube的ipa
【未解决】寻找和下载16.36.4或更低版本的YouTube的ipa
别人给的
网上找的
自己砸壳得到的
此处主要介绍后者:
自己从AppStore中安装YouTube,再砸壳出ipa
先去AppStore中安装YouTube
【记录】国行越狱iPhone安装YouTube
【无需解决】国内越狱iPhone如何翻墙上外网使用YouTube
再去砸壳
【已解决】Mac中用frida-ios-dump去砸壳出YouTube的ipa文件
【已解决】frida-ios-dump砸壳YouTube但是无法启动应用
安装ipa到iPhone,确保YouTube正常使用
【已解决】用Filza安装YouTube的ipa确认能正常运行
【已解决】iPhone中查看已安装app的包名
【记录】测试16.44.4旧版YouTube的ipa广告拦截是否也时间重置
说明:动态调试才需要,一般静态分析,不需要
涉及帖子
【未解决】Cydia中安装AppStore++寻找YouTube的16.36.4的旧版本
【未解决】试试CokePokes的原版AppStore++能否安装旧版YouTube
【已解决】安装CokePokes的原版AppStore++
【未解决】用Cydia致尚官方源安装的AppStore++安装旧版YouTube
【未解决】AppStore++用Manual Install Advanced去尝试安装旧版YouTube
【已解决】Cydia中安装应用降级AppStore++插件
TODO:
【记录】class-dump导出头文件:YouTube的动态库二进制Module_Framework
【未解决】class-dump导出YouTube头文件报错:Unknown load command 0x00000032
【已解决】Mac中用class-dump导出YouTube头文件
用class-dump导出YouTube的头文件
此处YouTube有2个二进制:
YouTube
Module_Framework
所以要分别导出对应的头文件。
导出后的效果:
2.7万多个头文件
3800多个头文件
主要涉及,分别用IDA加载和分析,YouTube的2个二进制的文件:
YouTube
Module_Framework
然后分析其代码逻辑。
其中最核心用法是,找到可以的要研究的类的函数后,去Functions窗口中,通过函数名搜索函数,找到对应汇编代码,再F5查看反编译后的伪代码,尝试搞懂代码的具体逻辑。
为了更好的,全局去搜一些类、变量、字符串等,用于iOS逆向研究YouTube的逻辑
所以考虑去导出全部的IDA伪代码:
TODO:
【未解决】IDA图形界面GUI模式使用ida-batch_decompile批量导出全部YouTube的Module_Framework全部伪代码
【未解决】用IDA的命令行文本模式使用ida-batch_decompile批量导出全部YouTube的Module_Framework全部伪代码
【未解决】用插件导出IDA的YouTube的Module_Framework的全部反汇编的源码伪代码
【记录】IDA中用idat64的Batch Mode尝试反编译导出全部源代码:试试二进制小点的
【已解决】IDA中用idat64的Batch Mode尝试反编译导出YouTube的Module_Framework全部代码伪代码
动态调试 常会涉及:分析YouTube的界面元素
常用工具:
Reveal
Cycript
TODO:
Reveal
【已解决】Mac中下载和安装Reveal
【已解决】MonkeyDev中如何使用Reveal调试YouTube广告页面元素
【已解决】Reveal报错:The app is linked against an older version of the Reveal library
【记录】通过Reveal查看YouTube广告页面元素
【已解决】Mac中Reveal无法启动
【间接解决】Reveal加载页面始终无法完成无法刷新
【记录】XCode和Reveal配合调试YouTube的广告相关逻辑
【记录】通过Reveal查看页面元素找YouTube广告相关类
【记录】用Reveal查看YouTube跳过广告相关页面的元素和类
TODO:
Cycript
【已解决】用MonkeyDev中Cycript去调试YouTube的UI页面的元素
【记录】Mac中用csrutil关闭SIP
【未解决】install_name_tool
【记录】Cycript输出的YouTube的当前页面的类
【已解决】Mac中运行Cycript报错:dyld Library not loaded libruby.2.0.0.dylib
调试代码逻辑
MonkeyDev调试YouTube的代码逻辑:
TODO:
【记录】恢复自己Mac的iOS逆向开发环境
【已解决】Xcode调试越狱iPhone6中的YouTube
【已解决】XCode+MonkeyDev动态调试YouTube的ipa
【记录】研究YouTube广告拦截导致视频从头播放的原因:XCode+MonkeyDev动态调试
【记录】恢复iOS逆向Xcode调试YouTube的开发环境
期间涉及:写hook代码,加断点调试:
找到一些可疑的,需要调试确认是否被调用到的类,则就是:去写hook代码,加断点,去调试看看是否触发:
如果触发:说明推测和判断是对的
如果没触发:说明推测出错
再去找其他可疑的类,再继续去写hook加断点去调试
涉及的过程大概是:
【未解决】研究iPhone中YouTube的app播放视频中间广告导致从头播放
【已解决】iOS的Theos的Logos的hook代码中获取当前YouTube类YTWatchController的属性值activeVideoID
【记录】XCode的lldb调试YouTube的类:YTWatchController
【已解决】XCode+MonkeyDev动态调试YouTube:让程序停止在出现广告的页面
【基本解决】XCode的lldb中输出YouTube类MDXSession实例的属性值currentVideoID
【记录】给MonkeyDev的YouTube的hook中加上通用log代码
【已解决】XCode的lldb调试输出YouTube类YTWatchController实例的属性值和调用函数
【记录】XCode+MonkeyDev动态调试YouTube:寻找和广告相关的类和逻辑
【记录】XCode中Pause暂停去找YouTube的广告相关的类
【记录】研究YouTube广告逻辑:MDXPlaybackController的didPressSkipAd
【记录】研究YouTube广告逻辑:IDA中搜skipAd
【未解决】YouTube动态调试:写hook代码监控视频播放时间被重置变成0
以及后续换其他思路
【记录】从.googlevideo.com入手找YouTube广告视频相关逻辑
【记录】研究YouTube函数:resetWatchTime
【记录】XCode+MonkeyDev动态调试YouTube:寻找和广告相关的类和逻辑
【未解决】研究YouTube逻辑:找到最初的广告视频请求
【未解决】研究YouTube逻辑:找到最初广告视频请求的响应
【已解决】研究YouTube逻辑:找到带ctier=A的response和error出错的地方
【已解决】研究YouTube逻辑:ctier=A时的 request和response的函数调用顺序
【未解决】研究YouTube逻辑:寻找搞懂广告视频ID获取的大流程
【已解决】研究YouTube逻辑:抓包iOS版YouTube的广告视频ID产生的大流程
对于普通的iOS逆向,就重复上述过程
对于此处,逆向YouTube来说,具体是:
静态分析
staticAnalysis
YouTube_17.08.2_headers
header_ModuleFramework
headers_YouTube
研究和搜索头文件中的类,找出可疑的类
研究导出的字符串等资源中,是否有我们要的内容
staticAnalysis
└── YouTube_17.08.2├── Module_Framework│ ├── Module_Framework_nm.txt│ ├── Module_Framework_otool_l.txt│ ├── Module_Framework_otool_oV.txt│ └── Module_Framework_strings.txt├── YouTube│ ├── YouTube_nm.txt│ ├── YouTube_otool_l.txt│ ├── YouTube_otool_oV.txt
动态调试
加过滤条件
log太多了,如何优化减少log
过滤出我们所关心的类,比如initplayback,videoplayback等url
https://xxx.googlevideo.com/initplayback?xxx
https://xxx.googlevideo.com/videoplayback?xxx
比如找到了http的request和response的类,还要继续加过滤条件
【已解决】研究YouTube逻辑:log日志打印优化每隔几次才输出
TODO:
针对可疑的类和函数,写hook代码,加断点调试
从界面元素入手,找到对应的类或父类
作为后续深入研究的切入点:找类的相关头文件
分析界面元素
调试代码逻辑
期间涉及
为了动态调试 常会涉及:恢复符号表
TODO:
【已解决】restore-symbol恢复YouTube的Block符号表报错:Address not found in the image
【记录】YouTube恢复符号表后Xcode调试效果
【已解决】给YouTube恢复符号表方便Xcode调试
【记录】YouTube恢复符号表恢复出部分无效的symbol符号
期间涉及:iOS的app的抓包:
TODO:
【已解决】Mac用Charles抓包iPhone中YouTube视频过滤广告导致从头播放的数据包
TODO:
网络请求
【整理】YouTube广告拦截从头播放视频:相关的网络请求和大概逻辑
网络协议
【整理】YouTube相关:QUIC协议和源码
【整理】Cronet相关源码和定义和具体实现
【已解决】YouTube中struct Cronet_UrlRequestCallback的具体定义实现
【已解决】iOS的YouTube中Cronet_UrlRequestCallback的OnFailed中cronet=10和quic协议关系
Cronet
QUIC
【整理】YouTube涉及到的Network、quic等Chromium相关源码
【整理】YouTube涉及到Chromium中Cronet相关源码和文档
YouTube视频格式
【整理】YouTube中视频相关信息:ISO Media file produced by Google Inc
【未解决】YouTube的response的data视频格式:ftyp=dash
【整理】YouTube逻辑:视频流格式代码
HTTP协议
【已解决】研究YouTube视频内容请求:Transfer-Encoding chunked
【整理】YouTube中Module_Framework函数对应关系 20220804
YouTube广告过滤规则
【记录】研究YouTube逻辑:验证最新圈X的规则能否拦截广告
【记录】pico中使用圈X最新规则的YouTube广告拦截效果
圈X
【记录】测试最新版过滤规则的iOS的YouTube的app中广告过滤效果
调试相关
【记录】Xcode+MonkeyDev动态调试YouTube:广告页面相关类
【记录】调试YouTube广告页面:调试相关数据
内部很多类的具体实现
SRLRegistry_sharedInstance.coffee
(lldb) po 0x00000002839803c0<SRLRegistry: 0x2839803c0>Single bindings:{"ELMByteStore_API" = "SRLImplementation<0x283690d50, instanceType: ELMByteStore, lifetime: 0, scopeType: 0, configuration: None>";"ELMJSModuleCache_API" = "SRLImplementation<0x2837f7d80, instanceType: ELMJSModuleCache, lifetime: 0, scopeType: 0, configuration: None>";"ELMResourceLoader_API" = "SRLImplementation<0x283710a50, instanceType: ELMResourceLoader, lifetime: 0, scopeType: 0, configuration: None>";"ELMRuntimeConfigFactory_API" = "SRLImplementation<0x283762f40, instanceType: YTELMRuntimeConfigFactory, lifetime: 0, scopeType: 0, configuration: None>";"ELMStore_API" = "SRLImplementation<0x283690cf0, instanceType: YTELMStore, lifetime: 0, scopeType: 0, configuration: None>";"GHKY2021BugfixesService_API" = "SRLImplementation<0x28363c990, instanceType: GHKY2021Bugfixes, lifetime: 0, scopeType: 0, configuration: None>";"GIKAccountDeletionWipeoutManager_API" = "SRLImplementation<0x2837c9650, instanceType: GIKAccountDeletionWipeoutManagerImpl, lifetime: 0, scopeType: 0, configuration: None>";"GIKAccountSourceService_API" = "SRLImplementation<0x28376ca50, instanceType: GIKAccountSourceServiceImpl, lifetime: 0, scopeType: 0, configuration: None>";"GIKSSOAccountSourceService_API" = "SRLImplementation<0x28376cae0, instanceType: GIKSSOAccountSourceServiceImpl, lifetime: 0, scopeType: 0, configuration: None>";"GIKSSOBridgeService_API" = "SRLImplementation<0x28376cb10, instanceType: GIKSSOBridgeServiceImpl, lifetime: 0, scopeType: 0, configuration: None>";"GIKSharedLibraryService_API" = "SRLImplementation<0x28376ca80, instanceType: GIKSharedLibraryServiceImpl, lifetime: 0, scopeType: 0, configuration: None>";"HAMClock_API" = "SRLImplementation<0x283651f20, instanceType: HAMSystemClock, lifetime: 0, scopeType: 0, configuration: None>";"HAMDataLoadTaskObserver_API" = "SRLImplementation<0x2834811a0, instanceType: MLHAMDataLoadTaskObserverImpl, lifetime: 0, scopeType: 0, configuration: None>";"HAMIdleTimer_API" = "SRLImplementation<0x2834a3420, instanceType: HAMIdleTimerImpl, lifetime: 0, scopeType: 0, configuration: None>";"HAMSystemNotifications_API" = "SRLImplementation<0x2834b3960, instanceType: YTSystemNotifications, lifetime: 0, scopeType: 0, configuration: None>";"IGDManager_API" = "SRLImplementation<0x283698030, instanceType: IGDManager, lifetime: 0, scopeType: 0, configuration: None>";"MDXConfig_API" = "SRLImplementation<0x283763660, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"MDXServices_API" = "SRLImplementation<0x283763810, instanceType: MDXRealServices, lifetime: 0, scopeType: 0, configuration: None>";"MLAVAssetDownloader_API" = "SRLImplementation<0x2836f2f70, instanceType: MLAVAssetDownloader, lifetime: 0, scopeType: 0, configuration: None>";"MLAudioSession_API" = "SRLImplementation<0x2834846c0, instanceType: MLAudioSession, lifetime: 0, scopeType: 0, configuration: None>";"MLCDM_API" = "SRLImplementation<0x2834a5e30, instanceType: MLWidevineCDMImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLCacheProvider_API" = "SRLImplementation<0x2834b2460, instanceType: MLDefaultCacheProvider, lifetime: 0, scopeType: 0, configuration: None>";"MLCaptionConfig_API" = "SRLImplementation<0x2834a9aa0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"MLCaptionControllerFactory_API" = "SRLImplementation<0x2834a7d80, instanceType: MLDefaultCaptionControllerFactory, lifetime: 0, scopeType: 0, configuration: None>";"MLCaptionDisplayControllerFactory_API" = "SRLImplementation<0x2834a39f0, instanceType: YTGLCaptionDisplayControllerFactory, lifetime: 0, scopeType: 0, configuration: None>";"MLCaptionDisplaySettingsProvider_API" = "SRLImplementation<0x2834ac4e0, instanceType: MLDefaultCaptionDisplaySettingsProvider, lifetime: 0, scopeType: 0, configuration: None>";"MLCaptionService_API" = "SRLImplementation<0x283682100, instanceType: MLDefaultCaptionService, lifetime: 0, scopeType: 0, configuration: None>";"MLClientInfoFiller_API" = "SRLImplementation<0x28348a190, instanceType: MLClientInfoFillerImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLClockOffsetEstimator_API" = "SRLImplementation<0x2834b1440, instanceType: MLClockOffsetEstimator, lifetime: 0, scopeType: 0, configuration: None>";"MLDataPlanController_API" = "SRLImplementation<0x2836098f0, instanceType: MLDataPlanController, lifetime: 0, scopeType: 0, configuration: None>";"MLDefaultViewportSizeProvider_API" = "SRLImplementation<0x283482e50, instanceType: MLSingletonViewportSizeProvider, lifetime: 0, scopeType: 0, configuration: None>";"MLHAMAudioEngineProvider_API" = "SRLImplementation<0x283487690, instanceType: MLHAMAudioEngineProvider, lifetime: 0, scopeType: 0, configuration: None>";"MLHAMDataLoaderProvider_API" = "SRLImplementation<0x283608f90, instanceType: MLHAMDataLoaderProviderImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLInitialFormatSelectionConfig_API" = "SRLImplementation<0x28348a0d0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"MLInnerTubeContextDecorator_API" = "SRLImplementation<0x28360a400, instanceType: MLInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>";"MLLocalAVAssetBundleManager_API" = "SRLImplementation<0x2836f2df0, instanceType: MLLocalAVAssetBundleManager, lifetime: 0, scopeType: 0, configuration: None>";"MLMediaCapabilitiesProvider_API" = "SRLImplementation<0x28348a100, instanceType: MLMediaCapabilitiesProviderImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLNetworkStatsProvider_API" = "SRLImplementation<0x2835627f0, instanceType: MLNetworkStatsProvider, lifetime: 0, scopeType: 0, configuration: None>";"MLOfflineRepoFactory_API" = "SRLImplementation<0x2836f2ee0, instanceType: YTOfflineRepoFactory, lifetime: 0, scopeType: 0, configuration: None>";"MLOfflineTracklistCaptionProvider_API" = "SRLImplementation<0x2834a9ad0, instanceType: YTOfflineVideoCaptionsProvider, lifetime: 0, scopeType: 0, configuration: None>";"MLOfflineVideoDownloadController_API" = "SRLImplementation<0x2836f33f0, instanceType: MLOfflineVideoDownloadControllerImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLOnesieDataSaverConfig_API" = "SRLImplementation<0x283562910, instanceType: MLOnesieDataSaverConfigImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLOnesieFetcherService_API" = "SRLImplementation<0x2834b1560, instanceType: MLOnesieFetcherService, lifetime: 0, scopeType: 0, configuration: None>";"MLOnesieHostProvider_API" = "SRLImplementation<0x283561380, instanceType: MLOnesieHostProvider, lifetime: 0, scopeType: 0, configuration: None>";"MLOnesieRequestFactory_API" = "SRLImplementation<0x2834b2e50, instanceType: MLOnesieRequestFactory, lifetime: 0, scopeType: 0, configuration: None>";"MLOnesieVideoDataProvider_API" = "SRLImplementation<0x2834a69a0, instanceType: MLOnesieVideoDataProvider, lifetime: 0, scopeType: 0, configuration: None>";"MLPIPController_API" = "SRLImplementation<0x2835657a0, instanceType: MLPIPController, lifetime: 0, scopeType: 0, configuration: None>";"MLPlayerPool_API" = "SRLImplementation<0x283483a80, instanceType: MLPlayerPoolImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLPlayerViewFactory_API" = "SRLImplementation<0x283483ab0, instanceType: YTGLMediaPlayerViewFactory, lifetime: 0, scopeType: 0, configuration: None>";"MLScreenCapturedStatus_API" = "SRLImplementation<0x2834a3630, instanceType: MLScreenCapturedStatusImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLStreamStoreConfig_API" = "SRLImplementation<0x283483b10, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"MLStreamStore_API" = "SRLImplementation<0x283483ae0, instanceType: MLStreamStore, lifetime: 0, scopeType: 0, configuration: None>";"MLTFLiteModelService_API" = "SRLImplementation<0x28360a8e0, instanceType: MLTFLiteModelService, lifetime: 0, scopeType: 0, configuration: None>";"MLTFLiteNetworkModel_API" = "SRLImplementation<0x283562700, instanceType: MLTFLiteNetworkModel, lifetime: 0, scopeType: 0, configuration: None>";"MLUserFeatures_API" = "SRLImplementation<0x2834b2df0, instanceType: MLUserFeaturesImpl, lifetime: 0, scopeType: 0, configuration: None>";"MLVideoDownloadTaskDelegate_API" = "SRLImplementation<0x2836f2e20, instanceType: MLVideoDownloaderMediaDownloaderShim, lifetime: 0, scopeType: 0, configuration: None>";"MLVideoDownloaderDelegate_API" = "SRLImplementation<0x2836f2c40, instanceType: MLVideoDownloaderMediaDownloaderShim, lifetime: 0, scopeType: 0, configuration: None>";"MLVideoDownloaderMediaDownloaderShim_API" = "SRLImplementation<0x2836f2e50, instanceType: MLVideoDownloaderMediaDownloaderShim, lifetime: 0, scopeType: 0, configuration: None>";"MLVideoDownloader_API" = "SRLImplementation<0x2836f2d90, instanceType: MLVideoDownloader, lifetime: 0, scopeType: 0, configuration: None>";"PHTPhenotypeFlagsRegistryService_API" = "SRLImplementation<0x28363c9c0, instanceType: PHTPhenotypeFlagsRegistry, lifetime: 0, scopeType: 0, configuration: None>";"RCHServiceConfigurationProvider_API" = "SRLImplementation<0x283682af0, instanceType: YTRCHServiceConfigurationProvider, lifetime: 0, scopeType: 0, configuration: None>";"RCHService_API" = "SRLImplementation<0x283682ac0, instanceType: RCHServiceImpl, lifetime: 0, scopeType: 0, configuration: None>";"SSOConfigurationProvider_API" = "SRLImplementation<0x2837c9e60, instanceType: YTSSOServiceFactory, lifetime: 0, scopeType: 0, configuration: None>";"SSOServiceContainer_API" = "SRLImplementation<0x28376d200, instanceType: SSOServiceContainerImpl, lifetime: 0, scopeType: 0, configuration: None>";"SSOService_API" = "SRLImplementation<0x2837c9e90, instanceType: SSOService, lifetime: 0, scopeType: 0, configuration: None>";"YTAccountLinkingMenuVisibilityHandler_API" = "SRLImplementation<0x282b9b7e0, instanceType: YTAccountLinkingMenuVisibilityHandler, lifetime: 0, scopeType: 0, configuration: None>";"YTAccountScopedCommandRegistrar_API" = "SRLImplementation<0x283574600, instanceType: YTAccountScopedCommandRegistrar, lifetime: 0, scopeType: 1, configuration: None>";"YTAccountScopedCommandRouter_API" = "SRLImplementation<0x2835725b0, instanceType: YTAccountScopedCommandRouter, lifetime: 0, scopeType: 1, configuration: None>";"YTAccountScopedInnerTubeContextFactory_API" = "SRLImplementation<0x2834e9410, instanceType: YTAccountScopedInnerTubeContextFactory, lifetime: 0, scopeType: 1, configuration: None>";"YTAccountScopedInnerTubeRequestFactory_API" = "SRLImplementation<0x2834e91d0, instanceType: YTAccountScopedInnerTubeRequestFactory, lifetime: 0, scopeType: 1, configuration: None>";"YTAccountScopedInnerTubeRequestorFactory_API" = "SRLImplementation<0x2834e9260, instanceType: YTAccountScopedInnerTubeRequestorFactory, lifetime: 0, scopeType: 1, configuration: None>";"YTAccountScopedInnerTubeResponseCache_API" = "SRLImplementation<0x2834e91a0, instanceType: YTAccountScopedInnerTubeResponseCache, lifetime: 0, scopeType: 1, configuration: None>";"YTAccountScopedInnerTubeStackConfiguration_API" = "SRLImplementation<0x2834e92f0, instanceType: YTAccountScopedInnerTubeStackConfiguration, lifetime: 0, scopeType: 0, configuration: None>";"YTAccountScopedVisitorDataRequestDecorator_API" = "SRLImplementation<0x2834e9230, instanceType: YTAccountScopedVisitorDataRequestDecorator, lifetime: 0, scopeType: 1, configuration: None>";"YTActiveStateDescriptorSubControllerFactoryProtocol_API" = "SRLImplementation<0x28360b3c0, instanceType: YTCoreActiveStateDescriptorSubControllerFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTActiveVideoNotifier_API" = "SRLImplementation<0x28376a160, instanceType: YTActiveVideoNotifier, lifetime: 0, scopeType: 0, configuration: None>";"YTAdBreakFetcherAPI_API" = "SRLImplementation<0x282bbb0f0, instanceType: YTAdBreakRendererFetcher, lifetime: 0, scopeType: 0, configuration: None>";"YTAdCuepointAPI_API" = "SRLImplementation<0x2834879f0, instanceType: YTAdCuepointEventCenter, lifetime: 0, scopeType: 0, configuration: None>";"YTAdElementsCellAPIImpl_API" = "SRLImplementation<0x2837014d0, instanceType: YTAdElementsCellAPIImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTAdElementsCellExternallyManagedSlotAdapter_API" = "SRLImplementation<0x28362a040, instanceType: YTAdElementsCellExternallyManagedSlotAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTAdInnerTubeConfig_API" = "SRLImplementation<0x283711680, instanceType: YTRealAdInnerTubeConfig, lifetime: 0, scopeType: 0, configuration: None>";"YTAdInterruptAPI_API" = "SRLImplementation<0x282b88240, instanceType: YTAdsPlaybackService, lifetime: 0, scopeType: 0, configuration: None>";"YTAdIntervalManagerTriggerAdapter_API" = "SRLImplementation<0x282b887e0, instanceType: YTAdIntervalManagerTriggerAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTAdIntervalManager_API" = "SRLImplementation<0x282bb8390, instanceType: YTAdIntervalManager, lifetime: 0, scopeType: 0, configuration: None>";"YTAdLoggingAPI_API" = "SRLImplementation<0x2834ae5b0, instanceType: YTAdsPlaybackService, lifetime: 0, scopeType: 0, configuration: None>";"YTAdMacroExpanderProvider_API" = "SRLImplementation<0x283650570, instanceType: YTAdMacroExpanderProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsControlFlowEventTriggerAdapter_API" = "SRLImplementation<0x28349be40, instanceType: YTAdsControlFlowEventTriggerAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsControlFlowIDGenerator_API" = "SRLImplementation<0x28362a010, instanceType: YTAdsControlFlowIDGeneratorImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsControlFlowManager_API" = "SRLImplementation<0x283487600, instanceType: YTAdsControlFlowManagerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsControlFlowObservable_API" = "SRLImplementation<0x28349a2e0, instanceType: YTAdsControlFlowManagerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsControlFlowOpportunityReceivedCommandAPIListener_API" = "SRLImplementation<0x283629ec0, instanceType: YTCommandDrivenExternallyManagedSlotOpportunityAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsControlFlowOpportunityReceivedCommandHandler_API" = "SRLImplementation<0x2836299e0, instanceType: YTAdsControlFlowOpportunityReceivedCommandHandler, lifetime: 0, scopeType: 1, configuration: None>";"YTAdsEventLoggingController_API" = "SRLImplementation<0x283629f20, instanceType: YTAdsEventLoggingControllerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsFrequencyCapProtocol_API" = "SRLImplementation<0x2834b0db0, instanceType: YTFrequencyCapTracker, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsPlaybackService_API" = "SRLImplementation<0x2834a2e50, instanceType: YTAdsPlaybackService, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsPlayerServices_API" = "SRLImplementation<0x2834963a0, instanceType: YTRealAdsPlayerServices, lifetime: 0, scopeType: 0, configuration: None>";"YTAdsSKOverlayService_API" = "SRLImplementation<0x28348f0f0, instanceType: YTAdsMainAppSKOverlayServiceImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTAgeCapabilitiesService_API" = "SRLImplementation<0x283763510, instanceType: YTAgeCapabilitiesServiceImpl, lifetime: 0, scopeType: 4, configuration: None>";"YTAppBrowseSwipeLeftCommandProvider_API" = "SRLImplementation<0x2836bf300, instanceType: YTReelCameraCommandCache, lifetime: 0, scopeType: 0, configuration: None>";"YTAppConfig_API" = "SRLImplementation<0x28357f1e0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTAppFlowStateController_API" = "SRLImplementation<0x283681920, instanceType: YTAppFlowStateController, lifetime: 0, scopeType: 0, configuration: None>";"YTAppHomeElementsRegistry_API" = "SRLImplementation<0x2836ea0a0, instanceType: YTAppHomeElementsRegistry, lifetime: 0, scopeType: 0, configuration: None>";"YTAppMealbarPromoController_API" = "SRLImplementation<0x28369df20, instanceType: YTAppMealbarPromoController, lifetime: 0, scopeType: 0, configuration: None>";"YTAppOfflineContentRepairController_API" = "SRLImplementation<0x2836fd380, instanceType: YTAppOfflineContentRepairController, lifetime: 0, scopeType: 0, configuration: None>";"YTAppOfflineResumeController_API" = "SRLImplementation<0x28349e340, instanceType: YTAppOfflineResumeController, lifetime: 0, scopeType: 0, configuration: None>";"YTAppOfflineResumeSyncController_API" = "SRLImplementation<0x28349e4f0, instanceType: YTAppOfflineResumeSyncController, lifetime: 0, scopeType: 0, configuration: None>";"YTAppOfflineVideoController_API" = "SRLImplementation<0x283480840, instanceType: YTAppOfflineVideoController, lifetime: 0, scopeType: 0, configuration: None>";"YTAppSettingsStore_API" = "SRLImplementation<0x2836feb80, instanceType: YTAppSettingsStore, lifetime: 0, scopeType: 0, configuration: None>";"YTAppStartupInstrumentationTransmitter_API" = "SRLImplementation<0x28356f0c0, instanceType: YTGELCSITransmitter, lifetime: 0, scopeType: 0, configuration: None>";"YTAppStartupReasonController_API" = "SRLImplementation<0x283689680, instanceType: (null), lifetime: 1, scopeType: 0, configuration: None>";"YTAppThemeSettingPromoController_API" = "SRLImplementation<0x2836cc600, instanceType: YTAppThemeSettingPromoController, lifetime: 0, scopeType: 0, configuration: None>";"YTAppTransactionQueueController_API" = "SRLImplementation<0x28369e0d0, instanceType: YTAppTransactionQueueController, lifetime: 0, scopeType: 0, configuration: None>";"YTAppUserDefaultsMigrator_API" = "SRLImplementation<0x283481c50, instanceType: YTAppUserDefaultsMigrator, lifetime: 0, scopeType: 0, configuration: None>";"YTAppViewController_API" = "SRLImplementation<0x283690c60, instanceType: YTAppViewController, lifetime: 0, scopeType: 0, configuration: None>";"YTAttestationChallengeService_API" = "SRLImplementation<0x283763570, instanceType: YTAttestationChallengeService, lifetime: 0, scopeType: 0, configuration: None>";"YTAudioSession_API" = "SRLImplementation<0x2837cb660, instanceType: MLAudioSession, lifetime: 0, scopeType: 0, configuration: None>";"YTBackAsStackManager_API" = "SRLImplementation<0x283698660, instanceType: YTBackAsStackManager, lifetime: 0, scopeType: 0, configuration: None>";"YTBackgroundTasksController_API" = "SRLImplementation<0x2836cadc0, instanceType: YTAppBackgroundTasksController, lifetime: 0, scopeType: 0, configuration: None>";"YTBackgroundabilityPolicy_API" = "SRLImplementation<0x2834849c0, instanceType: YTBackgroundabilityPolicy, lifetime: 0, scopeType: 0, configuration: None>";"YTBedtimeReminderController_API" = "SRLImplementation<0x2836ad6e0, instanceType: YTBedtimeReminderController, lifetime: 0, scopeType: 0, configuration: None>";"YTBelowPlayerCompanionRenderingAPIImpl_API" = "SRLImplementation<0x2828ad500, instanceType: YTBelowPlayerCompanionRenderingAPIImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTBelowPlayerImmersiveRenderingAPIImpl_API" = "SRLImplementation<0x2828ad530, instanceType: YTBelowPlayerImmersiveRenderingAPIImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTBelowPlayerImmersiveSlotFulfillmentAdapterFactory_API" = "SRLImplementation<0x282bcc450, instanceType: YTBelowPlayerImmersiveSlotFulfillmentAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTBelowPlayerSlotFulfillmentAdapterFactory_API" = "SRLImplementation<0x282bcc2a0, instanceType: YTBelowPlayerSlotFulfillmentAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTBlobStorageBlocking_API" = "SRLImplementation<0x2836b23a0, instanceType: YTPINDiskCacheBlobStorage, lifetime: 0, scopeType: 0, configuration: None>";"YTBlobStorage_API" = "SRLImplementation<0x28360a340, instanceType: YTPINDiskCacheBlobStorage, lifetime: 0, scopeType: 0, configuration: None>";"YTBrowseService_API" = "SRLImplementation<0x283714000, instanceType: YTAppBrowseService, lifetime: 0, scopeType: 4, configuration: None>";"YTCTTelephonyNetworkInfo_API" = "SRLImplementation<0x2837f8690, instanceType: YTCTTelephonyNetworkInfoImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTCastSessionController_API" = "SRLImplementation<0x282b9af10, instanceType: YTNoOpCastSessionController, lifetime: 0, scopeType: 0, configuration: None>";"YTCellFactory_API" = "SRLImplementation<0x28361f030, instanceType: YTInnerTubeCellFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTClearcutController_API" = "SRLImplementation<0x2837c8930, instanceType: YTClearcutController, lifetime: 0, scopeType: 0, configuration: None>";"YTClientEnvironment_API" = "SRLImplementation<0x2834ab090, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTClientEventIdController_API" = "SRLImplementation<0x2837fce10, instanceType: YTClientEventIdController, lifetime: 0, scopeType: 0, configuration: None>";"YTClipController_API" = "SRLImplementation<0x282b82070, instanceType: YTClipController, lifetime: 0, scopeType: 0, configuration: None>";"YTClipsElementsRegistry_API" = "SRLImplementation<0x282b820d0, instanceType: YTClipsElementsRegistry, lifetime: 0, scopeType: 0, configuration: None>";"YTClockEntityTransformationTrigger_API" = "SRLImplementation<0x2836f1fb0, instanceType: YTClockEntityTransformationTrigger, lifetime: 0, scopeType: 0, configuration: None>";"YTColdConfig_API" = "SRLImplementation<0x28379b5a0, instanceType: YTColdConfig, lifetime: 0, scopeType: 0, configuration: None>";"YTCollectionScrollTrackerSamplerGate_API" = "SRLImplementation<0x2836c6e50, instanceType: YTCollectionScrollTrackerSamplerGate, lifetime: 0, scopeType: 0, configuration: None>";"YTColorStyle_API" = "SRLImplementation<0x283767570, instanceType: YTAppColorStyle, lifetime: 0, scopeType: 0, configuration: None>";"YTCommandRegistrar_API" = "SRLImplementation<0x283681b60, instanceType: YTCommandRegistrar, lifetime: 0, scopeType: 0, configuration: None>";"YTCommandRouter_API" = "SRLImplementation<0x283763630, instanceType: YTCommandRouter, lifetime: 0, scopeType: 0, configuration: None>";"YTCompanionAdSectionControllerProvider_API" = "SRLImplementation<0x282bfaa60, instanceType: YTCompanionAdSectionControllerProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTConfigService_API" = "SRLImplementation<0x28357edf0, instanceType: YTConfigService, lifetime: 0, scopeType: 0, configuration: None>";"YTConnectionStatusController_API" = "SRLImplementation<0x283698930, instanceType: YTConnectionStatusController, lifetime: 0, scopeType: 0, configuration: None>";"YTConsistencyTokenJarVolatileCache_API" = "SRLImplementation<0x283714240, instanceType: YTConsistencyTokenJarVolatileCache, lifetime: 0, scopeType: 0, configuration: None>";"YTContentPlaybackInfoAPI_API" = "SRLImplementation<0x283487ab0, instanceType: YTAdsPlaybackService, lifetime: 0, scopeType: 0, configuration: None>";"YTContentVideoPlayerResponseSlotOpportunityAdapter_API" = "SRLImplementation<0x283487c30, instanceType: YTContentVideoPlayerResponseSlotOpportunityAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTCoreDataDelayedEventQueue_API" = "SRLImplementation<0x2837ef630, instanceType: YTCoreDataDelayedEventQueue, lifetime: 0, scopeType: 0, configuration: None>";"YTCrashConfig_API" = "SRLImplementation<0x283689500, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTCrashContextController_API" = "SRLImplementation<0x283689560, instanceType: YTCrashContextController, lifetime: 0, scopeType: 0, configuration: None>";"YTCrashContextProtocol_API" = "SRLImplementation<0x2837fcba0, instanceType: YTCrashContextController, lifetime: 0, scopeType: 0, configuration: None>";"YTCrashControllerDelegate_API" = "SRLImplementation<0x2836895c0, instanceType: YTCrashCountController, lifetime: 0, scopeType: 0, configuration: None>";"YTCrashController_API" = "SRLImplementation<0x2836894a0, instanceType: YTCrashController, lifetime: 0, scopeType: 0, configuration: None>";"YTCrashRestoreVideoControllerConfig_API" = "SRLImplementation<0x2836842a0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTCrashRestoreVideoController_API" = "SRLImplementation<0x283684270, instanceType: YTCrashRestoreVideoController, lifetime: 0, scopeType: 0, configuration: None>";"YTCuepointOpportunityAdapter_API" = "SRLImplementation<0x283487960, instanceType: YTCuepointOpportunityAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTDAIAdsPlaybackLifecycleAPI_API" = "SRLImplementation<0x283487b40, instanceType: YTDAIAdsPlaybackLifecycleController, lifetime: 0, scopeType: 0, configuration: None>";"YTDAIContentPlaybackLifecycleAPI_API" = "SRLImplementation<0x283487840, instanceType: YTDAIContentPlaybackLifecycleController, lifetime: 0, scopeType: 0, configuration: None>";"YTDAIContentPlaybackStatusAPI_API" = "SRLImplementation<0x283487a80, instanceType: YTDAIContentPlaybackStatusController, lifetime: 0, scopeType: 0, configuration: None>";"YTDataFetcherService_API" = "SRLImplementation<0x2837f00c0, instanceType: YTDataFetcherService, lifetime: 0, scopeType: 0, configuration: None>";"YTDataOperationQueue_API" = "SRLImplementation<0x2837fc7e0, instanceType: YTInnerTubeOperationQueue, lifetime: 0, scopeType: 0, configuration: None>";"YTDataServices_API" = "SRLImplementation<0x283694090, instanceType: YTRealDataServices, lifetime: 0, scopeType: 0, configuration: None>";"YTDefaultPlayerOverlayFactory_API" = "SRLImplementation<0x2834966d0, instanceType: YTDefaultPlayerOverlayFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTDefaultSlotAdapterFactory_API" = "SRLImplementation<0x2834a6430, instanceType: YTDefaultSlotAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTDeferredAtrController_API" = "SRLImplementation<0x2836fd470, instanceType: YTDeferredAtrController, lifetime: 0, scopeType: 0, configuration: None>";"YTDeferredAtrDataStore_API" = "SRLImplementation<0x2836fd650, instanceType: YTDeferredAtrDataStore, lifetime: 0, scopeType: 0, configuration: None>";"YTDelayedEventEntityStore_API" = "SRLImplementation<0x2837ef6f0, instanceType: YTDelayedEventEntityStore, lifetime: 0, scopeType: 0, configuration: None>";"YTDeviceClassificationURLDecorator_API" = "SRLImplementation<0x2837fc810, instanceType: YTDeviceClassificationURLDecorator, lifetime: 0, scopeType: 0, configuration: None>";"YTDiscoveryPlaybackTrackerLayoutEnteredOpportunityAdapter_API" = "SRLImplementation<0x28349a3d0, instanceType: YTDiscoveryPlaybackTrackerLayoutEnteredOpportunityAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTECatcherController_API" = "SRLImplementation<0x2837fc7b0, instanceType: YTECatcherController, lifetime: 0, scopeType: 0, configuration: None>";"YTELMEntitiesProcessorRegistrar_API" = "SRLImplementation<0x283573420, instanceType: YTELMEntitiesProcessorRegistrar, lifetime: 0, scopeType: 0, configuration: None>";"YTELMFontLoader_API" = "SRLImplementation<0x283579080, instanceType: YTELMFontLoader, lifetime: 0, scopeType: 0, configuration: None>";"YTELMJSEnvironment_API" = "SRLImplementation<0x283710840, instanceType: YTELMJSEnvironment, lifetime: 0, scopeType: 0, configuration: None>";"YTELMPerformanceAgentFactory_API" = "SRLImplementation<0x283710810, instanceType: YTELMPerformanceAgentFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTELMQueryEngineProvider_API" = "SRLImplementation<0x283573450, instanceType: YTELMQueryEngineProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTELMRegistry_API" = "SRLImplementation<0x2835728e0, instanceType: YTELMRegistry, lifetime: 0, scopeType: 0, configuration: None>";"YTELMResourceLoader_API" = "SRLImplementation<0x283491170, instanceType: YTELMResourceLoader, lifetime: 0, scopeType: 0, configuration: None>";"YTEditEffectAssetManager_API" = "SRLImplementation<0x28357f2a0, instanceType: YTEditEffectAssetManager, lifetime: 0, scopeType: 0, configuration: None>";"YTEditEffectAssetStore_API" = "SRLImplementation<0x28357f270, instanceType: YTEditEffectAssetStore, lifetime: 0, scopeType: 0, configuration: None>";"YTElementsCommandHandler_API" = "SRLImplementation<0x282b983c0, instanceType: YTElementsCommandHandler, lifetime: 0, scopeType: 1, configuration: None>";"YTElementsContextFactory_API" = "SRLImplementation<0x2835728b0, instanceType: YTELMContextFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTElementsDispatcherFactory_API" = "SRLImplementation<0x283573240, instanceType: YTELMDispatcherFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTElementsLoggerFactory_API" = "SRLImplementation<0x283573270, instanceType: YTELMLoggerFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTElementsUpdateHandler_API" = "SRLImplementation<0x283710180, instanceType: YTElementUpdateHandler, lifetime: 0, scopeType: 0, configuration: None>";"YTEngagementPanelControllerProvider_API" = "SRLImplementation<0x282bd0930, instanceType: YTEngagementPanelControllerProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTEntitiesConfig_API" = "SRLImplementation<0x283718a20, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTEntityTransformationController_API" = "SRLImplementation<0x28361ad30, instanceType: YTEntityTransformationController, lifetime: 0, scopeType: 0, configuration: None>";"YTEntityTransformationMissingEntityObserver_API" = "SRLImplementation<0x283603720, instanceType: YTEntityTransformationMissingEntityObserver, lifetime: 0, scopeType: 0, configuration: None>";"YTEventLogger_API" = "SRLImplementation<0x2837cb1b0, instanceType: YTEventLoggingController, lifetime: 0, scopeType: 0, configuration: None>";"YTEventLoggingController_API" = "SRLImplementation<0x283713600, instanceType: YTEventLoggingController, lifetime: 0, scopeType: 0, configuration: None>";"YTEventLoggingDelayedEventController_API" = "SRLImplementation<0x2837ef5d0, instanceType: YTEventLoggingDelayedEventController, lifetime: 0, scopeType: 0, configuration: None>";"YTEventLoggingRetryController_API" = "SRLImplementation<0x2837fce70, instanceType: YTEventLoggingRetryController, lifetime: 0, scopeType: 0, configuration: None>";"YTEventLoggingRetryDelayedEventController_API" = "SRLImplementation<0x283762d00, instanceType: YTEventLoggingRetryDelayedEventController, lifetime: 0, scopeType: 0, configuration: None>";"YTEventLoggingService_API" = "SRLImplementation<0x2837fc1b0, instanceType: YTEventLoggingService, lifetime: 0, scopeType: 0, configuration: None>";"YTExternallyManagedSlotAdapterDelegate_API" = "SRLImplementation<0x283487c00, instanceType: YTAdsControlFlowManagerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTFeatureGatesClient_API" = "SRLImplementation<0x283763750, instanceType: YTFeatureGatesClient, lifetime: 0, scopeType: 4, configuration: None>";"YTFeedFilterChipBarControllerConfig_API" = "SRLImplementation<0x2836703c0, instanceType: YTFeedFilterChipBarController, lifetime: 0, scopeType: 0, configuration: None>";"YTFeedbackCoordinator_API" = "SRLImplementation<0x28369f600, instanceType: YTFeedbackCoordinator, lifetime: 0, scopeType: 0, configuration: None>";"YTFetcherConfig_API" = "SRLImplementation<0x2837cb3f0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTFlatFileLogsReader_API" = "SRLImplementation<0x2836aac40, instanceType: YTFlatFileLogsReader, lifetime: 0, scopeType: 0, configuration: None>";"YTFrequencyCapTracker_API" = "SRLImplementation<0x2834949f0, instanceType: YTFrequencyCapTracker, lifetime: 0, scopeType: 0, configuration: None>";"YTFulfillmentAdapterDelegate_API" = "SRLImplementation<0x2834a64c0, instanceType: YTAdsControlFlowManagerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTFulfillmentAdapterFactoryManager_API" = "SRLImplementation<0x28349b630, instanceType: YTFulfillmentAdapterFactoryManager, lifetime: 0, scopeType: 0, configuration: None>";"YTFullscreenEngagementCompanionLayoutRenderingAdapterFactory_API" = "SRLImplementation<0x282b87c30, instanceType: YTFullscreenEngagementCompanionLayoutRenderingAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTGELStreamzService_API" = "SRLImplementation<0x283682b20, instanceType: YTGELStreamzService, lifetime: 0, scopeType: 0, configuration: None>";"YTGLCardboardRenderer_API" = "SRLImplementation<0x283483870, instanceType: YTGLCardboardRenderer, lifetime: 0, scopeType: 0, configuration: None>";"YTGLMediaPlayerViewFactory_API" = "SRLImplementation<0x283483a20, instanceType: YTGLMediaPlayerViewFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTGLSceneProtocol_API" = "SRLImplementation<0x283484a20, instanceType: YTGLScene, lifetime: 0, scopeType: 0, configuration: None>";"YTGaiaIdentityService_API" = "SRLImplementation<0x2837c8ea0, instanceType: YTGaiaIdentityService, lifetime: 0, scopeType: 0, configuration: None>";"YTGetLocationCommandHandlerClassObservable_API" = "SRLImplementation<0x282bb8ed0, instanceType: YTGetLocationCommandHandlerClassObservable, lifetime: 0, scopeType: 0, configuration: None>";"YTGlobalConfig_API" = "SRLImplementation<0x28379b7b0, instanceType: YTGlobalConfig, lifetime: 0, scopeType: 0, configuration: None>";"YTGlobalConfigsApplier_API" = "SRLImplementation<0x2837fc780, instanceType: YTGlobalConfigsApplier, lifetime: 0, scopeType: 0, configuration: None>";"YTGoogleConversionPingConfig_API" = "SRLImplementation<0x2836cc4e0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTGuideServiceCoordinator_API" = "SRLImplementation<0x283692190, instanceType: YTAppGuideServiceCoordinator, lifetime: 0, scopeType: 0, configuration: None>";"YTGuideService_API" = "SRLImplementation<0x2836921c0, instanceType: YTGuideService, lifetime: 0, scopeType: 0, configuration: None>";"YTHeaderLogoController_API" = "SRLImplementation<0x2836c6490, instanceType: YTHeaderLogoController, lifetime: 0, scopeType: 0, configuration: None>";"YTHeartbeatService_API" = "SRLImplementation<0x2834adfe0, instanceType: YTHeartbeatService, lifetime: 0, scopeType: 0, configuration: None>";"YTHintController_API" = "SRLImplementation<0x2836a4060, instanceType: YTHintController, lifetime: 0, scopeType: 0, configuration: None>";"YTHintsConfig_API" = "SRLImplementation<0x2836a4090, instanceType: YTAppHintsConfig, lifetime: 0, scopeType: 0, configuration: None>";"YTHomeFeedGlobalMonitor_API" = "SRLImplementation<0x28360b3f0, instanceType: YTInlineMutedPlaybackStateController, lifetime: 0, scopeType: 0, configuration: None>";"YTHomeOfflineController_API" = "SRLImplementation<0x28368cab0, instanceType: YTHomeOfflineController, lifetime: 0, scopeType: 0, configuration: None>";"YTHotConfig_API" = "SRLImplementation<0x2837a5140, instanceType: YTHotConfig, lifetime: 0, scopeType: 0, configuration: None>";"YTIOSGuardSnapshotController_API" = "SRLImplementation<0x283704150, instanceType: YTIOSGuardSnapshotController, lifetime: 0, scopeType: 0, configuration: None>";"YTIdentityController_API" = "SRLImplementation<0x2837f7c30, instanceType: YTIdentityController, lifetime: 0, scopeType: 4, configuration: None>";"YTIdentityEntityTransformer_API" = "SRLImplementation<0x28361a430, instanceType: YTIdentityEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>";"YTIdentityNotifier_API" = "SRLImplementation<0x2837c9890, instanceType: YTIdentityNotifier, lifetime: 0, scopeType: 4, configuration: None>";"YTIdentityProvider_API" = "SRLImplementation<0x2837c9830, instanceType: YTIdentityController, lifetime: 0, scopeType: 4, configuration: None>";"YTIdentityRestorer_API" = "SRLImplementation<0x2837c9590, instanceType: YTIdentityRestorer, lifetime: 0, scopeType: 4, configuration: None>";"YTIdentityRetriever_API" = "SRLImplementation<0x2837c9560, instanceType: YTIdentityRetriever, lifetime: 0, scopeType: 0, configuration: None>";"YTIdentityScopedPersistentEntityStoreProvider_API" = "SRLImplementation<0x2837130f0, instanceType: YTIdentityScopedPersistentEntityStoreProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTIdentityScopedPersistentEntityStore_API" = "SRLImplementation<0x283718a50, instanceType: YTIdentityScopedPersistentEntityStoreV2, lifetime: 0, scopeType: 1, configuration: None>";"YTIdentityStateLoggingController_API" = "SRLImplementation<0x2837656b0, instanceType: YTIdentityStateLoggingController, lifetime: 0, scopeType: 0, configuration: None>";"YTIdentityStore_API" = "SRLImplementation<0x2837c9320, instanceType: YTIdentityStore, lifetime: 0, scopeType: 4, configuration: None>";"YTIdentityStrategy_API" = "SRLImplementation<0x2837c9110, instanceType: YTInlineIdentityStrategy, lifetime: 0, scopeType: 4, configuration: None>";"YTIdentityTransactionCoalescer_API" = "SRLImplementation<0x2837c9020, instanceType: YTIdentityTransactionCoalescer, lifetime: 0, scopeType: 4, configuration: None>";"YTIdentityTransactionFactory_API" = "SRLImplementation<0x2837c90e0, instanceType: YTIdentityTransactionFactory, lifetime: 0, scopeType: 4, configuration: None>";"YTImageFetcherService_API" = "SRLImplementation<0x2837cb300, instanceType: YTHotSwappableImageFetcherService, lifetime: 0, scopeType: 0, configuration: None>";"YTImageOperationQueue_API" = "SRLImplementation<0x2836922e0, instanceType: YTImageOperationQueue, lifetime: 0, scopeType: 0, configuration: None>";"YTImageSelectionStrategy_API" = "SRLImplementation<0x283692310, instanceType: YTBestMatchImageSelectionStrategy, lifetime: 0, scopeType: 0, configuration: None>";"YTImageServiceImageDataSource_API" = "SRLImplementation<0x283692370, instanceType: YTOfflineLocalImageEntitySource, lifetime: 0, scopeType: 0, configuration: None>";"YTImageService_API" = "SRLImplementation<0x2836922b0, instanceType: YTImageService, lifetime: 0, scopeType: 0, configuration: None>";"YTImageStyle_API" = "SRLImplementation<0x2836bf180, instanceType: YTAppImageStyle, lifetime: 0, scopeType: 0, configuration: None>";"YTInMemoryEntityStoreObserverTransformationTrigger_API" = "SRLImplementation<0x2829f03f0, instanceType: YTInMemoryEntityStoreObserverTransformationTrigger, lifetime: 0, scopeType: 0, configuration: None>";"YTInMemoryEntityStore_API" = "SRLImplementation<0x28376bf30, instanceType: YTInMemoryEntityStoreV2, lifetime: 0, scopeType: 0, configuration: None>";"YTInPlayerDAIExternallyManagedSlotAdapter_API" = "SRLImplementation<0x283487ba0, instanceType: YTInPlayerDAIExternallyManagedSlotAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTInceptionControllerProtocol_API" = "SRLImplementation<0x2836eac70, instanceType: YTInceptionController, lifetime: 0, scopeType: 0, configuration: None>";"YTInfoCardControllerProviderProtocol_API" = "SRLImplementation<0x2834ace40, instanceType: YTInfoCardControllerProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTInlineMutedPlaybackStateController_API" = "SRLImplementation<0x28354bc60, instanceType: YTInlineMutedPlaybackStateController, lifetime: 0, scopeType: 0, configuration: None>";"YTInlineMutedWatchEndpointMutationCommandHandler_API" = "SRLImplementation<0x282b80600, instanceType: YTInlineMutedWatchEndpointMutationCommandHandler, lifetime: 0, scopeType: 1, configuration: None>";"YTInnerTubeConfig_API" = "SRLImplementation<0x2837cab20, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeContextFactory_API" = "SRLImplementation<0x2837fc210, instanceType: YTInnerTubeContextFactory, lifetime: 0, scopeType: 4, configuration: None>";"YTInnerTubeControllerFactory_API" = "SRLImplementation<0x2836dc750, instanceType: YTAppInnerTubeControllerFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeCoreDataContext_API" = "SRLImplementation<0x2836f47b0, instanceType: YTInnerTubeCoreDataContext, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeFetcherService_API" = "SRLImplementation<0x2837cff90, instanceType: YTHotSwappableFetcherServiceAndURLBuilder, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeOperationQueue_API" = "SRLImplementation<0x2837fc600, instanceType: YTInnerTubeOperationQueue, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeRequestFactory_API" = "SRLImplementation<0x2837fc1e0, instanceType: YTInnerTubeRequestFactory, lifetime: 0, scopeType: 4, configuration: None>";"YTInnerTubeRequestorFactory_API" = "SRLImplementation<0x2837fc4b0, instanceType: YTInnerTubeRequestorFactory, lifetime: 0, scopeType: 4, configuration: None>";"YTInnerTubeResponseCache_API" = "SRLImplementation<0x2837fc6f0, instanceType: YTInnerTubeResponseCache, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeRetryTaskController_API" = "SRLImplementation<0x2836fd2f0, instanceType: YTInnerTubeRetryTaskController, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeSharedData_API" = "SRLImplementation<0x2837fc6c0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeUIGlobals_API" = "SRLImplementation<0x2836c6a60, instanceType: YTLiveServices, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeUIServiceMapper_API" = "SRLImplementation<0x2836dc780, instanceType: YTAppInnerTubeUIServiceMapper, lifetime: 0, scopeType: 0, configuration: None>";"YTInnerTubeURLBuilder_API" = "SRLImplementation<0x283765440, instanceType: YTHotSwappableFetcherServiceAndURLBuilder, lifetime: 0, scopeType: 0, configuration: None>";"YTInteractionLoggingOnGELController_API" = "SRLImplementation<0x2836ad320, instanceType: YTInteractionLoggingOnGELController, lifetime: 0, scopeType: 0, configuration: None>";"YTLastActionController_API" = "SRLImplementation<0x2837657a0, instanceType: YTLastActionController, lifetime: 0, scopeType: 0, configuration: None>";"YTLastActionProvider_API" = "SRLImplementation<0x2837fcc90, instanceType: YTLastActionController, lifetime: 0, scopeType: 0, configuration: None>";"YTLatencyLogger_API" = "SRLImplementation<0x2836ff1b0, instanceType: YTLatencyLoggingController, lifetime: 0, scopeType: 0, configuration: None>";"YTLayoutFactory_API" = "SRLImplementation<0x28362a070, instanceType: YTLayoutFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTLayoutRenderingAdapterFactoryManager_API" = "SRLImplementation<0x2834ae250, instanceType: YTLayoutRenderingAdapterFactoryManager, lifetime: 0, scopeType: 0, configuration: None>";"YTLayoutSelfExitRequestedTriggerAdapter_API" = "SRLImplementation<0x282b88ab0, instanceType: YTLayoutSelfExitRequestedTriggerAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTLayoutStyle_API" = "SRLImplementation<0x283767540, instanceType: YTAppLayoutStyle, lifetime: 0, scopeType: 0, configuration: None>";"YTLiveMidrollCuepointOpportunityAdapter_API" = "SRLImplementation<0x283487990, instanceType: YTLiveMidrollCuepointOpportunityAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTLiveStreamBreakTransitionTriggerAdapter_API" = "SRLImplementation<0x283487ae0, instanceType: YTLiveStreamBreakTransitionTriggerAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTLocationInfoMonitor_API" = "SRLImplementation<0x2837198c0, instanceType: YTLocationInfoMonitor, lifetime: 0, scopeType: 0, configuration: None>";"YTLockScreenController_API" = "SRLImplementation<0x283487d20, instanceType: YTLockScreenController, lifetime: 0, scopeType: 0, configuration: None>";"YTLoggingCoreDataContext_API" = "SRLImplementation<0x2837ef720, instanceType: YTLoggingCoreDataContext, lifetime: 0, scopeType: 0, configuration: None>";"YTLoggingDispatchQueue_API" = "SRLImplementation<0x2837fcf30, instanceType: YTLoggingDispatchQueue, lifetime: 0, scopeType: 0, configuration: None>";"YTLoggingIdentityProvider_API" = "SRLImplementation<0x2837ca7c0, instanceType: YTLoggingIdentityProvider, lifetime: 0, scopeType: 4, configuration: None>";"YTLoggingURLController_API" = "SRLImplementation<0x283650600, instanceType: YTLoggingURLController, lifetime: 0, scopeType: 0, configuration: None>";"YTMERegistry_API" = "SRLImplementation<0x2836cd440, instanceType: YTMERegistry, lifetime: 0, scopeType: 0, configuration: None>";"YTMacroMarkersController_API" = "SRLImplementation<0x282b87ea0, instanceType: YTMacroMarkersController, lifetime: 0, scopeType: 0, configuration: None>";"YTMacroMarkersTimedSyncController_API" = "SRLImplementation<0x282b87f90, instanceType: YTMacroMarkersTimedSyncController, lifetime: 0, scopeType: 0, configuration: None>";"YTMainAppDiscoveryInPlayerRenderingAPI_API" = "SRLImplementation<0x282b829a0, instanceType: YTMainAppDiscoveryInPlayerRenderingAPI, lifetime: 0, scopeType: 0, configuration: None>";"YTMainAppEngagementPanelDataCollector_API" = "SRLImplementation<0x283681b30, instanceType: YTMainAppEngagementPanelDataCollector, lifetime: 0, scopeType: 0, configuration: None>";"YTMainAppPlayerOverlayDataCollector_API" = "SRLImplementation<0x282b86130, instanceType: YTMainAppPlayerOverlayDataCollector, lifetime: 0, scopeType: 0, configuration: None>";"YTMemoryWatchdog_API" = "SRLImplementation<0x28368a1c0, instanceType: YTMemoryWatchdog, lifetime: 0, scopeType: 0, configuration: None>";"YTNavigationCommandHandler_API" = "SRLImplementation<0x2836d8ff0, instanceType: YTNavigationCommandHandler, lifetime: 0, scopeType: 0, configuration: None>";"YTNetworkActiveController_API" = "SRLImplementation<0x283562820, instanceType: YTNetworkActiveControllerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTNetworkBaselineLogger_API" = "SRLImplementation<0x2837fcb10, instanceType: (null), lifetime: 1, scopeType: 0, configuration: None>";"YTNetworkEventLogger_API" = "SRLImplementation<0x2837fc960, instanceType: YTNetworkEventLogger, lifetime: 0, scopeType: 0, configuration: None>";"YTNetworkHealthController_API" = "SRLImplementation<0x2836f4660, instanceType: (null), lifetime: 1, scopeType: 0, configuration: None>";"YTNetworkHealthLogger_API" = "SRLImplementation<0x2837fc930, instanceType: (null), lifetime: 1, scopeType: 0, configuration: None>";"YTNetworkReceivedDelegate_API" = "SRLImplementation<0x2837fc690, instanceType: (null), lifetime: 1, scopeType: 0, configuration: None>";"YTNetworkRequestTracker_API" = "SRLImplementation<0x2837cb330, instanceType: YTNetworkRequestTrackerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTNetworkRetryDelegate_API" = "SRLImplementation<0x2837fc420, instanceType: (null), lifetime: 1, scopeType: 0, configuration: None>";"YTNetworkStatusEntityTransformationTrigger_API" = "SRLImplementation<0x2836eab50, instanceType: YTNetworkStatusEntityTransformationTrigger, lifetime: 0, scopeType: 0, configuration: None>";"YTNetworkUsageNotifier_API" = "SRLImplementation<0x28357eac0, instanceType: YTNetworkUsageNotifier, lifetime: 0, scopeType: 0, configuration: None>";"YTNonCriticalStartupSchedulerConfig_API" = "SRLImplementation<0x28376fc60, instanceType: YTAppNonCriticalStartupSchedulerConfig, lifetime: 0, scopeType: 0, configuration: None>";"YTNonCriticalStartupScheduler_API" = "SRLImplementation<0x28376fc00, instanceType: (null), lifetime: 1, scopeType: 0, configuration: None>";"YTNotificationAccountScopedInnerTubeContextDecorator_API" = "SRLImplementation<0x2836aa910, instanceType: YTNotificationAccountScopedInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>";"YTNotificationConfig_API" = "SRLImplementation<0x283682730, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTNotificationInnerTubeContextDecorator_API" = "SRLImplementation<0x2836aa760, instanceType: YTNotificationInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>";"YTNotificationOSSettingEntityController_API" = "SRLImplementation<0x2834803c0, instanceType: YTNotificationOSSettingEntityController, lifetime: 0, scopeType: 0, configuration: None>";"YTNotificationRegistrationManager_API" = "SRLImplementation<0x283682760, instanceType: YTNotificationRegistrationManager, lifetime: 1, scopeType: 0, configuration: None>";"YTNotificationService_API" = "SRLImplementation<0x283682790, instanceType: YTNotificationService, lifetime: 0, scopeType: 0, configuration: None>";"YTNthThumbnailLoadInstrumentation_API" = "SRLImplementation<0x283684f60, instanceType: YTNthThumbnailLoadInstrumentation, lifetime: 0, scopeType: 0, configuration: None>";"YTNthThumbnailLoadTransmitter_API" = "SRLImplementation<0x28356e190, instanceType: YTAppStartupInstrumentationThumbnailLoadTransmitter, lifetime: 0, scopeType: 0, configuration: None>";"YTOcclusionMonitoringController_API" = "SRLImplementation<0x2836ead90, instanceType: YTInlineMutedPlaybackStateController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineAdController_API" = "SRLImplementation<0x28369f660, instanceType: YTOfflineAdController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineAdFrequencyCapProvider_API" = "SRLImplementation<0x283494c30, instanceType: YTOfflineAdFrequencyCoordinator, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineAdParser_API" = "SRLImplementation<0x28369f690, instanceType: YTOfflineAdParser, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineAdPlaylistController_API" = "SRLImplementation<0x283682580, instanceType: YTOfflineAdPlaylistController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineAdProvider_API" = "SRLImplementation<0x282bbb000, instanceType: YTOfflineAdPlaylistController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineAppStateEventCenter_API" = "SRLImplementation<0x2836fd320, instanceType: YTOfflineAppStateEventCenter, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineCacheSynchronizer_API" = "SRLImplementation<0x2836f4870, instanceType: YTOfflineCacheSynchronizer, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineClientStateLogger_API" = "SRLImplementation<0x2836fed90, instanceType: YTOfflineClientStateLogger, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineClientStateProvider_API" = "SRLImplementation<0x2836fedc0, instanceType: YTOfflineClientStateProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineConfig_API" = "SRLImplementation<0x283682280, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineContentController_API" = "SRLImplementation<0x28349d9e0, instanceType: YTOfflineContentController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineCoordinator_API" = "SRLImplementation<0x283685560, instanceType: YTOfflineCoordinator, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineDataService_API" = "SRLImplementation<0x2836821f0, instanceType: YTOfflineDataService, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineEntityGenerationController_API" = "SRLImplementation<0x2836feb20, instanceType: YTOfflineEntityGenerationController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineImageController_API" = "SRLImplementation<0x2836822b0, instanceType: YTOfflineImageController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineModeProvider_API" = "SRLImplementation<0x28369f630, instanceType: YTOfflineCoordinator, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineNotificationController_API" = "SRLImplementation<0x28356ff30, instanceType: YTOfflineNotificationController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineOrchestrationAutoRefreshController_API" = "SRLImplementation<0x2836fed00, instanceType: YTOfflineOrchestrationAutoRefreshController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineOrchestrationController_API" = "SRLImplementation<0x2836fedf0, instanceType: YTOfflineOrchestrationController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflinePlaybackPositionSyncService_API" = "SRLImplementation<0x28349e460, instanceType: YTOfflinePlaybackPositionSyncService, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflinePlaylistController_API" = "SRLImplementation<0x283682520, instanceType: YTOfflinePlaylistController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflinePlaylistMonitor_API" = "SRLImplementation<0x282b9b5d0, instanceType: YTNoOpOfflinePlaylistMonitor, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflinePlaylistStore_API" = "SRLImplementation<0x2836f48d0, instanceType: YTOfflinePlaylistStore, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineRefreshEntityQueryTable_API" = "SRLImplementation<0x2836fec10, instanceType: YTOfflineRefreshEntityQueryTable, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineServiceController_API" = "SRLImplementation<0x28369dec0, instanceType: YTAppOfflineServiceController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineSettingsServiceSwitch_API" = "SRLImplementation<0x2836825e0, instanceType: YTOfflineSettingsServiceSwitch, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineSettingsService_API" = "SRLImplementation<0x283682610, instanceType: YTOfflineSettingsService, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineStoreAPI_API" = "SRLImplementation<0x282bbafd0, instanceType: YTOfflineStoreAPIImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineTracklistCaptionController_API" = "SRLImplementation<0x2836820d0, instanceType: YTOfflineTracklistCaptionController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineTransferStatusLogger_API" = "SRLImplementation<0x2836f3060, instanceType: YTOfflineTransferStatusLogger, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineVideoController_API" = "SRLImplementation<0x2836821c0, instanceType: YTOfflineVideoController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineVideoDownloadScheduler_API" = "SRLImplementation<0x2836f3330, instanceType: YTOfflineVideoDownloadScheduler, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineVideoDownloader_API" = "SRLImplementation<0x2836f3240, instanceType: YTOfflineVideoDownloader, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineVideoListController_API" = "SRLImplementation<0x283682550, instanceType: YTOfflineVideoListController, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineVideoRepairWorker_API" = "SRLImplementation<0x2834809c0, instanceType: YTOfflineVideoRepairWorker, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineVideoStore_API" = "SRLImplementation<0x2836fd260, instanceType: YTOfflineVideoStore, lifetime: 0, scopeType: 0, configuration: None>";"YTOfflineWatchNextServiceAdapter_API" = "SRLImplementation<0x282badf50, instanceType: YTAppOfflineWatchNextServiceAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTOrganicWatchNextResponseOpportunityAdapter_API" = "SRLImplementation<0x2834876f0, instanceType: YTOrganicWatchNextResponseOpportunityAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTPageStyleController_API" = "SRLImplementation<0x2837103f0, instanceType: YTPageStyleController, lifetime: 0, scopeType: 0, configuration: None>";"YTPeriodicLoggingController_API" = "SRLImplementation<0x2837656e0, instanceType: YTPeriodicLoggingController, lifetime: 0, scopeType: 0, configuration: None>";"YTPersistentToInMemoryEntityStoreProjectionController_API" = "SRLImplementation<0x2836e9740, instanceType: YTPersistentToInMemoryEntityStoreProjectionController, lifetime: 0, scopeType: 0, configuration: None>";"YTPersonalizedSuggestionsCache_API" = "SRLImplementation<0x283698270, instanceType: YTPersonalizedSuggestionsCache, lifetime: 0, scopeType: 0, configuration: None>";"YTPhotoUploadController_API" = "SRLImplementation<0x283692250, instanceType: YTPhotoUploadController, lifetime: 0, scopeType: 0, configuration: None>";"YTPingControllerConfig_API" = "SRLImplementation<0x2836fd6b0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTPingService_API" = "SRLImplementation<0x28368c0c0, instanceType: YTPingService, lifetime: 0, scopeType: 0, configuration: None>";"YTPingStore_API" = "SRLImplementation<0x28368c060, instanceType: YTPingStore, lifetime: 0, scopeType: 0, configuration: None>";"YTPingingEndpointCommandHandler_API" = "SRLImplementation<0x2835651a0, instanceType: YTPingingEndpointCommandHandler, lifetime: 0, scopeType: 1, configuration: None>";"YTPivotBarProvider_API" = "SRLImplementation<0x283614ed0, instanceType: YTAppViewController, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayAsYouBrowseSettingController_API" = "SRLImplementation<0x2836eadc0, instanceType: YTPlayAsYouBrowseSettingController, lifetime: 0, scopeType: 0, configuration: None>";"YTPlaybackCoordinator_API" = "SRLImplementation<0x283483060, instanceType: MDXPlaybackCoordinator, lifetime: 0, scopeType: 0, configuration: None>";"YTPlaybackLockScreenController_API" = "SRLImplementation<0x283487cf0, instanceType: YTPlaybackLockScreenController, lifetime: 0, scopeType: 0, configuration: None>";"YTPlaybackRequestFactory_API" = "SRLImplementation<0x2834b0d80, instanceType: YTPlaybackRequestFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTPlaybackRouteButtonControllerProvider_API" = "SRLImplementation<0x2836c21c0, instanceType: MDXRealServices, lifetime: 0, scopeType: 0, configuration: None>";"YTPlaybackTrackingLayoutRenderingAdapterFactory_API" = "SRLImplementation<0x2834ae580, instanceType: YTPlaybackTrackingLayoutRenderingAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTPlaybackTrackingSlotFulfillmentAdapterFactory_API" = "SRLImplementation<0x2834a64f0, instanceType: YTPlaybackTrackingSlotFulfillmentAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerAccountScopedInnerTubeContextDecorator_API" = "SRLImplementation<0x2834adfb0, instanceType: YTPlayerAccountScopedInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>";"YTPlayerAdEventTriggerAdapter_API" = "SRLImplementation<0x283487930, instanceType: YTPlayerAdEventTriggerAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerAdsProvider_API" = "SRLImplementation<0x283487720, instanceType: YTRealAdsPlayerServices, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerBytesLayoutEnteredAndFullscreenOpportunityAdapter_API" = "SRLImplementation<0x28349b990, instanceType: YTPlayerBytesLayoutEnteredAndFullscreenOpportunityAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerBytesLayoutEnteredOpportunityAdapter_API" = "SRLImplementation<0x28349bb40, instanceType: YTPlayerBytesLayoutEnteredOpportunityAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerBytesLayoutRenderingAdapterFactory_API" = "SRLImplementation<0x282b88210, instanceType: YTPlayerBytesLayoutRenderingAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerBytesSlotAdapterFactory_API" = "SRLImplementation<0x282bbb180, instanceType: YTPlayerBytesSlotAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerBytesSlotFulfillmentAdapterFactory_API" = "SRLImplementation<0x282bbaf10, instanceType: YTPlayerBytesSlotFulfillmentAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerBytesSlotRegistrationAPI_API" = "SRLImplementation<0x283487c90, instanceType: YTAdsPlaybackService, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerInnerTubeContextDecorator_API" = "SRLImplementation<0x2834adef0, instanceType: YTPlayerInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>";"YTPlayerOfflineFallbackConfig_API" = "SRLImplementation<0x2834897d0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerPrebufferController_API" = "SRLImplementation<0x2834b0bd0, instanceType: YTPlayerPrebufferController, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerPrefetchService_API" = "SRLImplementation<0x283497360, instanceType: YTPlayerPrefetchService, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerRequestFactory_API" = "SRLImplementation<0x2834b0de0, instanceType: YTPlayerRequestFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerScrubLoggingService_API" = "SRLImplementation<0x28348f960, instanceType: YTPlayerScrubLoggingService, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerServiceConfig_API" = "SRLImplementation<0x2834887b0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerService_API" = "SRLImplementation<0x2834b1fb0, instanceType: YTPlayerService, lifetime: 0, scopeType: 0, configuration: None>";"YTPlayerViewControllerConfig_API" = "SRLImplementation<0x283483030, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTPreviousQuery_API" = "SRLImplementation<0x283698480, instanceType: YTPreviousQuery, lifetime: 0, scopeType: 0, configuration: None>";"YTPriorityLoader_API" = "SRLImplementation<0x28376bcc0, instanceType: YTPriorityLoader, lifetime: 0, scopeType: 0, configuration: None>";"YTProfileCardController_API" = "SRLImplementation<0x282b80b40, instanceType: YTProfileCardController, lifetime: 0, scopeType: 0, configuration: None>";"YTPromosheetController_API" = "SRLImplementation<0x283690ff0, instanceType: YTPromosheetController, lifetime: 0, scopeType: 0, configuration: None>";"YTPushNotificationController_API" = "SRLImplementation<0x283682700, instanceType: YTPushNotificationController, lifetime: 0, scopeType: 0, configuration: None>";"YTPushNotificationService_API" = "SRLImplementation<0x2837d3bd0, instanceType: YTPushNotificationService, lifetime: 0, scopeType: 0, configuration: None>";"YTQueueConfig_API" = "SRLImplementation<0x282b99ad0, instanceType: YTDefaultQueueConfig, lifetime: 0, scopeType: 0, configuration: None>";"YTReachabilityController_API" = "SRLImplementation<0x2837fc240, instanceType: YTReachabilityController, lifetime: 0, scopeType: 0, configuration: None>";"YTReelImageFetcher_API" = "SRLImplementation<0x2836f4030, instanceType: YTReelImageFetcher, lifetime: 0, scopeType: 0, configuration: None>";"YTRenderingConfig_API" = "SRLImplementation<0x2836c6fd0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTResponderRoot_API" = "SRLImplementation<0x283762dc0, instanceType: YTAppViewController, lifetime: 0, scopeType: 0, configuration: None>";"YTRestoreController_API" = "SRLImplementation<0x2836842d0, instanceType: YTRestoreController, lifetime: 0, scopeType: 0, configuration: None>";"YTRetroactiveSignInController_API" = "SRLImplementation<0x28357e580, instanceType: YTRetroactiveSignInController, lifetime: 0, scopeType: 0, configuration: None>";"YTSRLAccountSynchronizer_API" = "SRLImplementation<0x283480270, instanceType: YTSRLAccountSynchronizer, lifetime: 0, scopeType: 0, configuration: None>";"YTSSOConfig_API" = "SRLImplementation<0x2837c9e00, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTScrollFocusGlobalStateMonitor_API" = "SRLImplementation<0x28348c7b0, instanceType: YTInlineMutedPlaybackStateController, lifetime: 0, scopeType: 0, configuration: None>";"YTScrollFocusGlobalStateProtocol_API" = "SRLImplementation<0x283608690, instanceType: YTInlineMutedPlaybackStateController, lifetime: 0, scopeType: 0, configuration: None>";"YTSeamlessSignIn_API" = "SRLImplementation<0x28360c210, instanceType: YTSeamlessSignIn, lifetime: 0, scopeType: 0, configuration: None>";"YTSearchHistoryService_API" = "SRLImplementation<0x2836984e0, instanceType: YTSearchHistoryService, lifetime: 0, scopeType: 0, configuration: None>";"YTSearchLatencyCache_API" = "SRLImplementation<0x283698630, instanceType: YTSearchLatencyCache, lifetime: 0, scopeType: 0, configuration: None>";"YTSearchService_API" = "SRLImplementation<0x2834eab20, instanceType: YTAppSearchService, lifetime: 0, scopeType: 0, configuration: None>";"YTSearchboxStatsTracker_API" = "SRLImplementation<0x28369de00, instanceType: YTSearchboxStatsTracker, lifetime: 0, scopeType: 0, configuration: None>";"YTServices_API" = "SRLImplementation<0x283694060, instanceType: YTLiveServices, lifetime: 0, scopeType: 0, configuration: None>";"YTSettings_API" = "SRLImplementation<0x28379bfc0, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTShareObserverController_API" = "SRLImplementation<0x282b997d0, instanceType: YTShareObserverController, lifetime: 0, scopeType: 0, configuration: None>";"YTShareServices_API" = "SRLImplementation<0x282bd4390, instanceType: YTRealShareServices, lifetime: 0, scopeType: 0, configuration: None>";"YTShortsStartupCoordinator_API" = "SRLImplementation<0x2836f4180, instanceType: YTShortsStartupCoordinator, lifetime: 0, scopeType: 0, configuration: None>";"YTShowContentPillNotifier_API" = "SRLImplementation<0x2836c6f70, instanceType: YTShowContentPillCommandHandlerClassObservable, lifetime: 0, scopeType: 0, configuration: None>";"YTShowTooltipCommandHandler_API" = "SRLImplementation<0x28291dbc0, instanceType: YTShowTooltipCommandHandler, lifetime: 0, scopeType: 1, configuration: None>";"YTShowTransientPlayerScrimOverlayCommandHandlerClassDelegation_API" = "SRLImplementation<0x282b80870, instanceType: YTShowTransientPlayerScrimOverlayCommandHandlerClassDelegation, lifetime: 0, scopeType: 0, configuration: None>";"YTSignedOutLocalSearchHistory_API" = "SRLImplementation<0x283482c10, instanceType: YTSignedOutLocalSearchHistory, lifetime: 0, scopeType: 0, configuration: None>";"YTSingleVideoControllerFactory_API" = "SRLImplementation<0x2834b0c60, instanceType: YTSingleVideoControllerFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTSingleVideoOfflineLoggingController_API" = "SRLImplementation<0x2834a72d0, instanceType: YTSingleVideoOfflineLoggingController__657306411_GeneratedFactoryImpl, lifetime: 1, scopeType: 0, configuration: None>";"YTSiriShortcutManager_API" = "SRLImplementation<0x2836fd800, instanceType: YTSiriShortcutManager, lifetime: 0, scopeType: 0, configuration: None>";"YTSkipButtonClickedTriggerAdapter_API" = "SRLImplementation<0x282b88360, instanceType: YTSkipButtonClickedTriggerAdapter, lifetime: 0, scopeType: 0, configuration: None>";"YTSlimStatusBarController_API" = "SRLImplementation<0x283698900, instanceType: YTSlimStatusBarController, lifetime: 0, scopeType: 0, configuration: None>";"YTSlotAdapterFactoryManager_API" = "SRLImplementation<0x2834a6460, instanceType: YTSlotAdapterFactoryManager, lifetime: 0, scopeType: 0, configuration: None>";"YTSlotFactory_API" = "SRLImplementation<0x283629fe0, instanceType: YTSlotFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTSlotOpportunityAdapterDelegate_API" = "SRLImplementation<0x28349a250, instanceType: YTAdsControlFlowManagerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTSmartDownloadsSettingsObserver_API" = "SRLImplementation<0x2836feac0, instanceType: YTSmartDownloadsSettingsObserver, lifetime: 0, scopeType: 0, configuration: None>";"YTStallDetector_API" = "SRLImplementation<0x283684090, instanceType: YTStallDetector, lifetime: 0, scopeType: 0, configuration: None>";"YTStallMinidumpGenerator_API" = "SRLImplementation<0x2837f7090, instanceType: YTStallMinidumpGenerator, lifetime: 0, scopeType: 0, configuration: None>";"YTStateTagNotifications_API" = "SRLImplementation<0x2837fc750, instanceType: YTStateTagNotifications, lifetime: 0, scopeType: 0, configuration: None>";"YTStorageController_API" = "SRLImplementation<0x28369e160, instanceType: YTStorageController, lifetime: 0, scopeType: 0, configuration: None>";"YTStoryboardControllerFactory_API" = "SRLImplementation<0x2834ac9f0, instanceType: YTStoryboardControllerFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTSubscriptionService_API" = "SRLImplementation<0x2836da4c0, instanceType: YTSubscriptionService, lifetime: 0, scopeType: 0, configuration: None>";"YTSuggestConfig_API" = "SRLImplementation<0x283698390, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTSuggestParser_API" = "SRLImplementation<0x283482100, instanceType: YTAppSuggestParser, lifetime: 0, scopeType: 0, configuration: None>";"YTSuggestRequestFactory_API" = "SRLImplementation<0x283698420, instanceType: YTAppSuggestRequestFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTSuggestService_API" = "SRLImplementation<0x2836983f0, instanceType: YTSuggestService, lifetime: 0, scopeType: 0, configuration: None>";"YTSystemHealthCapturerRegistry_API" = "SRLImplementation<0x2837cb180, instanceType: YTSystemHealthCapturerRegistry, lifetime: 0, scopeType: 0, configuration: None>";"YTSystemHealthContext_API" = "SRLImplementation<0x2837cadf0, instanceType: YTSystemHealthContext, lifetime: 0, scopeType: 0, configuration: None>";"YTSystemHealthController_API" = "SRLImplementation<0x2837ca730, instanceType: YTSystemHealthController, lifetime: 0, scopeType: 0, configuration: None>";"YTSystemHealthTransmitterRegistry_API" = "SRLImplementation<0x2837ca160, instanceType: YTSystemHealthTransmitterRegistry, lifetime: 0, scopeType: 0, configuration: None>";"YTSystemNotifications_API" = "SRLImplementation<0x2837cb090, instanceType: YTSystemNotifications, lifetime: 0, scopeType: 0, configuration: None>";"YTTerminationEventPingController_API" = "SRLImplementation<0x2836d9050, instanceType: YTTerminationEventPingController, lifetime: 0, scopeType: 0, configuration: None>";"YTThemeEntityManager_API" = "SRLImplementation<0x283690cc0, instanceType: YTThemeEntityManager, lifetime: 0, scopeType: 0, configuration: None>";"YTThumbnailLatencyLogger_API" = "SRLImplementation<0x2836929d0, instanceType: YTCSIThumbnailLatencyLogger, lifetime: 0, scopeType: 0, configuration: None>";"YTToastController_API" = "SRLImplementation<0x282baf9c0, instanceType: YTMainAppToastController, lifetime: 0, scopeType: 0, configuration: None>";"YTTooltipController_API" = "SRLImplementation<0x2836b2670, instanceType: YTTooltipController, lifetime: 0, scopeType: 0, configuration: None>";"YTTopViewControllerProvider_API" = "SRLImplementation<0x2836db540, instanceType: YTAppViewController, lifetime: 0, scopeType: 0, configuration: None>";"YTTransactionQueueController_API" = "SRLImplementation<0x28369e100, instanceType: YTTransactionQueueController, lifetime: 0, scopeType: 0, configuration: None>";"YTTriggerAdapterDelegate_API" = "SRLImplementation<0x28349b9f0, instanceType: YTAdsControlFlowManagerImpl, lifetime: 0, scopeType: 0, configuration: None>";"YTTriggerAdapterFactory_API" = "SRLImplementation<0x283499b90, instanceType: YTTriggerAdapterFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTTypeStyle_API" = "SRLImplementation<0x283693a80, instanceType: YTDefaultTypeStyle, lifetime: 0, scopeType: 0, configuration: None>";"YTUnicornTimelyBlockingController_API" = "SRLImplementation<0x2836aed90, instanceType: YTUnicornTimelyBlockingController, lifetime: 0, scopeType: 0, configuration: None>";"YTUnpluggedResolveLocationService_API" = "SRLImplementation<0x283713cf0, instanceType: YTUnpluggedResolveLocationService, lifetime: 0, scopeType: 0, configuration: None>";"YTUpdatedMetadataService_API" = "SRLImplementation<0x282b862e0, instanceType: YTUpdatedMetadataService, lifetime: 0, scopeType: 0, configuration: None>";"YTUpgradeController_API" = "SRLImplementation<0x28357f120, instanceType: YTUpgradeController, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadAppSpecificRequirementsStore_API" = "SRLImplementation<0x28362be40, instanceType: YTUploadAppSpecificRequirementsStore, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadConfig_API" = "SRLImplementation<0x28349e610, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadCoreDataContext_API" = "SRLImplementation<0x28349ea60, instanceType: YTUploadCoreDataContext, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadEngine_API" = "SRLImplementation<0x283480ae0, instanceType: YTUploadEngine, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadProgressProvider_API" = "SRLImplementation<0x283480300, instanceType: YTUploadProgressProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadRequirementsStore_API" = "SRLImplementation<0x28362b300, instanceType: YTUploadRequirementsStore, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadTaskController_API" = "SRLImplementation<0x283480b10, instanceType: YTUploadTaskController, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadTaskStore_API" = "SRLImplementation<0x28349eca0, instanceType: YTUploadTaskStore, lifetime: 0, scopeType: 0, configuration: None>";"YTUploadUserSpecificRequirementsStore_API" = "SRLImplementation<0x283484060, instanceType: YTUploadUserSpecificRequirementsStore, lifetime: 0, scopeType: 0, configuration: None>";"YTUserDefaultsKeysProvider_API" = "SRLImplementation<0x2837b0630, instanceType: YTYouTubeUserDefaultsKeysProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTUserDefaults_API" = "SRLImplementation<0x2837b05a0, instanceType: YTYouTubeUserDefaults, lifetime: 0, scopeType: 4, configuration: None>";"YTVASTParser_API" = "SRLImplementation<0x283681bf0, instanceType: YTVASTParser, lifetime: 0, scopeType: 0, configuration: None>";"YTVELoggingAPIProvider_API" = "SRLImplementation<0x282b81ad0, instanceType: YTVELoggingAPIProvider, lifetime: 0, scopeType: 0, configuration: None>";"YTVMAPParser_API" = "SRLImplementation<0x283681f20, instanceType: YTVMAPParser, lifetime: 0, scopeType: 0, configuration: None>";"YTVSSControllerFactory_API" = "SRLImplementation<0x2834ab000, instanceType: YTVSSControllerFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTVideoPlayerOverlayConfig_API" = "SRLImplementation<0x2836a4150, instanceType: YTSettings, lifetime: 0, scopeType: 0, configuration: None>";"YTVideoQualitySwitchControllerFactory_API" = "SRLImplementation<0x283561770, instanceType: YTVideoQualitySwitchControllerFactory, lifetime: 0, scopeType: 0, configuration: None>";"YTVisitorDataRequestDecorator_API" = "SRLImplementation<0x2837fc990, instanceType: YTVisitorDataRequestDecorator, lifetime: 0, scopeType: 4, configuration: None>";"YTVisitorDataStore_API" = "SRLImplementation<0x2837fc900, instanceType: YTIdentityController, lifetime: 0, scopeType: 4, configuration: None>";"YTVoiceSearchCache_API" = "SRLImplementation<0x2834f60a0, instanceType: YTVoiceSearchCache, lifetime: 0, scopeType: 0, configuration: None>";"YTVoiceSearchService_API" = "SRLImplementation<0x28369de60, instanceType: YTVoiceSearchService, lifetime: 0, scopeType: 0, configuration: None>";"YTWatchBreakController_API" = "SRLImplementation<0x2836a1aa0, instanceType: YTWatchBreakController, lifetime: 0, scopeType: 0, configuration: None>";"YTWatchEventCenter_API" = "SRLImplementation<0x2836a4390, instanceType: YTWatchEventCenter, lifetime: 0, scopeType: 0, configuration: None>";"YTWatchHistoryService_API" = "SRLImplementation<0x2834e97d0, instanceType: YTWatchHistoryService, lifetime: 0, scopeType: 1, configuration: None>";"YTWatchHistoryStatusNotifier_API" = "SRLImplementation<0x28349e100, instanceType: YTWatchHistoryStatusNotifier, lifetime: 0, scopeType: 0, configuration: None>";"YTWatchNextResponseFetcherAPI_API" = "SRLImplementation<0x282bbafa0, instanceType: YTAdBreakRendererFetcher, lifetime: 0, scopeType: 0, configuration: None>";"YTWatchNextService_API" = "SRLImplementation<0x282b9b090, instanceType: YTAppWatchNextService, lifetime: 0, scopeType: 0, configuration: None>";"YTWorkerController_API" = "SRLImplementation<0x28368a220, instanceType: YTWorkerController, lifetime: 0, scopeType: 0, configuration: None>";"YTWorkerScheduler_API" = "SRLImplementation<0x28357e880, instanceType: YTWorkerScheduler, lifetime: 0, scopeType: 0, configuration: None>";"YTYouTubeUserDefaults_API" = "SRLImplementation<0x2837f7f00, instanceType: YTYouTubeUserDefaults, lifetime: 0, scopeType: 4, configuration: None>";}Multi bindings:{"ELMMissingResourceHandler_API" = "{(\n)}";"ELMSecurityVerifier_API" = "{(\n)}";"YTAccountScopedInnerTubeContextDecorator_API" = "{(\n SRLImplementation<0x2834e94a0, instanceType: YTAccountScopedAdsInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>,\n SRLImplementation<0x2834e9710, instanceType: YTDataPushInnerTubeContextDecorator, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2834e92c0, instanceType: YTELMAccountScopedInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>,\n SRLImplementation<0x2834e82a0, instanceType: MLAccountScopedInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>,\n SRLImplementation<0x2834e9e30, instanceType: YTAccountScopedClientStoreInfoInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>,\n SRLImplementation<0x2834e9da0, instanceType: YTNotificationAccountScopedInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>,\n SRLImplementation<0x2834e9890, instanceType: YTLocationAccountScopedInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>,\n SRLImplementation<0x2834e9c80, instanceType: YTPlayerAccountScopedInnerTubeContextDecorator, lifetime: 0, scopeType: 1, configuration: None>\n)}";"YTAppBrowseServiceRequestDecorator_API" = "{(\n SRLImplementation<0x283713030, instanceType: YTDownloadsBrowseParamsBrowseRequestDecorator, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTAppBrowseServiceResponseProvider_API" = "{(\n SRLImplementation<0x2836b2640, instanceType: YTAppBrowseServiceLibraryResponseProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283689f80, instanceType: YTAppBrowseServicePlaylistResponseProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2836b0780, instanceType: YTAppBrowseServiceHomeResponseProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTBackgroundAppRefreshTask_API" = "{(\n SRLImplementation<0x2836cadf0, instanceType: YTAppBackgroundAppRefreshTask, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTBackgroundProcessingTask_API" = "{(\n SRLImplementation<0x2836cae50, instanceType: YTAppBackgroundProcessingTask, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTElementsCommandExtensionRegistryProvider_API" = "{(\n SRLImplementation<0x283572bb0, instanceType: YTCommentElementsCommandRegistryProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283572b80, instanceType: YTAdsElementsCommandExtensionRegistryProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283572b50, instanceType: YTAccountElementsCommandExtensionRegistryProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTElementsNodeClassRegistryProvider_API" = "{(\n SRLImplementation<0x283572dc0, instanceType: YTAdsElementsNodeClassRegistryProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283572df0, instanceType: YTCommentElementsNodeClassRegistryProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283572e20, instanceType: YTSuggestElementsNodeClassRegistryProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTEntityMergerProvider_API" = "{(\n SRLImplementation<0x283718ed0, instanceType: YTMarkersEngagementPanelSyncEntityMergerProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTEntityStoreQueryTable_API" = "{(\n SRLImplementation<0x283718c00, instanceType: YTTransferEntityQueryTable, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283718ba0, instanceType: YTOfflineActionWrapperEntityQueryTable, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283718c30, instanceType: YTOfflineRefreshEntityQueryTable, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTEntityTransformationTriggerProtocol_API" = "{(\n SRLImplementation<0x28361d020, instanceType: YTNetworkStatusEntityTransformationTrigger, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28361d050, instanceType: YTPersistentEntityStoreObserverTransformationTrigger, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28361d0b0, instanceType: YTInMemoryEntityStoreObserverTransformationTrigger, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28361ea60, instanceType: YTClockEntityTransformationTrigger, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTEntityTransformerProtocol_API" = "{(\n SRLImplementation<0x28361a250, instanceType: YTMainDownloadedVideoEntityToDownloadStatusEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28361adc0, instanceType: YTMainDownloadsListEntityToSmartDownloadsHeaderEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28361a580, instanceType: YTMainDownloadedVideoEntityToDownloadsPageVideoEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28361ae50, instanceType: YTMainRecommendedDownloadVideoEntityToDownloadsPageRecommendedVideoEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2836ee130, instanceType: YTMainVideoEntityToDownloadStatusEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2836eb8a0, instanceType: YTMainVideoEntityToDownloadsPageVideoEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28361a220, instanceType: YTMainDownloadedVideoEntityToDownloadedVideoWithContextEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28361ab50, instanceType: YTMainDownloadedPlaylistEntityToDownloadStatusEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283619e90, instanceType: YTMainDownloadedPlaylistEntityToDownloadsPagePlaylistEntityTransformer, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTInnerTubeCellControllerRegistrationProvider_API" = "{(\n SRLImplementation<0x2836036f0, instanceType: YTReelInnerTubeCellControllerRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTInnerTubeCellRegistrationProvider_API" = "{(\n SRLImplementation<0x28361f150, instanceType: YTReelInnerTubeCellRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTInnerTubeCommandRegistrationProvider_API" = "{(\n SRLImplementation<0x283681b90, instanceType: YTFlowCommandRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283681bc0, instanceType: YTReelInnerTubeCommandRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTInnerTubeContextDecorator_API" = "{(\n SRLImplementation<0x283714960, instanceType: YTELMInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>,\n SRLImplementation<0x283714690, instanceType: YTClientStoreInfoInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>,\n SRLImplementation<0x283714a50, instanceType: MLInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>,\n SRLImplementation<0x283714930, instanceType: YTLocationInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>,\n SRLImplementation<0x2837148d0, instanceType: YTDataPushInnerTubeContextDecorator, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x283714a80, instanceType: YTNotificationInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>,\n SRLImplementation<0x283714b10, instanceType: YTPlayerInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>,\n SRLImplementation<0x283714630, instanceType: YTAdsInnerTubeContextDecorator, lifetime: 0, scopeType: 4, configuration: None>\n)}";"YTInnerTubeControllerRegistrationProvider_API" = "{(\n SRLImplementation<0x2836dcea0, instanceType: YTReelShortsInnerTubeControllerRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2836dce70, instanceType: YTARCameraInnerTubeControllerRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTInnerTubeSectionControllerMatchingRegistrationProvider_API" = "{(\n SRLImplementation<0x2836c0120, instanceType: YTReelInnerTubeSectionControllerMatchingRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTInnerTubeTopControllerRegistrationProvider_API" = "{(\n SRLImplementation<0x2836dc7b0, instanceType: YTEditInnerTubeTopControllerRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2836dc7e0, instanceType: YTLiveCreationInnerTubeTopControllerRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2836dc810, instanceType: YTReelInnerTubeTopControllerRegistrationProvider, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTInnerTubeViewControllerMatchingRegistrationProvider_API" = "{(\n)}";"YTMainWindowObserver_API" = "{(\n SRLImplementation<0x28369f570, instanceType: YTELMWindowFrameObserver, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28369f5a0, instanceType: YTLastActionController, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTModuleInitializer_API" = "{(\n SRLImplementation<0x2837cf120, instanceType: YTInnerTubeModuleInitializer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2837cf0c0, instanceType: YTAccountModuleInitializer, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x2837cf0f0, instanceType: YTFamilyManagementModuleInitializer, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTPlaybackContextDecorator_API" = "{(\n SRLImplementation<0x2834b0e10, instanceType: MDXYTPlaybackContextDecorator, lifetime: 0, scopeType: 0, configuration: None>\n)}";"YTUploadFlowFactory_API" = "{(\n SRLImplementation<0x28349e9d0, instanceType: YTUploadFeedbackOnlyFlowFactory, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28349e6a0, instanceType: YTUploadShortsFlowFactory, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28349e5e0, instanceType: YTUploadNormalFlowFactory, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28349e910, instanceType: YTUploadArchiveReplacementFlowFactory, lifetime: 0, scopeType: 0, configuration: None>,\n SRLImplementation<0x28349eac0, instanceType: YTUploadReelsFlowFactory, lifetime: 0, scopeType: 0, configuration: None>\n)}";}
某个广告视频的内部返回数据:
hook代码:
- (void)setVideoDetails:(id)arg1{iosLogInfo("arg1=%@", arg1);%orig;}
输出:
2022-03-28 20:36:41.954044+0800 YouTube[25775:2715494] hook_ youtubeDylib.xm YTWatchMiniBarViewController$setVideoDetails$: arg1=<YTIVideoDetails 0x281b27f40>: {video_id: "LA6szWzus0g"title: "Get Chrome for iOS"length_seconds: 30channel_id: "UCL8ZULXASCc1I_oaOT0NaOQ"is_owner_viewing: falseshort_description: "Chrome is a fast, easy to use, and secure web browser for iOS. Get Chrome now. https://apps.apple.com/us/app/google-chrome/id535886823"is_crawlable: falsethumbnail {thumbnails {url: "https://i.ytimg.com/vi/LA6szWzus0g/hqdefault.jpg?sqp=-oaymwEYCHgQWkhG8quKqQMMCAEVAACIQnABwAEG&rs=AOn4CLBU26fMso0e3iR2comi4Uz-x5cj7Q"width: 120height: 90}thumbnails {url: "https://i.ytimg.com/vi/LA6szWzus0g/hqdefault.jpg?sqp=-oaymwEcCIACEJABSEbyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA2zPsvsB2aQxkZvfPFXMVhwdkpHQ"width: 256height: 144}thumbnails {url: "https://i.ytimg.com/vi/LA6szWzus0g/hqdefault.jpg?sqp=-oaymwEcCMACELQBSEbyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDOaI6fXD2ptZTQmDP1myZBfcg13Q"width: 320height: 180}thumbnails {url: "https://i.ytimg.com/vi_webp/LA6szWzus0g/hqdefault.webp"width: 480height: 360}thumbnails {url: "https://i.ytimg.com/vi_webp/LA6szWzus0g/sddefault.webp"width: 640height: 480}thumbnails {url: "https://i.ytimg.com/vi/LA6szWzus0g/hq720.jpg?sqp=-oaymwEcCK4FEIIDSEbyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDvGWQtBtiONoEcK933xt4Aypr_7w"width: 686height: 386}}allow_ratings: trueview_count: "26531222"author: "Google Chrome"is_private: falseis_unplugged_corpus: falseis_live_content: false}
一些hook的核心的类
youtubeDylib/Logos/youtubeReqResp.xm
/*File: youtubeReqResp.xmFunction: Youtube hook request and response related*/#import <UIKit/UIKit.h>#import <objc/objc-runtime.h>#import "CrifanLibiOS.h"#import "youtubeCommon.h"/*------------------------------------------------------------------------------NSURLRequest------------------------------------------------------------------------------*/%hook NSURLRequest+ (NSURLRequest*)requestWithURL:(NSURL *)URL{NSURLRequest* rwu = %orig;if (isYoutubeAdsVideo_current(URL)){iosLogInfo("isYoutubeAdsVideo_current: %@ -> rwu=%@", URL, rwu);gNoUse = 1;}return rwu;}- (NSURLRequest*)initWithURL:(NSURL *)URL{NSURLRequest* iwu = %orig;if (isYoutubeAdsVideo_current(URL)){iosLogInfo("isYoutubeAdsVideo_current: %@ -> iwu=%@", URL, iwu);gNoUse = 1;}return iwu;}+ (NSURLRequest*)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval{NSURLRequest* rwu_uct = %orig;iosLogInfo("URL=%@,cachePolicy=%lu,timeoutInterval=%f -> rwu_uct=%@", URL, (unsigned long)cachePolicy, timeoutInterval, rwu_uct);if (is1SecondVideo(URL)){iosLogInfo("URL=%@", URL);gNoUse = 1;}if (isYoutubeAdsVideo_current(URL)){gNoUse = 1;}return rwu_uct;}- (NSURLRequest*)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval{NSURLRequest* iwu_uct = %orig;if (isYoutubeAdsVideo_current(URL)){iosLogInfo("isYoutubeAdsVideo_current: URL=%@,cachePolicy=%lu,timeoutInterval=%f -> iwu_uct=%@", URL, (unsigned long)cachePolicy, timeoutInterval, iwu_uct);gNoUse = 1;}return iwu_uct;}%end/*------------------------------------------------------------------------------NSMutableURLRequest------------------------------------------------------------------------------*/%hook NSMutableURLRequest- (void)setHTTPBody: (NSData*)newHttpBodyData {NSURL *reqUrl = [self URL];if (isYoutubeAdsVideo_current(reqUrl)){iosLogInfo("isYoutubeAdsVideo_current: reqUrl=%@", reqUrl);gNoUse = 1;}%orig;}%end/*------------------------------------------------------------------------------NSHTTPURLResponse------------------------------------------------------------------------------*/%hook NSHTTPURLResponse- (NSHTTPURLResponse*)initWithURL:(NSURL *)urlstatusCode:(NSInteger)statusCodeHTTPVersion:(NSString *)HTTPVersionheaderFields:(NSDictionary<NSString *,NSString *> *)headerFields{NSHTTPURLResponse* newUrlResp = %orig;if (is1SecondVideo(url)){iosLogInfo("url=%@", url);gNoUse = 1;}if (isYoutubeAdsVideo_current(url)){iosLogInfo("isYoutubeAdsVideo_current: url=%@,statusCode=%ld,HTTPVersion=%@,headerFields=%@ -> newUrlResp=%@", url, statusCode, HTTPVersion, headerFields, newUrlResp);gNoUse = 1;if (isYoutubeAdsVideo_ctierA(url)){iosLogInfo("isYoutubeAdsVideo_ctierA: url=%@,statusCode=%ld,HTTPVersion=%@,headerFields=%@ -> newUrlResp=%@", url, statusCode, HTTPVersion, headerFields, newUrlResp);gNoUse = 1;}} else {// TODO: after test, change back to ads video filteriosLogInfo("url=%@", url);gNoUse = 1;}return newUrlResp;}-(NSDictionary *)allHeaderFields{NSURL* curUrl = [self URL];if (isYoutubeAdsVideo_current(curUrl)){// iosLogInfo("isYoutubeAdsVideo: self=%@", self);gNoUse = 1;}NSDictionary* allHeader = %orig;iosLogInfo("curUrl=%@ : allHeader=%@", curUrl, allHeader);return allHeader;}-(NSInteger)statusCode{NSURL* curUrl = [self URL];if (isYoutubeAdsVideo_current(curUrl)){// iosLogInfo("isYoutubeAdsVideo: self=%@", self);gNoUse = 1;}NSInteger respStatusCode = %orig;iosLogInfo("respStatusCode=%ld", respStatusCode);return respStatusCode;}%end/*------------------------------------------------------------------------------HAMDataLoadRequest------------------------------------------------------------------------------*/%hook HAMDataLoadRequest- (id)initWithRangedURL:(id)rangeUrl timeoutInterval:(double)timeoutInterval HTTPMethod:(NSString*)HTTPMethod HTTPContentType:(NSString*)HTTPContentType HTTPBody:(id)HTTPBody idempotent:(_Bool)idempotent{iosLogInfo("rangeUrl=%@,timeoutInterval=%f,HTTPMethod=%@,HTTPContentType=%@,HTTPBody=%@,idempotent=%s", rangeUrl, timeoutInterval, HTTPMethod, HTTPContentType, HTTPBody, boolToStr(idempotent));gNoUse = 1;id newDataLoadReq = %orig;return newDataLoadReq;}- (id)initWithRangedURL:(id)rangeUrl{iosLogInfo("rangeUrl=%@", rangeUrl);gNoUse = 1;id newDataLoadReq = %orig;return newDataLoadReq;}- (id)initWithURL:(id)url{iosLogInfo("url=%@", url);gNoUse = 1;id newDataLoadReq = %orig;return newDataLoadReq;}%end/*------------------------------------------------------------------------------MLOnesieRequestFactory------------------------------------------------------------------------------*/%hook MLOnesieRequestFactory- (id)onesieRequestForPlayerRequest:(id)request dataLoader:(id)dataLoader context:(id)context cryptor:(id)cryptor requestNumber:(long long)requestNumber error:(id *)error{iosLogInfo("request=%@,dataLoader=%@,context=%@,cryptor=%@,requestNumber=%lld,error=%p", request, dataLoader, context, cryptor, requestNumber, error);gNoUse = 1;id newReqFactory = %orig;iosLogInfo("-> newReqFactory=%@", newReqFactory);return newReqFactory;}- (void)onesieRequestForPlayerRequest:(id)request authorization:(id)authorization dataLoader:(id)dataLoader context:(id)context cryptor:(id)cryptor requestNumber:(long long)requestNumber completionHandler:(id)completionHandler{iosLogInfo("request=%@,authorization=%@,dataLoader=%@,context=%@,cryptor=%@,requestNumber=%lld,completionHandler=%@", request, authorization, dataLoader, context, cryptor, requestNumber, completionHandler);gNoUse = 1;%orig;}%end/*------------------------------------------------------------------------------YTIInnerTubeContext------------------------------------------------------------------------------*/%hook YTIInnerTubeContext- (id)data{id ctxData = %orig;iosLogInfo("ctxData=%@", ctxData);return ctxData;}+ (id)descriptor{gNoUse = 1;id curDesc = %orig;iosLogInfo("curDesc=%@", curDesc);return curDesc;}-(YTIClientInfo*)remoteClient{gNoUse = 1;YTIClientInfo* newClientInfo = %orig;iosLogInfo("newClientInfo=%@", newClientInfo);return newClientInfo;}%end/*------------------------------------------------------------------------------YTPlayerService------------------------------------------------------------------------------*/%hook YTPlayerService- (id)makePlaybackRequest:(id)playbackRequest responseBlock:(id)responseBlock errorBlock:(id)errorBlock{iosLogInfo("playbackRequest=%@,responseBlock=%@,errorBlock=%@", playbackRequest, responseBlock, errorBlock);gNoUse = 1;id newPlayService = %orig;iosLogInfo("-> newPlayService=%@", newPlayService);return newPlayService;}%end/*------------------------------------------------------------------------------YTPlayerRequestFactory------------------------------------------------------------------------------*/%hook YTPlayerRequestFactory- (id)requestForPlayerWithPlayerRequest:(id)playerRequest URLRequestProperties:(id)URLRequestProperties{iosLogInfo("playerRequest=%@,URLRequestProperties=%@", playerRequest, URLRequestProperties);gNoUse = 1;id newReqFactory = %orig;iosLogInfo("-> newReqFactory=%@", newReqFactory);return newReqFactory;}- (id)innerTubeRequestForPlayerWithVideoID:(id)videoID playlistID:(id)playlistID playlistIndex:(unsigned long long)playlistIndex playbackContext:(id)playbackContext forOffline:(_Bool)forOffline clickTrackingParams:(id)clickTrackingParams playerParams:(id)playerParams{iosLogInfo("videoID=%@,playlistID=%@,playlistIndex=%lld,playbackContext=%@,forOffline=%s,clickTrackingParams=%@,playerParams=%@", videoID, playlistID, playlistIndex, playbackContext, boolToStr(forOffline), clickTrackingParams, playerParams);gNoUse = 1;id newPlayerReqFactory = %orig;iosLogInfo("-> newPlayerReqFactory=%@", newPlayerReqFactory);return newPlayerReqFactory;}%end/*------------------------------------------------------------------------------YTPlaybackDataLoader------------------------------------------------------------------------------*/%hook YTPlaybackDataLoader- (id)onlinePromise{iosLogInfo("%s", "");gNoUse = 1;id newPromise = %orig;iosLogInfo("-> newPromise=%@", newPromise);return newPromise;}- (id)createPlaybackRequest{iosLogInfo("%s", "");gNoUse = 1;id newReq = %orig;iosLogInfo("-> newReq=%@", newReq);return newReq;}%end/*------------------------------------------------------------------------------YTPlaybackRequestFactory------------------------------------------------------------------------------*/%hook YTPlaybackRequestFactory- (id)playbackRequestForPlayerTransition:(id)playerTransition visibility:(int)visibility viewportSizeProvider:(id)viewportSizeProvider mediaStickySettings:(id)mediaStickySettings prefetchContext:(id)prefetchContext{iosLogInfo("playerTransition=%@,visibility=%d,viewportSizeProvider=%@,mediaStickySettings=%@,prefetchContext=%@", playerTransition, visibility, viewportSizeProvider, mediaStickySettings, prefetchContext);gNoUse = 1;id newPlaybackReqFactory = %orig;iosLogInfo("-> newPlaybackReqFactory=%@", newPlaybackReqFactory);return newPlaybackReqFactory;}%end/*------------------------------------------------------------------------------GPBMessage------------------------------------------------------------------------------*/%hook GPBMessage- (id)data{gNoUse = 1;id neGpbwData = %orig;iosLogInfo("-> neGpbwData=%@", neGpbwData);return neGpbwData;}%end/*------------------------------------------------------------------------------YTAccountScopedInnerTubeRequestFactory------------------------------------------------------------------------------*/%hook YTAccountScopedInnerTubeRequestFactory- (id)requestForProtoRequest:(id)protoRequest withService:(long long)serviceNumber needsClickTrackingParams:(_Bool)needsClickTrackingParams{iosLogInfo("protoRequest=%@,serviceNumber=%lld,needsClickTrackingParams=%s", protoRequest, serviceNumber, boolToStr(needsClickTrackingParams));if (ServiceNumber_AdBreak == serviceNumber){iosLogInfo("is ServiceNumber_AdBreak: %lld", serviceNumber);gNoUse = 1;}id newRequest = %orig;return newRequest;}%end/*------------------------------------------------------------------------------YTPlayerBytesSlotFulfillmentAdapter------------------------------------------------------------------------------*/%hook YTPlayerBytesSlotFulfillmentAdapter- (void)fillSlot{iosLogInfo("%s", "");%orig;}%end/*------------------------------------------------------------------------------YTAdBreakMetadataProvider------------------------------------------------------------------------------*/%hook YTAdBreakMetadataProvider+ (id)dataFromMetadata:(id)metadata{id data = %orig;iosLogInfo("metadata=%@ -> data=%@", metadata, data);return data;}%end/*------------------------------------------------------------------------------YTAdClientMetadataAbstractProvider------------------------------------------------------------------------------*/%hook YTAdClientMetadataAbstractProvider+ (id)tagName{id curTagName = %orig;iosLogInfo("curTagName=%@", curTagName);return curTagName;}%end/*------------------------------------------------------------------------------YTAdClientMetadata------------------------------------------------------------------------------*/%hook YTAdClientMetadata- (id)metadataProviderForProviderName:(id)providerName{id metadataProvider = %orig;iosLogInfo("providerName=%@ -> metadataProvider=%@", providerName, metadataProvider);return metadataProvider;}%end
一些核心的类的IDA伪代码
-[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]HAMCronetDataLoadTask_startWithDelegate_delegateQueue.coffee
void __cdecl -[HAMCronetDataLoadTask startWithDelegate:delegateQueue:](HAMCronetDataLoadTask *self, SEL a2, id inputDelegate, id inputDispatchQueue){struct objc_object *dispatchQueue; // x21struct objc_object *curDelegate; // x20HAMCronetDataLoadTask *curHAMCronetDataLoadTask; // x27struct objc_object *dispatchQueue_; // x23double absoluteTime; // d0__int64 CronetDataLoadTask; // x19NSURLRequest *request; // x28double timeoutInterval; // d8NSDictionary *userInfo; // x26struct objc_object *clock; // x24Cronet_Engine *engine; // ST30_8id request_; // x20id clock_; // x22HAMCronetDataLoadTask *curHAMCronetDataLoadTask_; // x25OS_dispatch_queue **v18; // x27__int64 v19; // x0Cronet_UrlRequestCallback *cronetUrlRequestCallback; // x21id clock__; // x0CronetDataLoadTask *CronetDataLoadTask_; // x22double clockAbsoluteTime; // d0struct objc_object *v24; // x0HAMDataLoadTaskObserver *MLHAMDataLoadTaskObserverImpl; // x0struct objc_object *v26; // x8Cronet_Executor *Cronet_ExecutorPtr; // x0void *Cronet_UrlRequestParamsPtr; // x19struct objc_object *v29; // x0NSString *httpMethod; // x28NSString *requestMethod_1; // x0char *requestMethodStr; // x0struct objc_object *v33; // x0id allHTTPHeaderFields; // x21struct objc_object *v35; // x0id HTTPBody; // x21Cronet_UploadDataProvider *Cronet_UploadDataProviderPtr; // x0struct objc_object *v38; // x0id v39; // x0struct objc_object *requestUrl; // x24struct objc_object *v41; // x0struct objc_object *requestUrlNSString; // x26Cronet_Executor *v43; // x5int Cronet_RESULT_InitWithParams; // w26OS_dispatch_queue *v45; // x0void (__fastcall *blockInvokeFunc)(__int64); // x8struct objc_object *inputDelegate_1; // x19struct objc_object *userInfo_1; // x23struct objc_object *dispatchQueue_2; // x24int Cronet_RESULT_Start; // w0id dispatchQueue_1; // [xsp+8h] [xbp-F8h]id userInfo_; // [xsp+10h] [xbp-F0h]id inputDelegate_; // [xsp+18h] [xbp-E8h]BOOL idempotent; // [xsp+2Ch] [xbp-D4h]struct objc_object *object; // [xsp+38h] [xbp-C8h]void **stackBlock; // [xsp+40h] [xbp-C0h]InternalMetadata v57; // [xsp+48h] [xbp-B8h]HasBits<1> v58[2]; // [xsp+50h] [xbp-B0h]void *v59; // [xsp+58h] [xbp-A8h]CronetDataLoadTask *v60; // [xsp+60h] [xbp-A0h]int v61; // [xsp+68h] [xbp-98h]void **globalBlock; // [xsp+70h] [xbp-90h]__int64 blockFlags; // [xsp+78h] [xbp-88h]void (__fastcall *blockInvoke)(__int64, struct objc_object *, struct objc_object *); // [xsp+80h] [xbp-80h]void **blockDescriptor; // [xsp+88h] [xbp-78h]void *v66; // [xsp+90h] [xbp-70h]dispatchQueue = inputDispatchQueue;curDelegate = inputDelegate;curHAMCronetDataLoadTask = self;inputDelegate_ = objc_retain(inputDelegate);dispatchQueue_ = objc_retain(dispatchQueue);objc_msgSend_3E84298((void *)curHAMCronetDataLoadTask->_clock, "absoluteTime");curHAMCronetDataLoadTask->_startTime = absoluteTime;CronetDataLoadTask = (__int64)&curHAMCronetDataLoadTask->_task;objc_storeStrong((id *)&curHAMCronetDataLoadTask->_task.delegate_, curDelegate);request = curHAMCronetDataLoadTask->_request;timeoutInterval = curHAMCronetDataLoadTask->_timeoutInterval;idempotent = curHAMCronetDataLoadTask->_idempotent;userInfo = curHAMCronetDataLoadTask->_userInfo;clock = (struct objc_object *)curHAMCronetDataLoadTask->_clock;engine = curHAMCronetDataLoadTask->_engine;request_ = objc_retain((id)curHAMCronetDataLoadTask->_request);userInfo_ = objc_retain((id)userInfo);clock_ = objc_retain(clock);curHAMCronetDataLoadTask_ = (HAMCronetDataLoadTask *)objc_retain((id)curHAMCronetDataLoadTask);dispatchQueue_1 = objc_retain(dispatchQueue_);objc_storeStrong((id *)&curHAMCronetDataLoadTask_->_task.parentTask_, (id)curHAMCronetDataLoadTask);objc_storeStrong((id *)&curHAMCronetDataLoadTask_->_task.URLRequest_, (id)request);curHAMCronetDataLoadTask_->_task.timeoutInterval_ = timeoutInterval;objc_storeStrong((id *)&curHAMCronetDataLoadTask_->_task.userInfo_, (id)userInfo);objc_storeStrong((id *)&curHAMCronetDataLoadTask_->_task.clock_, clock);v18 = &curHAMCronetDataLoadTask_->_task.queue_;objc_storeStrong((id *)&curHAMCronetDataLoadTask_->_task.queue_, dispatchQueue);curHAMCronetDataLoadTask_->_task.request_ = (Cronet_UrlRequest *)sub_3DF6D08(v19);cronetUrlRequestCallback = (Cronet_UrlRequestCallback *)mallocAndSetResponseCallbacks_3DF91D8((__int64)Cronet_UrlRequestCallback_OnRedirectReceived_194C9D8,(__int64)Cronet_UrlRequestCallback_OnResponseStarted_194CCE4,(__int64)Cronet_UrlRequestCallback_OnReadCompleted_194CFE8,(__int64)Cronet_UrlRequestCallback_OnSucceeded_194D248,(__int64)Cronet_UrlRequestCallback_OnFailed_194D310,(__int64)Cronet_UrlRequestCallback_OnCanceled_194D5C0);setOffest8Value_3DF9198((__int64)cronetUrlRequestCallback, CronetDataLoadTask);curHAMCronetDataLoadTask_->_task.callback_ = cronetUrlRequestCallback;object = clock_;clock__ = clock_;CronetDataLoadTask_ = (CronetDataLoadTask *)CronetDataLoadTask;objc_msgSend_3E84298(clock__, "absoluteTime");curHAMCronetDataLoadTask_->_task.absoluteTime_ = clockAbsoluteTime;v24 = (struct objc_object *)InjectOptionalHAMDataLoadTaskObserver();MLHAMDataLoadTaskObserverImpl = (HAMDataLoadTaskObserver *)objc_retainAutoreleasedReturnValue_3E842EC(v24);v26 = (struct objc_object *)curHAMCronetDataLoadTask_->_task.observer_;curHAMCronetDataLoadTask_->_task.observer_ = MLHAMDataLoadTaskObserverImpl;objc_release_3E842BC(v26);objc_msgSend_3E84298((void *)curHAMCronetDataLoadTask_->_task.observer_,"dataLoadTaskDidStart:",curHAMCronetDataLoadTask_);Cronet_ExecutorPtr = (Cronet_Executor *)Cronet_Executor_CreateWith_3DF9004(Cronet_Executor_ExecuteFunc_194C27C);curHAMCronetDataLoadTask_->_task.executor_ = Cronet_ExecutorPtr;setOffest8Value_3DF8FF8((__int64)Cronet_ExecutorPtr, CronetDataLoadTask);Cronet_UrlRequestParamsPtr = (void *)Cronet_UrlRequestParams_Create_3DFA39C();v29 = (struct objc_object *)objc_msgSend_3E84298(request_, "HTTPMethod");httpMethod = (NSString *)objc_retainAutoreleasedReturnValue_3E842EC(v29);if ( httpMethod ){requestMethod_1 = (NSString *)objc_retainAutorelease_3E842D4();requestMethodStr = (char *)objc_msgSend_3E84298(requestMethod_1, "UTF8String");Cronet_UrlRequestParams_http_method_set_3DFA3D0((__int64)Cronet_UrlRequestParamsPtr, (__int64)requestMethodStr);}if ( idempotent )Cronet_UrlRequestParams_idempotency_set_3DFA45C((__int64)Cronet_UrlRequestParamsPtr, 1);// 1=Cronet_UrlRequestParams_IDEMPOTENCY_IDEMPOTENTv33 = (struct objc_object *)objc_msgSend_3E84298(request_, "allHTTPHeaderFields");allHTTPHeaderFields = objc_retainAutoreleasedReturnValue_3E842EC(v33);globalBlock = _NSConcreteGlobalBlock;blockFlags = 0xD0800000LL;blockInvoke = cornetAddHeader_194C2FC;blockDescriptor = (void **)&unk_4EF9AF8;v66 = Cronet_UrlRequestParamsPtr;objc_msgSend_3E84298(allHTTPHeaderFields, "enumerateKeysAndObjectsUsingBlock:", &globalBlock);objc_release_3E842BC(allHTTPHeaderFields);v35 = (struct objc_object *)objc_msgSend_3E84298(request_, "HTTPBody");HTTPBody = objc_retainAutoreleasedReturnValue_3E842EC(v35);if ( objc_msgSend_3E84298(HTTPBody, "length") ){Cronet_UploadDataProviderPtr = (Cronet_UploadDataProvider *)Cronet_UploadDataProvider_CreateWith_3DF92E0((__int64)Cronet_UploadDataProvider_GetLengthFunc_194C3C4,(__int64)Cronet_UploadDataProvider_ReadFunc_194C418,(__int64)Cronet_UploadDataProvider_RewindFunc_194C4F4,(__int64)Cronet_UploadDataProvider_CloseFunc_194C51C);curHAMCronetDataLoadTask_->_task.uploadDataProvider_ = Cronet_UploadDataProviderPtr;setOffest8Value_3DF92A0((__int64)Cronet_UploadDataProviderPtr, (__int64)CronetDataLoadTask_);Cronet_UrlRequestParams_upload_data_provider_set_3DFA3EC((__int64)Cronet_UrlRequestParamsPtr,(__int64)curHAMCronetDataLoadTask_->_task.uploadDataProvider_);Cronet_UrlRequestParams_upload_data_provider_executor_set_3DFA3F4((__int64)Cronet_UrlRequestParamsPtr,(__int64)curHAMCronetDataLoadTask_->_task.executor_);}v38 = (struct objc_object *)objc_msgSend_3E84298(request_, "URL");v39 = objc_retainAutoreleasedReturnValue_3E842EC(v38);requestUrl = v39;v41 = (struct objc_object *)objc_msgSend_3E84298(v39, "absoluteString");objc_retainAutoreleasedReturnValue_3E842EC(v41);requestUrlNSString = (struct objc_object *)objc_retainAutorelease_3E842D4();objc_msgSend_3E84298(requestUrlNSString, "cStringUsingEncoding:", 4LL);objc_release_3E842BC(requestUrlNSString);objc_release_3E842BC(requestUrl);v43 = curHAMCronetDataLoadTask_->_task.executor_;Cronet_RESULT_InitWithParams = Cronet_UrlRequest_InitWithParams_3DF931C((__int64)curHAMCronetDataLoadTask_->_task.request_);Cronet_UrlRequestParams_Destroy_3DFA3B8(Cronet_UrlRequestParamsPtr);if ( Cronet_RESULT_InitWithParams ){v45 = *v18;stackBlock = _NSConcreteStackBlock;blockInvokeFunc = InitWithParamsErrorCallback_194C520;userInfo_1 = userInfo_;inputDelegate_1 = inputDelegate_;dispatchQueue_2 = dispatchQueue_1;LABEL_11:v57.var0 = 0xC0000000LL;*(_QWORD *)v58[0].var0 = blockInvokeFunc;v59 = &unk_4EF9B18;v60 = CronetDataLoadTask_;v61 = Cronet_RESULT_InitWithParams;dispatch_async(v45, &stackBlock);goto LABEL_12;}tryResetTimeoutTimer_194C704(CronetDataLoadTask_);Cronet_RESULT_Start = callCronetUrlRequestStart_3DF9338((__int64)curHAMCronetDataLoadTask_->_task.request_);userInfo_1 = userInfo_;inputDelegate_1 = inputDelegate_;dispatchQueue_2 = dispatchQueue_1;if ( Cronet_RESULT_Start ){Cronet_RESULT_InitWithParams = Cronet_RESULT_Start;v45 = *v18;stackBlock = _NSConcreteStackBlock;blockInvokeFunc = startErrorCallback_194C7FC;goto LABEL_11;}LABEL_12:objc_release_3E842BC(HTTPBody);objc_release_3E842BC((id)httpMethod);objc_release_3E842BC(dispatchQueue_2);objc_release_3E842BC((id)curHAMCronetDataLoadTask_);objc_release_3E842BC(object);objc_release_3E842BC(userInfo_1);objc_release_3E842BC(request_);objc_release_3E842BC(dispatchQueue_2);objc_release_3E842BC(inputDelegate_1);}
广告过滤内部调用逻辑,涉及到多个函数多个参数:
disable_ads_filter_logic.coffee
禁用广告过滤时,多次调试目前的发现的逻辑是:---【1】即使是 oad 的 initplayback ,正常返回response,也会返回错误(1) case 1:请求:NSURLRequest requestWithURL:cachePolicy:timeoutIntervalURL=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140cachePolicy=0timeoutInterval=60.000000响应:NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields:url=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140statusCode=200HTTPVersion=(null)headerFields={"alt-svc" = "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"";"cache-control" = "public, max-age=86400";"client-protocol" = quic;"content-type" = "application/vnd.yt-ump";"cross-origin-resource-policy" = "cross-origin";date = "Tue, 12 Jul 2022 01:52:01 GMT";expires = "Wed, 13 Jul 2022 01:52:01 GMT";server = "gvs 1.0";vary = Origin;"x-content-type-options" = nosniff;}但还是会报错:NSError errorWithDomain:code:userInfo:errDomain=com.google.ios.hamplayercode=6000userInfo={HAMErrorDetails = "cronet=10|internal=-356|quic=85";HAMErrorURLRequest = "<NSMutableURLRequest: 0x282833ae0>{URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140}";HAMRequestNumberLoadTaskKey = 1;}以及:NSError ml_mediaErrorWithCode:underlyingError:arg1=708underlyingError=Error Domain=com.google.ios.hamplayerCode=6000 "(null)"UserInfo={HAMErrorDetails=cronet=10|internal=-356|quic=85HAMRequestNumberLoadTaskKey=1HAMErrorURLRequest=<NSMutableURLRequest: 0x282833ae0>{URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140 }} -> mmewc=Error Domain=YTMediaError Code=708 "(null)" UserInfo={NSUnderlyingError=0x283bda940 {Error Domain=com.google.ios.hamplayer Code=6000 "(null)" UserInfo={HAMErrorDetails=cronet=10|internal=-356|quic=85, HAMRequestNumberLoadTaskKey=1, HAMErrorURLRequest=<NSMutableURLRequest: 0x282833ae0> { URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=be5e83dddc65db9b&initcwndbps=1127500&mt=1657589100&ack=1&cpn=j3M40XDCGhcG1Jgj&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140}}(2) case 2:NSURLRequest requestWithURL:cachePolicy:timeoutInterval:URL=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140cachePolicy=0timeoutInterval=60.000000响应:NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields:url=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140statusCode=200HTTPVersion=(null)headerFields={"alt-svc" = "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"";"cache-control" = "public, max-age=86400";"client-protocol" = quic;"content-type" = "application/vnd.yt-ump";"cross-origin-resource-policy" = "cross-origin";date = "Tue, 12 Jul 2022 02:00:07 GMT";expires = "Wed, 13 Jul 2022 02:00:07 GMT";server = "gvs 1.0";vary = Origin;"x-content-type-options" = nosniff;}也还是会报错:NSError errorWithDomain:code:userInfo:errDomain=com.google.ios.hamplayercode=6000userInfo={HAMErrorDetails = "cronet=10|internal=-356|quic=85";HAMErrorURLRequest = "<NSMutableURLRequest: 0x2828fc1b0> {URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140}";HAMRequestNumberLoadTaskKey = 1;}以及:NSError HAMErrorWithCode:userInfo:reqUrl=https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140以及:NSError ml_mediaErrorWithCode:underlyingError:arg1=708underlyingError=Error Domain=com.google.ios.hamplayerCode=6000 "(null)"UserInfo={HAMErrorDetails=cronet=10|internal=-356|quic=85HAMRequestNumberLoadTaskKey=1HAMErrorURLRequest=<NSMutableURLRequest: 0x2828fc1b0> {URL: https://rr2---sn-phvo-jpqe.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=38d955056e41c6f3&initcwndbps=1195000&mt=1657590782&ack=1&cpn=SKSZKIy7lZZ2pxor&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140}}【2】即使是 ctier=L 的 videoplayback,在 前几次请求(rn=1、rn=2等)时,正常返回response,也会报错(1) rn=1 的 ctier=LNSURLRequest requestWithURL:cachePolicy:timeoutInterval:URL=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=1cachePolicy=0timeoutInterval=60.000000也还是会报错:NSError errorWithDomain:code:userInfo:reqUrl=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=1以及:NSError HAMErrorWithCode:userInfo:reqUrl=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=1(2) rn=2 的 ctier=L正常响应,但也报错:NSHTTPURLResponse initWithURL:statusCode:HTTPVersionLheaderFields:url=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=2statusCode=200HTTPVersion=(null)headerFields={"alt-svc" = "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"";"cache-control" = "private, max-age=21041";"client-protocol" = quic;"content-type" = "application/vnd.yt-ump";"cross-origin-resource-policy" = "cross-origin";date = "Tue, 12 Jul 2022 02:14:24 GMT";expires = "Tue, 12 Jul 2022 02:14:24 GMT";server = "gvs 1.0";vary = Origin;"x-content-type-options" = nosniff;}但也会报错:NSError errorWithDomain:code:userInfo:【3】当 rn=2 或 rn=3 时的 ctier=L 就正常了,不报错了,能正常返回数据了(1) rn=3 的 ctier=LNSURLRequest requestWithURL:cachePolicy:timeoutInterval:URL=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=3cachePolicy=0timeoutInterval=60.000000响应:NSHTTPURLResponse initWithURL:statusCode:HTTPVersion:headerFields:url=https://rr2---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657613405&ei=_dfMYqC2IuGajQTGv7PYAw&ip=162.253.45.206&id=o-AIjeweHrLqp_Pz6Ozv20T5JprNQBR0HmN6o8txqvBehU&source=youtube&requiressl=yes&mh=GE&mm=31,29&mn=sn-phvo-jpql,sn-vgqsrnlk&ms=au,rdu&mv=m&mvi=2&pl=22&ctier=L&initcwndbps=1213750&svpuc=1&sabr=1&mt=1657591502&fvip=2&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRAIgVsPJepnUO4V9FcfXV3OqVZtNkVp5xDAw-jIIOVaPqpUCID1hXsWyAMG-_A41aRCm2HF5eqtfDTt5IJs_ATne2Jfz&lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbps&lsig=AG3C_xAwRAIgTJgONnp0_iio87Dj5f9DciH8TzxX_zPCs1clwp4poqACIDPhiXjWBAuAs9GAhBSD11lyHobe7EfWyHSV4Eoixwhh&cpn=aFN2DnMpoKgorDiB&rn=3statusCode=200HTTPVersion=(null)headerFields={"alt-svc" = "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"";"cache-control" = "private, max-age=20802";"client-protocol" = quic;"content-type" = "application/vnd.yt-ump";"cross-origin-resource-policy" = "cross-origin";date = "Tue, 12 Jul 2022 02:18:23 GMT";expires = "Tue, 12 Jul 2022 02:18:23 GMT";server = "gvs 1.0";vary = Origin;"x-content-type-options" = nosniff;}(2) rn=2 的 ctier=L,且能正常返回视频数据chunksMLServerABRLoader dataLoadTask:didReceiveResponse:arg1=<MLServerABRDataLoadTask: 0x285a0bb70>didReceiveResponse=<NSHTTPURLResponse: 0x280dae440>{URL: https://rr1---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657615602&ei=kuDMYrOaBpHDigT5y4LYDw&ip=162.253.45.206&id=o-AMkZiBzQ6p7kCJW94A6DtyMGG3HfqwKg1KnZ-fNzwp2U&source=youtube&requiressl=yes&mh=Mk&mm=31,29&mn=sn-phvo-jpql,sn-vgqsknsk&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=22&ctier=L&initcwndbps=1266250&svpuc=1&sabr=1&mt=1657593666&fvip=4&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIgAqEYZlR2jQz3cDKbLMWJKMhZa_JyTS1vtd_9O64WLDkCIQDfL32Gx3XA9C4XUvNdiiXvM8TQjClSjAv2N0B2bt-flw%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRgIhAJ8F9p0MlD7yBXsonsAKJ95tApty4njmPKzuAFqoM81WAiEAlFcqzn3LXLCxMMe_WxKUJOd4L9uLrZ7oP_BtbspIFBY%3D&cpn=tuURUWDAKHN5FNX8&rn=2}{Status Code: 200Headers {"Cache-Control" = ("private, max-age=20896");"Content-Type" = ("application/vnd.yt-ump");Date = ("Tue, 12 Jul 2022 02:53:26 GMT");Expires = ("Tue, 12 Jul 2022 02:53:26 GMT");Server = ("gvs 1.0");Vary = (Origin);"alt-svc" = ("h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"");"client-protocol" = (quic);"cross-origin-resource-policy" = ("cross-origin");"x-content-type-options" = (nosniff);}}MLServerABRLoader dataLoadTask:didReceiveData:arg1=<MLServerABRDataLoadTask: 0x285a0bb70>didReceiveData={length = 65536, bytes = 0x235908d0 fa0610d0 fa0618e0 d4033a4b ... 4286a906 e50ad07b }不过后续此处 rn=2 的 ctier=L 也报错了:NSError errorWithDomain:code:userInfo:https://rr1---sn-phvo-jpql.googlevideo.com/videoplayback?expire=1657615602&ei=kuDMYrOaBpHDigT5y4LYDw&ip=162.253.45.206&id=o-AMkZiBzQ6p7kCJW94A6DtyMGG3HfqwKg1KnZ-fNzwp2U&source=youtube&requiressl=yes&mh=Mk&mm=31,29&mn=sn-phvo-jpql,sn-vgqsknsk&ms=au,rdu&mv=m&mvi=1&pcm2cms=yes&pl=22&ctier=L&initcwndbps=1266250&svpuc=1&sabr=1&mt=1657593666&fvip=4&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIgAqEYZlR2jQz3cDKbLMWJKMhZa_JyTS1vtd_9O64WLDkCIQDfL32Gx3XA9C4XUvNdiiXvM8TQjClSjAv2N0B2bt-flw%3D%3D&lsparams=mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps&lsig=AG3C_xAwRgIhAJ8F9p0MlD7yBXsonsAKJ95tApty4njmPKzuAFqoM81WAiEAlFcqzn3LXLCxMMe_WxKUJOd4L9uLrZ7oP_BtbspIFBY%3D&cpn=tuURUWDAKHN5FNX8&rn=2
initplayback
发起(正常视频或广告视频的)视频数据请求的
https://rr3---sn-vgqsknek.googlevideo.com/initplayback?source=youtube&orc=1&oeis=1&c=IOS&oss=1&oda=1&oad=5500&ovd=5500&oaad=11000&oavd=11000&ocs=700&oputc=1&oses=1&ofpcc=1&osbr=1&osnz=1&msp=1&odeak=1&odepv=1&osfc=1&id=553003fe2eb8727c&initcwndbps=1680000&mt=1655903589&ack=1&cpn=jcLGzlc6c8LsaaDH&rn=1&opr=1&pvi=160,133,134,135,136,137,298,299,264&pai=139,140https://redirector.googlevideo.com/initplayback?source=youtube&itag=0&pvi=0&pai=0&owc=yes&cmo=rnp%3Drr&id=0000000000002409videoplayback
ctier=L
https://rr2---sn-a5meknsy.googlevideo.com/videoplayback?expire=1657110332&ei=3CrFYrS3B8qlkwbDk6m4Dg&ip=76.170.156.167&id=o-AN990KkuGRjkOtpS0zvkbcCippQdwVTosh4W04OICinJ&source=youtube&requiressl=yes&hcs=ir,&mh=v4&mm=31,26&mn=sn-a5meknsy,sn-q4flrnez&ms=au,onr&mv=m&mvi=2&pl=17&rmhost=rr3---sn-a5meknsy.googlevideo.com,&ctier=L&initcwndbps=2142500&svpuc=1&sabr=1&mt=1657088457&fvip=5&keepalive=yes&fexp=24001373,24007246&c=IOS&sparams=expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr&sig=AOq0QJ8wRQIhAPXZb_XYMsCV_fhO5opM85fJbwUAdMIXGhBCYe3yDHi6AiBAwpSbmd53tjQZadmgq3rLdyX-Nd5447nkXP6NBPXNHQ%3D%3D&lsparams=hcs,mh,mm,mn,ms,mv,mvi,pl,rmhost,initcwndbps&lsig=AG3C_xAwRQIhAP22VWdWbIIxrvp9iCm3NMY8QQ4TS3UrFwJFxyxZH7C2AiAhnv2jgK4Nj0SwXmhuddVSWSRvX8iGYRtWZJsfBG03XQ%3D%3D&cpn=5ofB6P6ORRZhJUE8&rn=7&probe=1
ctier/L
https://r2---sn-q4flrnez.googlevideo.com/videoplayback/expire/1657108318/ei/_iLFYofvH72QsfIPy56rkA0/ip/76.170.156.167/id/o-AIPVOknUnDee3HugNutm3ybodjkv230I_U-FbZP3qt_k/source/youtube/requiressl/yes/mh/sw/mm/31,26/mn/sn-a5meknzs,sn-q4flrnez/ms/au,onr/mv/m/mvi/5/pl/17/ctier/L/initcwndbps/2056250/svpuc/1/sabr/1/mt/1657086303/fvip/2/keepalive/yes/fexp/24001373,24007246/c/IOS/sparams/expire,ei,ip,id,source,requiressl,ctier,svpuc,sabr/sig/AOq0QJ8wRgIhALUv6hCXG_Dq8gwMkYfOxUAcH6KUBSZBcf6CikscQYp1AiEAkcLG_OxZHTcNs4tzkRl09AwqcVwYXQ374k3kyGOPZ-0=/lsparams/mh,mm,mn,ms,mv,mvi,pl,initcwndbps/lsig/AG3C_xAwRAIgH8N-m_KKOvrdVXq7KWBgjV27TWKPn48MQjYw9qWlP1ACIFk-KqOBGsauP4fBIHDVfLC6w78LrlgHmuKzWXwKgVIt/cpn/vTddLlWhp7fI_1Ze/fallback_count/1/?rn=6ad_break
iOS
https://youtubei.googleapis.com/youtubei/v1/player/ad_break?key=AIzaSyB-63vPrdThhKuerbB2N_l7Kwwcxj6yUAcweb
https://www.youtube.com/youtubei/v1/player/ad_break?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8&prettyPrint=false
iOS逆向YouTube的话:
普通的类的逆向,相对不难
估计和欧美对于知识产权保护的比较严,有关系
毕竟针对于防破解做的很弱
有些底层的类,想要搞懂逻辑,不太容易
Cronet的相关调用
-[HAMCronetDataLoadTask startWithDelegate:delegateQueue:]
比如:
以及涉及到protobuf
比如:
只能很艰难的,通过反推MessageLite的vtable定义,再加上底层调试,才或许有机会,找出真正字段的定义(暂未来得及完成)
OnesieRequestProto
等等
普通的类,容易通过GPBMessage找出原始字段定义
但部分关键的类,还是被保护起来了:做成了lite版的protobuf类
原文地址:
https://github.com/crifa
ios教程了解:
可以加作者微信报名进微信学习交流群。
其它学习教程。