Skip to content

Instantly share code, notes, and snippets.

@yhnu
Created December 11, 2019 08:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yhnu/9bb064b90b80675628c42c2bd352b850 to your computer and use it in GitHub Desktop.
Save yhnu/9bb064b90b80675628c42c2bd352b850 to your computer and use it in GitHub Desktop.
[YouTubeHook]
/* 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