fix(YouTube - Client spoof): Removed unused code (#3030)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
This commit is contained in:
committed by
GitHub
co-authored by
oSumAtrIX
parent
8ac18e6e23
commit
1532d899b4
+1
-3
@@ -111,9 +111,7 @@ object VideoInformationPatch : BytecodePatch(
|
||||
/*
|
||||
* Inject call for video id
|
||||
*/
|
||||
val videoIdMethodDescriptor = "$INTEGRATIONS_CLASS_DESCRIPTOR->setVideoId(Ljava/lang/String;)V"
|
||||
VideoIdPatch.injectCall(videoIdMethodDescriptor)
|
||||
VideoIdPatch.injectCallBackgroundPlay(videoIdMethodDescriptor)
|
||||
VideoIdPatch.injectCall("$INTEGRATIONS_CLASS_DESCRIPTOR->setVideoId(Ljava/lang/String;)V")
|
||||
|
||||
/*
|
||||
* Set the video time method
|
||||
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
package app.revanced.patches.youtube.video.playerresponse
|
||||
|
||||
import app.revanced.extensions.exception
|
||||
import app.revanced.patcher.data.BytecodeContext
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.youtube.misc.fix.playback.SpoofSignaturePatch
|
||||
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||
import app.revanced.patches.youtube.video.playerresponse.fingerprint.PlayerParameterBuilderFingerprint
|
||||
import app.revanced.patches.youtube.video.videoid.VideoIdPatch
|
||||
|
||||
@Patch(
|
||||
dependencies = [IntegrationsPatch::class],
|
||||
)
|
||||
object PlayerResponseMethodHookPatch : BytecodePatch(
|
||||
setOf(
|
||||
PlayerParameterBuilderFingerprint,
|
||||
)
|
||||
) {
|
||||
private const val playerResponseVideoIdParameter = 1
|
||||
private const val playerResponseProtoBufferParameter = 3
|
||||
/**
|
||||
* Insert index when adding a video id hook.
|
||||
*/
|
||||
private var playerResponseVideoIdInsertIndex = 0
|
||||
/**
|
||||
* Insert index when adding a proto buffer override.
|
||||
* Must be after all video id hooks in the same method.
|
||||
*/
|
||||
private var playerResponseProtoBufferInsertIndex = 0
|
||||
private lateinit var playerResponseMethod: MutableMethod
|
||||
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
// Hook player parameter.
|
||||
PlayerParameterBuilderFingerprint.result?.let {
|
||||
playerResponseMethod = it.mutableMethod
|
||||
} ?: throw PlayerParameterBuilderFingerprint.exception
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify the player parameter proto buffer value.
|
||||
* Used exclusively by [SpoofSignaturePatch].
|
||||
*/
|
||||
fun injectProtoBufferHook(methodDescriptor: String) {
|
||||
playerResponseMethod.addInstructions(
|
||||
playerResponseProtoBufferInsertIndex,
|
||||
"""
|
||||
invoke-static {p$playerResponseProtoBufferParameter}, $methodDescriptor
|
||||
move-result-object p$playerResponseProtoBufferParameter
|
||||
"""
|
||||
)
|
||||
playerResponseProtoBufferInsertIndex += 2
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by [VideoIdPatch].
|
||||
*/
|
||||
internal fun injectVideoIdHook(methodDescriptor: String) {
|
||||
playerResponseMethod.addInstruction(
|
||||
// Keep injection calls in the order they're added,
|
||||
// and all video id hooks run before proto buffer hooks.
|
||||
playerResponseVideoIdInsertIndex++,
|
||||
"invoke-static {p$playerResponseVideoIdParameter}, $methodDescriptor"
|
||||
)
|
||||
playerResponseProtoBufferInsertIndex++
|
||||
}
|
||||
}
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package app.revanced.patches.youtube.video.playerresponse.fingerprint
|
||||
|
||||
import app.revanced.patcher.extensions.or
|
||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
object PlayerParameterBuilderFingerprint : MethodFingerprint(
|
||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||
returnType = "L",
|
||||
parameters = listOf(
|
||||
"Ljava/lang/String;", // VideoId.
|
||||
"[B",
|
||||
"Ljava/lang/String;", // Player parameters proto buffer.
|
||||
"Ljava/lang/String;",
|
||||
"I",
|
||||
"I",
|
||||
"Ljava/util/Set;",
|
||||
"Ljava/lang/String;",
|
||||
"Ljava/lang/String;",
|
||||
"L",
|
||||
"Z",
|
||||
"Z",
|
||||
"Z"
|
||||
)
|
||||
)
|
||||
@@ -9,16 +9,21 @@ import app.revanced.patcher.patch.BytecodePatch
|
||||
import app.revanced.patcher.patch.annotation.Patch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
|
||||
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
|
||||
import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHookPatch
|
||||
import app.revanced.patches.youtube.video.videoid.fingerprint.VideoIdFingerprint
|
||||
import app.revanced.patches.youtube.video.videoid.fingerprint.VideoIdFingerprintBackgroundPlay
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Patch(
|
||||
description = "Hooks to detect when the video id changes",
|
||||
dependencies = [IntegrationsPatch::class],
|
||||
dependencies = [IntegrationsPatch::class, PlayerResponseMethodHookPatch::class],
|
||||
)
|
||||
object VideoIdPatch : BytecodePatch(
|
||||
setOf(VideoIdFingerprint, VideoIdFingerprintBackgroundPlay)
|
||||
setOf(
|
||||
VideoIdFingerprint,
|
||||
VideoIdFingerprintBackgroundPlay
|
||||
)
|
||||
) {
|
||||
private var videoIdRegister = 0
|
||||
private var insertIndex = 0
|
||||
@@ -29,6 +34,7 @@ object VideoIdPatch : BytecodePatch(
|
||||
private lateinit var backgroundPlaybackMethod: MutableMethod
|
||||
|
||||
override fun execute(context: BytecodeContext) {
|
||||
|
||||
/**
|
||||
* Supplies the method and register index of the video id register.
|
||||
*
|
||||
@@ -45,10 +51,10 @@ object VideoIdPatch : BytecodePatch(
|
||||
}
|
||||
} ?: throw VideoIdFingerprint.exception
|
||||
|
||||
VideoIdFingerprint.setFields { method, insertIndex, videoIdRegister ->
|
||||
VideoIdFingerprint.setFields { method, index, register ->
|
||||
insertMethod = method
|
||||
VideoIdPatch.insertIndex = insertIndex
|
||||
VideoIdPatch.videoIdRegister = videoIdRegister
|
||||
insertIndex = index
|
||||
videoIdRegister = register
|
||||
}
|
||||
|
||||
VideoIdFingerprintBackgroundPlay.setFields { method, insertIndex, videoIdRegister ->
|
||||
@@ -58,42 +64,53 @@ object VideoIdPatch : BytecodePatch(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an invoke-static instruction, called with the new id when the video changes.
|
||||
*
|
||||
* Called as soon as the player response is parsed, and called before many other hooks are
|
||||
* updated such as [PlayerTypeHookPatch].
|
||||
*
|
||||
* Supports all videos and functions in all situations.
|
||||
*
|
||||
* Be aware, this can be called multiple times for the same video id.
|
||||
*
|
||||
* @param methodDescriptor which method to call. Params have to be `Ljava/lang/String;`
|
||||
*/
|
||||
fun injectCall(methodDescriptor: String) = PlayerResponseMethodHookPatch.injectVideoIdHook(methodDescriptor)
|
||||
|
||||
/**
|
||||
* Adds an invoke-static instruction, called with the new id when the video changes.
|
||||
*
|
||||
* Supports all videos (regular videos, Shorts and Stories).
|
||||
*
|
||||
* _Does not function if playing in the background with no video visible_.
|
||||
*
|
||||
* Be aware, this can be called multiple times for the same video id.
|
||||
*
|
||||
* @param methodDescriptor which method to call. Params have to be `Ljava/lang/String;`
|
||||
*/
|
||||
fun injectCall(
|
||||
methodDescriptor: String
|
||||
) = insertMethod.addInstruction(
|
||||
// Keep injection calls in the order they're added:
|
||||
// Increment index. So if additional injection calls are added, those calls run after this injection call.
|
||||
insertIndex++,
|
||||
"invoke-static {v$videoIdRegister}, $methodDescriptor"
|
||||
)
|
||||
/**
|
||||
* Adds an invoke-static instruction, called with the new id when the video changes.
|
||||
*
|
||||
* Supports all videos (regular videos and Shorts).
|
||||
*
|
||||
* _Does not function if playing in the background with no video visible_.
|
||||
*
|
||||
* Be aware, this can be called multiple times for the same video id.
|
||||
*
|
||||
* @param methodDescriptor which method to call. Params have to be `Ljava/lang/String;`
|
||||
*/
|
||||
fun legacyInjectCall(
|
||||
methodDescriptor: String
|
||||
) = insertMethod.addInstruction(
|
||||
insertIndex++,
|
||||
"invoke-static {v$videoIdRegister}, $methodDescriptor"
|
||||
)
|
||||
|
||||
/**
|
||||
* Alternate hook that supports only regular videos, but hook supports changing to new video
|
||||
* during background play when no video is visible.
|
||||
*
|
||||
* _Does not support Shorts or Stories_.
|
||||
*
|
||||
* Be aware, the hook can be called multiple times for the same video id.
|
||||
*
|
||||
* @param methodDescriptor which method to call. Params have to be `Ljava/lang/String;`
|
||||
*/
|
||||
fun injectCallBackgroundPlay(
|
||||
methodDescriptor: String
|
||||
) = backgroundPlaybackMethod.addInstruction(
|
||||
backgroundPlaybackInsertIndex++, // move-result-object offset
|
||||
"invoke-static {v$backgroundPlaybackVideoIdRegister}, $methodDescriptor"
|
||||
)
|
||||
/**
|
||||
* Alternate hook that supports only regular videos, but hook supports changing to new video
|
||||
* during background play when no video is visible.
|
||||
*
|
||||
* _Does not support Shorts_.
|
||||
*
|
||||
* Be aware, the hook can be called multiple times for the same video id.
|
||||
*
|
||||
* @param methodDescriptor which method to call. Params have to be `Ljava/lang/String;`
|
||||
*/
|
||||
fun legacyInjectCallBackgroundPlay(
|
||||
methodDescriptor: String
|
||||
) = backgroundPlaybackMethod.addInstruction(
|
||||
backgroundPlaybackInsertIndex++, // move-result-object offset
|
||||
"invoke-static {v$backgroundPlaybackVideoIdRegister}, $methodDescriptor"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user