feat(YouTube): drop support version v18.41.39, v18.42.41

This commit is contained in:
inotia00 2023-10-31 19:56:10 +09:00
parent 46a4ffe614
commit f4f2d41236
106 changed files with 211 additions and 428 deletions

View File

@ -34,9 +34,7 @@ Example:
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
}
],

View File

@ -43,9 +43,7 @@ import org.w3c.dom.Element
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -28,9 +28,7 @@ import app.revanced.util.integrations.Constants.ADS_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -37,9 +37,7 @@ import app.revanced.util.resources.ResourceUtils.copyXmlNode
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -32,9 +32,7 @@ import app.revanced.util.integrations.Constants.COMPONENTS_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -32,9 +32,7 @@ import app.revanced.util.integrations.Constants.COMPONENTS_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -43,9 +43,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -43,9 +43,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -47,9 +47,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -42,9 +42,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -38,9 +38,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -37,9 +37,7 @@ import app.revanced.util.integrations.Constants.FULLSCREEN
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -49,9 +49,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -36,9 +36,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -34,9 +34,7 @@ import app.revanced.util.integrations.Constants.COMPONENTS_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -44,9 +44,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -43,9 +43,7 @@ import app.revanced.util.integrations.Constants.GENERAL
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -33,9 +33,7 @@ import app.revanced.util.integrations.Constants.GENERAL
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -41,9 +41,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -37,9 +37,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -37,9 +37,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -32,9 +32,7 @@ import app.revanced.util.integrations.Constants.COMPONENTS_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -37,9 +37,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -40,9 +40,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -37,9 +37,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -32,9 +32,7 @@ import app.revanced.util.integrations.Constants.COMPONENTS_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -35,9 +35,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -38,9 +38,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -46,9 +46,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -33,9 +33,7 @@ import app.revanced.util.integrations.Constants.GENERAL
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -50,9 +50,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -44,9 +44,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -32,9 +32,7 @@ import app.revanced.util.integrations.Constants.GENERAL
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -42,9 +42,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -42,9 +42,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -29,9 +29,7 @@ import app.revanced.util.resources.ResourceHelper.updatePatchStatusIcon
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -29,9 +29,7 @@ import app.revanced.util.resources.ResourceHelper.updatePatchStatusIcon
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -29,9 +29,7 @@ import app.revanced.util.resources.ResourceHelper.updatePatchStatusIcon
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -33,9 +33,7 @@ import app.revanced.util.resources.ResourceHelper.updatePatchStatusLabel
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -27,9 +27,7 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -32,9 +32,7 @@ import app.revanced.util.resources.ResourceUtils.copyResources
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -29,9 +29,7 @@ import org.w3c.dom.Element
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -31,9 +31,7 @@ import kotlin.io.path.copyTo
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -36,9 +36,7 @@ import app.revanced.util.resources.ResourceUtils.copyXmlNode
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -35,9 +35,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -29,9 +29,7 @@ import kotlin.io.path.exists
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -35,9 +35,7 @@ import org.w3c.dom.Element
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -34,9 +34,7 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -40,9 +40,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -28,9 +28,7 @@ import app.revanced.util.integrations.Constants.MISC_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -43,9 +43,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -27,9 +27,7 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
],

View File

@ -36,9 +36,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -34,9 +34,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -39,9 +39,7 @@ import com.android.tools.smali.dexlib2.Opcode
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -44,9 +44,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -36,9 +36,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -32,9 +32,7 @@ import app.revanced.util.integrations.Constants.MISC_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -44,9 +44,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]
@ -69,10 +67,7 @@ object NewSplashAnimationPatch : BytecodePatch(
*/
WatchWhileActivityWithInFlagsFingerprint.result?.let {
it.mutableMethod.apply {
var targetIndex = getWide32LiteralIndex(45407550) + 3
if (getInstruction(targetIndex).opcode == Opcode.MOVE_RESULT)
targetIndex += 1
val targetIndex = getWide32LiteralIndex(45407550) + 3
inject(targetIndex)
}
}

View File

@ -32,9 +32,7 @@ import org.w3c.dom.Element
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -33,9 +33,7 @@ import com.android.tools.smali.dexlib2.util.MethodUtil
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -28,9 +28,7 @@ import app.revanced.util.resources.ResourceHelper.addTranslations
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -35,9 +35,7 @@ import app.revanced.util.integrations.Constants.NAVIGATION
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -34,9 +34,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -47,9 +47,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -35,9 +35,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -52,9 +52,7 @@ import org.w3c.dom.Element
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -42,9 +42,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -38,9 +38,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -31,9 +31,7 @@ import app.revanced.util.integrations.Constants.PLAYER
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -32,9 +32,7 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -39,9 +39,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -52,9 +52,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -41,9 +41,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -38,9 +38,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -37,9 +37,7 @@ import app.revanced.util.integrations.Constants.PLAYER
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -35,9 +35,7 @@ import app.revanced.util.integrations.Constants.INTEGRATIONS_PATH
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -41,9 +41,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -31,9 +31,7 @@ import app.revanced.patches.youtube.utils.settings.SettingsPatch
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -46,9 +46,7 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -36,9 +36,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -41,9 +41,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -43,9 +43,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -40,9 +40,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -45,9 +45,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -50,9 +50,7 @@ import org.w3c.dom.Element
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -38,9 +38,7 @@ import app.revanced.util.integrations.Constants.SEEKBAR
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -5,14 +5,18 @@ import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.youtube.seekbar.tapping.fingerprints.SeekbarTappingFingerprint
import app.revanced.patches.youtube.seekbar.tapping.fingerprints.SeekbarTappingReferenceFingerprint
import app.revanced.patches.youtube.utils.settings.SettingsPatch
import app.revanced.util.integrations.Constants.SEEKBAR
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction35c
import com.android.tools.smali.dexlib2.dexbacked.reference.DexBackedMethodReference
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction11n
@Patch(
name = "Enable seekbar tapping",
@ -35,41 +39,65 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]
)
@Suppress("unused")
object SeekbarTappingPatch : BytecodePatch(
setOf(
SeekbarTappingReferenceFingerprint,
SeekbarTappingFingerprint
)
setOf(SeekbarTappingFingerprint)
) {
override fun execute(context: BytecodeContext) {
SeekbarTappingReferenceFingerprint.result?.let {
it.mutableMethod.apply {
TappingLabel = """
invoke-static {}, $SEEKBAR->enableSeekbarTapping()Z
move-result v0
if-eqz v0, :disabled
invoke-virtual { p0, v2 }, ${getInstruction<ReferenceInstruction>(it.scanResult.patternScanResult!!.startIndex).reference}
invoke-virtual { p0, v2 }, ${getInstruction<ReferenceInstruction>(it.scanResult.patternScanResult!!.endIndex - 1).reference}
"""
}
} ?: throw SeekbarTappingReferenceFingerprint.exception
SeekbarTappingFingerprint.result?.let {
it.mutableMethod.apply {
val tapSeekIndex = it.scanResult.patternScanResult!!.startIndex + 1
val tapSeekReference = getInstruction<BuilderInstruction35c>(tapSeekIndex).reference
val tapSeekClass =
context
.findClass(((tapSeekReference) as DexBackedMethodReference).definingClass)!!
.mutableClass
val tapSeekMethods = mutableMapOf<String, MutableMethod>()
for (method in tapSeekClass.methods) {
if (method.implementation == null)
continue
val instructions = method.implementation!!.instructions
// here we make sure we actually find the method because it has more than 7 instructions
if (instructions.count() != 10)
continue
// we know that the 7th instruction has the opcode CONST_4
val instruction = instructions.elementAt(6)
if (instruction.opcode != Opcode.CONST_4)
continue
// the literal for this instruction has to be either 1 or 2
val literal = (instruction as Instruction11n).narrowLiteral
// method founds
if (literal == 1)
tapSeekMethods["P"] = method
else if (literal == 2)
tapSeekMethods["O"] = method
}
val pMethod = tapSeekMethods["P"]
?: throw PatchException("tapSeekMethod not found")
val oMethod = tapSeekMethods["O"]
?: throw PatchException("tapSeekMethod not found")
val insertIndex = it.scanResult.patternScanResult!!.startIndex + 2
addInstructionsWithLabels(
insertIndex,
TappingLabel,
ExternalLabel("disabled", getInstruction(insertIndex))
insertIndex, """
invoke-static {}, $SEEKBAR->enableSeekbarTapping()Z
move-result v0
if-eqz v0, :disabled
invoke-virtual { p0, v2 }, ${oMethod.definingClass}->${oMethod.name}(I)V
invoke-virtual { p0, v2 }, ${pMethod.definingClass}->${pMethod.name}(I)V
""", ExternalLabel("disabled", getInstruction(insertIndex))
)
}
} ?: throw SeekbarTappingFingerprint.exception

View File

@ -1,31 +0,0 @@
package app.revanced.patches.youtube.seekbar.tapping.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
object SeekbarTappingReferenceFingerprint : MethodFingerprint(
returnType = "Z",
accessFlags = AccessFlags.PUBLIC or AccessFlags.PUBLIC,
parameters = listOf("L"),
opcodes = listOf(
Opcode.INVOKE_VIRTUAL, // oMethodReference
Opcode.RETURN,
Opcode.IGET_OBJECT,
Opcode.IGET_BOOLEAN,
Opcode.IF_EQZ,
Opcode.INVOKE_VIRTUAL,
Opcode.RETURN,
Opcode.INT_TO_FLOAT,
Opcode.INT_TO_FLOAT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.IF_NEZ,
Opcode.RETURN,
Opcode.INVOKE_VIRTUAL,
Opcode.INVOKE_VIRTUAL, // pMethodReference
Opcode.RETURN
),
customFingerprint = { methodDef, _ -> methodDef.name == "onTouchEvent" }
)

View File

@ -33,9 +33,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -38,9 +38,7 @@ import app.revanced.util.integrations.Constants.SEEKBAR
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -68,9 +68,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -35,9 +35,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -47,9 +47,7 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -48,9 +48,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -40,9 +40,7 @@ import app.revanced.util.resources.ResourceHelper.setMicroG
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]

View File

@ -18,7 +18,6 @@ import app.revanced.patches.youtube.utils.playerresponse.PlayerResponsePatch
import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.DislikeFingerprint
import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.LikeFingerprint
import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.RemoveLikeFingerprint
import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.SpoofAppVersionPatchFingerprint
import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.TextComponentAtomicReferenceFingerprint
import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.TextComponentAtomicReferenceLegacyFingerprint
import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.TextComponentConstructorFingerprint
@ -45,7 +44,6 @@ import com.android.tools.smali.dexlib2.iface.reference.Reference
ReturnYouTubeDislikeOldLayoutPatch::class,
ReturnYouTubeDislikeShortsPatch::class,
SettingsPatch::class,
SpoofAppVersionPatch::class,
VideoIdPatch::class
],
compatiblePackages = [
@ -65,9 +63,7 @@ import com.android.tools.smali.dexlib2.iface.reference.Reference
"18.37.36",
"18.38.44",
"18.39.41",
"18.40.34",
"18.41.39",
"18.42.41"
"18.40.34"
]
)
]
@ -78,7 +74,6 @@ object ReturnYouTubeDislikePatch : BytecodePatch(
DislikeFingerprint,
LikeFingerprint,
RemoveLikeFingerprint,
SpoofAppVersionPatchFingerprint,
TextComponentConstructorFingerprint
)
) {
@ -196,23 +191,6 @@ object ReturnYouTubeDislikePatch : BytecodePatch(
}
} ?: throw TextComponentConstructorFingerprint.exception
if (SettingsPatch.upward1840) {
SpoofAppVersionPatchFingerprint.result?.let {
it.mutableMethod.apply {
addInstructionsWithLabels(
0, """
sget-object v0, Lapp/revanced/integrations/settings/SettingsEnum;->INITIALIZED:Lapp/revanced/integrations/settings/SettingsEnum;
invoke-virtual {v0}, Lapp/revanced/integrations/settings/SettingsEnum;->getBoolean()Z
move-result v0
if-nez v0, :initialized
const-string v0, "18.39.41"
return-object v0
""", ExternalLabel("initialized", getInstruction(0))
)
}
} ?: throw SpoofAppVersionPatchFingerprint.exception
}
if (SettingsPatch.upward1834) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
PlayerResponsePatch.injectCall("$FILTER_CLASS_DESCRIPTOR->newPlayerResponseVideoId(Ljava/lang/String;Z)V")

View File

@ -1,20 +0,0 @@
package app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints
import app.revanced.patcher.fingerprint.MethodFingerprint
/**
* In YouTube v18.40.34+, |segmented_like_dislike_button.eml| is no longer used by some accounts (a/b tests).
* https://github.com/ReVanced/revanced-patches/issues/2904
*
* I suspect this is due to a new type of SpannableString called 'RollingNumber' in YouTube's internal code.
* No in-depth reverse engineering has been done on this yet.
*
* After installing the app for the first time, the app version is spoofed to v18.39.41 for about 500ms before the restart dialog is shown.
* By doing this we can bypass these a/b tests being applied.
*/
object SpoofAppVersionPatchFingerprint : MethodFingerprint(
customFingerprint = { methodDef, _ ->
methodDef.definingClass == "Lapp/revanced/integrations/patches/misc/SpoofAppVersionPatch;"
&& methodDef.name == "getVersionOverride"
}
)

View File

@ -8,7 +8,9 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.youtube.utils.returnyoutubedislike.shorts.fingerprints.IncognitoFingerprint
import app.revanced.patches.youtube.utils.returnyoutubedislike.shorts.fingerprints.ShortsTextViewFingerprint
@ -31,23 +33,25 @@ object ReturnYouTubeDislikeShortsPatch : BytecodePatch(
override fun execute(context: BytecodeContext) {
ShortsTextViewFingerprint.result?.let {
it.mutableMethod.apply {
val patternResult = it.scanResult.patternScanResult!!
val startIndex = it.scanResult.patternScanResult!!.startIndex
val isDisLikesBooleanIndex = getTargetIndexDownTo(startIndex, Opcode.IGET_BOOLEAN)
val textViewFieldIndex = getTargetIndexDownTo(startIndex, Opcode.IGET_OBJECT)
val isDisLikesBooleanIndex =
implementation!!.instructions.indexOfFirst { instruction ->
instruction.opcode == Opcode.IGET_BOOLEAN
}
// If the field is true, the TextView is for a dislike button.
val isDisLikesBooleanReference =
getInstruction<ReferenceInstruction>(isDisLikesBooleanIndex).reference
val textViewFieldReference = // Like/Dislike button TextView field
getInstruction<ReferenceInstruction>(patternResult.endIndex).reference
getInstruction<ReferenceInstruction>(textViewFieldIndex).reference
// Check if the hooked TextView object is that of the dislike button.
// If RYD is disabled, or the TextView object is not that of the dislike button, the execution flow is not interrupted.
// Otherwise, the TextView object is modified, and the execution flow is interrupted to prevent it from being changed afterward.
val insertIndex = patternResult.startIndex + 6
val insertIndex = implementation!!.instructions.indexOfFirst { instruction ->
instruction.opcode == Opcode.CHECK_CAST
} + 1
addInstructionsWithLabels(
insertIndex, """
# Check, if the TextView is for a dislike button
@ -100,6 +104,19 @@ object ReturnYouTubeDislikeShortsPatch : BytecodePatch(
}
}
private fun MutableMethod.getTargetIndexDownTo(
startIndex: Int,
opcode: Opcode
): Int {
for (index in startIndex downTo 0) {
if (getInstruction(index).opcode != opcode)
continue
return index
}
throw PatchException("Failed to find target method")
}
private const val INTEGRATIONS_RYD_CLASS_DESCRIPTOR =
"$UTILS_PATH/ReturnYouTubeDislikePatch;"
}

View File

@ -7,22 +7,38 @@ object ShortsTextViewFingerprint : MethodFingerprint(
returnType = "V",
parameters = listOf("L", "L"),
opcodes = listOf(
Opcode.INVOKE_SUPER, // first instruction of method
Opcode.IF_NEZ,
Opcode.RETURN_VOID,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.CHECK_CAST,
Opcode.SGET_OBJECT, // insertion point, must be after constructor call to parent class
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.CONST_4,
Opcode.IF_EQZ,
Opcode.CONST_4,
Opcode.IF_EQ,
Opcode.CONST_4,
Opcode.IF_EQ,
Opcode.RETURN_VOID,
Opcode.IGET_OBJECT, // TextView field
)
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT,
Opcode.GOTO,
Opcode.IGET,
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT,
Opcode.IF_NEZ,
Opcode.SGET_OBJECT,
Opcode.SGET_OBJECT,
Opcode.IF_NE,
Opcode.IGET,
Opcode.AND_INT_LIT8,
Opcode.IF_EQZ,
Opcode.IGET_OBJECT,
Opcode.IF_NEZ,
Opcode.SGET_OBJECT,
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT,
Opcode.GOTO,
Opcode.IGET,
Opcode.AND_INT_LIT8,
Opcode.IF_EQZ,
Opcode.IGET_OBJECT,
Opcode.IF_NEZ,
Opcode.SGET_OBJECT,
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.RETURN_VOID
),
customFingerprint = custom@{ _, classDef ->
classDef.methods.count() == 3
}
)

Some files were not shown because too many files have changed in this diff Show More