mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-06-12 05:07:41 +02:00
feat(YouTube - Spoof streaming data): Add setting to change PoToken / Visitor Data
https://github.com/inotia00/ReVanced_Extended/issues/2630#issuecomment-2566310025
This commit is contained in:
@ -21,6 +21,7 @@ import app.revanced.util.fingerprint.definingClassOrThrow
|
||||
import app.revanced.util.fingerprint.injectLiteralInstructionBooleanCall
|
||||
import app.revanced.util.fingerprint.matchOrThrow
|
||||
import app.revanced.util.fingerprint.methodOrThrow
|
||||
import app.revanced.util.fingerprint.mutableClassOrThrow
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
@ -362,6 +363,24 @@ fun baseSpoofStreamingDataPatch(
|
||||
|
||||
// endregion
|
||||
|
||||
// region Set DroidGuard poToken.
|
||||
|
||||
poTokenToStringFingerprint.mutableClassOrThrow().let {
|
||||
val poTokenClass = it.fields.find { field ->
|
||||
field.accessFlags == AccessFlags.PRIVATE.value && field.type.startsWith("L")
|
||||
}!!.type
|
||||
|
||||
findMethodOrThrow(poTokenClass) {
|
||||
name == "<init>" &&
|
||||
parameters == listOf("[B")
|
||||
}.addInstruction(
|
||||
1,
|
||||
"invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->setDroidGuardPoToken([B)V"
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
findMethodOrThrow("$PATCHES_PATH/PatchStatus;") {
|
||||
name == "SpoofStreamingData"
|
||||
}.replaceInstruction(
|
||||
|
@ -197,3 +197,18 @@ internal val hlsCurrentTimeFingerprint = legacyFingerprint(
|
||||
parameters = listOf("Z", "L"),
|
||||
literals = listOf(HLS_CURRENT_TIME_FEATURE_FLAG),
|
||||
)
|
||||
|
||||
internal val poTokenToStringFingerprint = legacyFingerprint(
|
||||
name = "poTokenToStringFingerprint",
|
||||
returnType = "Ljava/lang/String;",
|
||||
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
||||
parameters = emptyList(),
|
||||
strings = listOf("UTF-8"),
|
||||
customFingerprint = { method, classDef ->
|
||||
method.name == "toString" &&
|
||||
classDef.fields.find { it.type == "[B" } != null &&
|
||||
// In YouTube, this field's type is 'Lcom/google/android/gms/potokens/PoToken;'.
|
||||
// In YouTube Music, this class name is obfuscated.
|
||||
classDef.fields.find { it.accessFlags == AccessFlags.PRIVATE.value && it.type.startsWith("L") } != null
|
||||
},
|
||||
)
|
||||
|
Reference in New Issue
Block a user