Created
December 11, 2019 08:33
-
-
Save yhnu/9bb064b90b80675628c42c2bd352b850 to your computer and use it in GitHub Desktop.
[YouTubeHook]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* How to Hook with Logos | |
Hooks are written with syntax similar to that of an Objective-C @implementation. | |
You don't need to #include <substrate.h>, it will be done automatically, as will | |
the generation of a class list and an automatic constructor. | |
%hook ClassName | |
// Hooking a class method | |
+ (id)sharedInstance { | |
return %orig; | |
} | |
// Hooking an instance method with an argument. | |
- (void)messageName:(int)argument { | |
%log; // Write a message about this call, including its class, name and arguments, to the system log. | |
%orig; // Call through to the original function with its original arguments. | |
%orig(nil); // Call through to the original function with a custom argument. | |
// If you use %orig(), you MUST supply all arguments (except for self and _cmd, the automatically generated ones.) | |
} | |
// Hooking an instance method with no arguments. | |
- (id)noArguments { | |
%log; | |
id awesome = %orig; | |
[awesome doSomethingElse]; | |
return awesome; | |
} | |
// Always make sure you clean up after yourself; Not doing so could have grave consequences! | |
%end | |
*/ | |
%ctor { | |
NSLog(@"[YLYHOOK] Initialized"); | |
} | |
%hook YTIPlayerResponse | |
- (bool)isPlayableInBackground { | |
NSLog (@"[YLYHOOK]%s:%d %s ", __FILE__, __LINE__, __FUNCTION__); | |
return 1; | |
} | |
- (bool)isMonetized { | |
NSLog (@"[YLYHOOK]%s:%d %s ", __FILE__, __LINE__, __FUNCTION__); | |
return 0; | |
} | |
%end | |
%hook YTSingleVideoMediaData | |
- (bool)isPlayableInBackground { | |
NSLog (@"[YLYHOOK]%s:%d %s ", __FILE__, __LINE__, __FUNCTION__); | |
return 1; | |
} | |
%end | |
%hook YTPlaybackData | |
- (bool)isPlayableInBackground { | |
NSLog (@"[YLYHOOK]%s:%d %s ", __FILE__, __LINE__, __FUNCTION__); | |
return 1; | |
} | |
%end | |
%hook YTSingleVideoController | |
- (bool)isCurrentlyBackgroundable { | |
NSLog (@"[YLYHOOK]%s:%d %s ", __FILE__, __LINE__, __FUNCTION__); | |
return 1; | |
} | |
%end | |
%hook YTLocalPlaybackController | |
- (bool)isPlaybackBackgroundable { | |
NSLog (@"[YLYHOOK]%s:%d %s ", __FILE__, __LINE__, __FUNCTION__); | |
return 1; | |
} | |
%end | |
%hook YTInstreamAdsPlaybackCoordinator | |
- (BOOL)detectAirplayAdSkipWithCurrentMediaTime:(double)arg1 isExternalPlaybackActive:(BOOL)arg2 { | |
return %orig(arg1, false); | |
} | |
- (void)willPlayAd { | |
NSLog(@"YTInstreamAdsPlaybackCoordinator willPlayAd"); | |
} | |
- (void)prepareAdInterrupt:(id)arg1 { | |
NSLog(@"YTInstreamAdsPlaybackController prepareAdInterrupt: %@", arg1); | |
%orig(arg1); | |
} | |
- (BOOL)isCurrentAdBreakPreroll { | |
BOOL ret = %orig; | |
NSLog(@"YTInstreamAdsPlaybackController isCurrentAdBreakPreroll: %@", ret ? @"true" : @"false"); | |
return ret; | |
} | |
%end | |
%hook YTLocalPlaybackController | |
//from https://github.com/Rov3r/rov3r.github.io/blob/ef39725d34e6481534ba3d3abf50defcb9ea8b95/projects/YTWatchPlus/Tweak.xm | |
- (bool)isPlaybackBackgroundable { | |
NSLog (@"[YLYHOOK]%s:%d %s ", __FILE__, __LINE__, __FUNCTION__); | |
return 1; | |
} | |
// | |
- (BOOL)detectAirplayAdSkipWithCurrentMediaTime:(double)arg1 { | |
return %orig(arg1); | |
} | |
- (BOOL)isAppInBackground { | |
NSLog(@"YTLocalPlaybackController isAppInBackground"); | |
return false; | |
} | |
- (void)prepareToPlayAdVideo { | |
NSLog(@"YTLocalPlaybackController prepareToPlayAdVideo"); | |
%orig; | |
} | |
- (void)playAdInterrupt:(id)arg1 { | |
NSLog(@"YTLocalPlaybackController playAdInterrupt: %@", arg1); | |
%orig(arg1); | |
} | |
- (void)loadAdThenMainVideo { | |
NSLog(@"YTLocalPlaybackController loadAdThenMainVideo"); | |
%orig; | |
} | |
- (void)loadAdIntro { | |
NSLog(@"YTLocalPlaybackController loadAdIntro"); | |
} | |
- (void)didFinishWithAd:(id)arg1 hideCompanionAd:(BOOL)arg2 { | |
NSLog(@"YTLocalPlaybackController didFinishWithAd"); | |
%orig(arg1, true); | |
} | |
%end | |
%hook DefaultMDXDeviceConnectivityInfoProvider | |
- (BOOL)isCurrentUserRedSubscriber { | |
NSLog(@"DefaultMDXDeviceConnectivityInfoProvider isCurrentUserRedSubscriber"); | |
return true; | |
} | |
%end | |
%hook YTVideoAdsCoordinatorState | |
- (BOOL)prerollSeen { | |
NSLog(@"YTVideoAdsCoordinatorState preRollSeen"); | |
return true; | |
} | |
%end | |
%hook MDXPlaybackController | |
- (BOOL)isCurrentAdBreakPreroll { | |
NSLog(@"MDXPlaybackController isCurrentAdBreakPreroll"); | |
return false; | |
} | |
%end | |
%hook YTVideoAdsOverlayCoordinator | |
- (BOOL)isCurrentAdBreakPreroll { | |
NSLog(@"YTVideoAdsOverlayCoordinator isCurrentAdBreakPreroll"); | |
return false; | |
} | |
%end | |
%hook YTVMAPAdBreak | |
- (BOOL)isPreroll { | |
NSLog(@"YTVMAPAdBreak isPreroll"); | |
return false; | |
} | |
%end | |
%hook YTBaseInstreamAdBreak | |
- (BOOL)isPreroll { | |
NSLog(@"YTBaseInstreamAdBreak isPreroll"); | |
return false; | |
} | |
%end | |
%hook YTAdBreakRendererAdapter | |
- (BOOL)isPreroll { | |
NSLog(@"YTAdBreakRendererAdapter isPreroll"); | |
return false; | |
} | |
%end | |
%hook YTPromotedVideoCellController | |
- (BOOL)shouldShowPromotedItems { | |
NSLog(@"YTPromotedVideoCellController shouldShowPromotedItems"); | |
return false; | |
} | |
%end | |
%hook YTVideoAdsController | |
+ (BOOL)isAdSenseAdTag:(id)arg1 { | |
NSLog(@"YTVideoAdsController isAdSenseAdTag: %@", arg1); | |
return false; | |
} | |
%end | |
%hook YTVASTAd | |
- (BOOL)isForecastingAd { | |
NSLog(@"YTVASTAd isForecastingAd"); | |
return false; | |
} | |
%end | |
%hook YTPlayerViewController | |
- (BOOL)isPlayingAd { | |
NSLog(@"YTPlayerViewController isPlayingAd"); | |
return false; | |
} | |
%end | |
%hook YTIPlayerResponse | |
- (BOOL)isMonetized { | |
NSLog(@"YTIPlayerResponse isMonetized"); | |
return false; | |
} | |
%end | |
%hook YTPlaybackData | |
- (BOOL)isPlayableInBackground { | |
NSLog(@"YTPlaybackData isPlayableInBackground"); | |
return true; | |
} | |
%end | |
%hook YTFeaturedWatermarkView | |
- (void)updateWatermarkSizeWithHeight:(unsigned long long)arg1 { | |
NSLog(@"YTFeaturedWatermarkView updateWatermarkSizeWithHeight"); | |
%orig(0); | |
} | |
%end | |
%hook YTSettings | |
- (void)setAdultContentConfirmed:(BOOL)arg1 { | |
NSLog(@"YTSettings setAdultContentConfirmed"); | |
%orig(false); | |
} | |
- (void)setControversialContentConfirmed:(BOOL)arg1 { | |
NSLog(@"YTSettings setControversialContentConfirmed"); | |
%orig(false); | |
} | |
- (BOOL)isAdultContentConfirmed { | |
NSLog(@"YTSettings isAdultContentConfirmed"); | |
return false; | |
} | |
- (BOOL)isControversialContentConfirmed { | |
NSLog(@"YTSettings isControversialContentConfirmed"); | |
return false; | |
} | |
- (BOOL)isFullVersionEnabled { | |
NSLog(@"YTSettings isFullVersionEnabled"); | |
return true; | |
} | |
- (BOOL)enableSSOSFSafari { | |
NSLog(@"YTSettings enableSSOSFSafari"); | |
return true; | |
} | |
%end | |
%hook YTVideo | |
- (BOOL)isAdultContent { | |
NSLog(@"YTVideo isAdultContent"); | |
return false; | |
} | |
- (BOOL)isPrivateContent { | |
NSLog(@"YTVideo isPrivateContent"); | |
return false; | |
} | |
- (BOOL)isPaidContent { | |
NSLog(@"YTVideo isPaidContent"); | |
return false; | |
} | |
%end | |
%hook YTDataUtils | |
+ (BOOL)isAdvertisingTrackingEnabled { | |
NSLog(@"YTDataUtils isAdvertisingTrackingEnabled"); | |
return false; | |
} | |
%end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment