לחסימת תמונות:
בנתיב: com/metrolist/innertube/models/Thumbnail
להוסיף בתוך:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
.registers 7
.line 1
and-int/lit8 v0, p1, 0x7
.line 3
const/4 v1, 0x7
.line 4
if-ne v1, v0, :cond_f
.line 6
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 9
iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String;
.line 11
iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer;
.line 13
iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer;
.line 15
return-void
.line 16
:cond_f
sget-object p2, Lo9/d0;->a:Lo9/d0;
.line 18
invoke-virtual {p2}, Lo9/d0;->d()Lwe/g;
.line 21
move-result-object p2
.line 22
invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V
.line 25
const/4 p1, 0x0
.line 26
throw p1
.end method
את השורה הזו:
.method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
.registers 7
.line 1
and-int/lit8 v0, p1, 0x7
.line 3
const/4 v1, 0x7
.line 4
if-ne v1, v0, :cond_f
.line 6
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const-string p2, "" #:להוסיף את זה
.line 9
iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String;
.line 11
iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer;
.line 13
iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer;
.line 15
return-void
.line 16
:cond_f
sget-object p2, Lo9/d0;->a:Lo9/d0;
.line 18
invoke-virtual {p2}, Lo9/d0;->d()Lwe/g;
.line 21
move-result-object p2
.line 22
invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V
.line 25
const/4 p1, 0x0
.line 26
throw p1
.end method
לעריכת הWebview של הכניסה:
לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
const-string p1, "https://music.youtube.com"
.class public final Lla/g2;
.super Landroid/webkit/WebViewClient;
.source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e"
# instance fields
.field public final synthetic a:Landroid/webkit/WebView;
.field public final synthetic b:Lge/x;
.field public final synthetic c:Ly0/w0;
.field public final synthetic d:Ly0/w0;
.field public final synthetic e:Ly0/w0;
.field public final synthetic f:Ly0/w0;
# direct methods
.method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V
.registers 7
.line 1
iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView;
.line 3
iput-object p2, p0, Lla/g2;->b:Lge/x;
.line 5
iput-object p3, p0, Lla/g2;->c:Ly0/w0;
.line 7
iput-object p4, p0, Lla/g2;->d:Ly0/w0;
.line 9
iput-object p5, p0, Lla/g2;->e:Ly0/w0;
.line 11
iput-object p6, p0, Lla/g2;->f:Ly0/w0;
.line 13
invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V
.line 16
return-void
.end method
# virtual methods
.method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V
.registers 9
.line 1
const-string v0, "view"
.line 3
invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V
.line 6
const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)"
.line 8
iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView;
.line 10
invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
.line 13
const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)"
.line 15
invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
.line 18
if-eqz p2, :cond_42
.line 20
const-string p1, "https://music.youtube.com"
.line 22
const/4 v0, 0x0
.line 23
invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z
.line 26
move-result p1
.line 27
const/4 v0, 0x1
.line 28
if-ne p1, v0, :cond_42
.line 30
invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager;
.line 33
move-result-object p1
.line 34
invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String;
.line 37
move-result-object p1
.line 38
const-string p2, "getCookie(...)"
.line 40
invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V
.line 43
iget-object p2, p0, Lla/g2;->c:Ly0/w0;
.line 45
invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V
.line 48
new-instance v0, Lla/v1;
.line 50
iget-object v3, p0, Lla/g2;->f:Ly0/w0;
.line 52
const/4 v5, 0x1
.line 53
iget-object v1, p0, Lla/g2;->d:Ly0/w0;
.line 55
iget-object v2, p0, Lla/g2;->e:Ly0/w0;
.line 57
const/4 v4, 0x0
.line 58
invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V
.line 61
const/4 p1, 0x3
.line 62
iget-object p2, p0, Lla/g2;->b:Lge/x;
.line 64
invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1;
.line 67
:cond_42
return-void
.end method
השינויים:
.class public final Lla/g2;
.super Landroid/webkit/WebViewClient;
.source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e"
# instance fields
.field public final synthetic a:Landroid/webkit/WebView;
.field public final synthetic b:Lge/x;
.field public final synthetic c:Ly0/w0;
.field public final synthetic d:Ly0/w0;
.field public final synthetic e:Ly0/w0;
.field public final synthetic f:Ly0/w0;
# direct methods
.method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V
.registers 9 # לשנות ל9
# להוסיף לפני שורה 1
invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V
# עד כאן
.line 1
iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView;
.line 3
iput-object p2, p0, Lla/g2;->b:Lge/x;
.line 5
iput-object p3, p0, Lla/g2;->c:Ly0/w0;
.line 7
iput-object p4, p0, Lla/g2;->d:Ly0/w0;
.line 9
iput-object p5, p0, Lla/g2;->e:Ly0/w0;
.line 11
iput-object p6, p0, Lla/g2;->f:Ly0/w0;
.line 13 # להחליף את השורה שהיתה מתחת לשורה 13
# מכאן
invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings;
move-result-object v0
const/4 v1, 0x0
invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V
# עד כאן
.line 16
return-void
.end method
# virtual methods
.method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V
.registers 9
.line 1
const-string v0, "view"
.line 3
invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V
# (!javascriptשימו לב לשורה שאחרי ה) להוסיף את זה
const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector('footer');if(footer)footer.remove();const langSelector=document.querySelector('[jscontroller=\"xiZRqc\"]');if(langSelector)langSelector.remove();const guestModeDiv=document.querySelector('.RDsYTb');if(guestModeDiv)guestModeDiv.remove();document.querySelectorAll('ytmusic-player-page, ytmusic-player-bar[slot=\"player-bar\"], #mini-guide, #guide, ytmusic-nav-bar .left-content, ytmusic-nav-bar .center-content').forEach(element=>{element.style.setProperty('display','none','important')});const navBarRight=document.querySelector('ytmusic-nav-bar .right-content');if(navBarRight){navBarRight.style.setProperty('margin-left','auto','important')}const popup=document.querySelector('tp-yt-iron-dropdown');if(popup&&popup.style.display!=='none'){const header=popup.querySelector('ytd-active-account-header-renderer');if(header)header.style.setProperty('display','none','important');popup.querySelectorAll('yt-multi-page-menu-section-renderer').forEach(section=>{if(!section.querySelector('a[href=\"/logout\"]')){section.style.setProperty('display','none','important')}else{section.querySelectorAll('ytd-compact-link-renderer').forEach(item=>{if(!item.contains(section.querySelector('a[href=\"/logout\"]'))){item.style.setProperty('display','none','important')}})}})}const immersiveBackground=document.querySelector('#background.immersive-background');if(immersiveBackground){immersiveBackground.style.setProperty('display','none','important')}const chipContainer=document.querySelector('ytmusic-chip-cloud-renderer');if(chipContainer){chipContainer.style.setProperty('display','none','important')}const allShelves=document.querySelectorAll('ytmusic-carousel-shelf-renderer');allShelves.forEach((shelf,index)=>{if(index===0){const carousel=shelf.querySelector('#ytmusic-carousel');if(carousel)carousel.style.setProperty('display','none','important');const header=shelf.querySelector('ytmusic-carousel-shelf-basic-header-renderer');if(header){const strapline=header.querySelector('.strapline');if(strapline)strapline.style.setProperty('display','none','important');const buttonGroup=header.querySelector('#button-group');if(buttonGroup)buttonGroup.style.setProperty('display','none','important')}const navButtons=shelf.querySelector('.button-group.style-scope.ytmusic-carousel-shelf-renderer');if(navButtons)navButtons.style.setProperty('display','none','important')}else{shelf.style.setProperty('display','none','important')}});const tastebuilder=document.querySelector('ytmusic-tastebuilder-shelf-renderer');if(tastebuilder){tastebuilder.style.setProperty('display','none','important')}const titleElement=document.querySelector('ytmusic-carousel-shelf-renderer yt-formatted-string.title');if(titleElement){const newText='אם זאת פעם ראשונה שאתם נכנסים, אתם יכולים לחזור כעת לאפליקציה (מומלץ לסגור לגמרי את האפליקציה ולפתוח מחדש, כדי שהיא תקלוט שנכנסתם), אם כבר הייתם מחוברים ואתם רוצים להחליף חשבון, צאו מהחשבון (לחיצה על העיגול) והתחילו מחדש את התהליך.';if(titleElement.textContent!==newText){titleElement.textContent=newText;titleElement.style.setProperty('direction','rtl','important');titleElement.style.setProperty('white-space','normal','important');titleElement.style.setProperty('text-overflow','clip','important');titleElement.style.setProperty('overflow','visible','important');titleElement.style.setProperty('height','auto','important');titleElement.style.setProperty('font-size','16px','important');titleElement.style.setProperty('font-weight','normal','important');titleElement.style.setProperty('line-height','1.5','important');titleElement.style.setProperty('color','white','important')}}}cleanPage();const observer=new MutationObserver(()=>{cleanPage()});observer.observe(document.body,{childList:true,subtree:true})})();"
# עם הנתיב הנכון la/g2 שימו לב שכאן צריך להחליף את
# (שבעוד כמה שורות .line 8 כמו נגיד אחרי) אפשר למצוא דוגמאות ברחבי הקוד
iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView;
invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
# עד כאן
.line 6
const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)"
.line 8
iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView;
.line 10
invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
.line 13
const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)"
.line 15
invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
.line 18
if-eqz p2, :cond_42
.line 20
const-string p1, "https://music.youtube.com"
.line 22
const/4 v0, 0x0
.line 23
invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z
.line 26
move-result p1
.line 27
const/4 v0, 0x1
.line 28
if-ne p1, v0, :cond_42
.line 30
invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager;
.line 33
move-result-object p1
.line 34
invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String;
.line 37
move-result-object p1
.line 38
const-string p2, "getCookie(...)"
.line 40
invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V
.line 43
iget-object p2, p0, Lla/g2;->c:Ly0/w0;
.line 45
invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V
.line 48
new-instance v0, Lla/v1;
.line 50
iget-object v3, p0, Lla/g2;->f:Ly0/w0;
.line 52
const/4 v5, 0x1
.line 53
iget-object v1, p0, Lla/g2;->d:Ly0/w0;
.line 55
iget-object v2, p0, Lla/g2;->e:Ly0/w0;
.line 57
const/4 v4, 0x0
.line 58
invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V
.line 61
const/4 p1, 0x3
.line 62
iget-object p2, p0, Lla/g2;->b:Lge/x;
.line 64
invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1;
.line 67
:cond_42
return-void
.end method