feat: Update to patcher v22
This commit is contained in:
parent
c4a720fbd3
commit
724e6d61b2
420 changed files with 4247 additions and 4429 deletions
|
|
@ -1,19 +0,0 @@
|
|||
package app.revanced.patches.all.misc.directory
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.all.misc.directory.documentsprovider.exportInternalDataDocumentsProviderPatch
|
||||
|
||||
@Suppress("unused")
|
||||
@Deprecated(
|
||||
"Superseded by internalDataDocumentsProviderPatch",
|
||||
ReplaceWith("internalDataDocumentsProviderPatch"),
|
||||
)
|
||||
val changeDataDirectoryLocationPatch = bytecodePatch(
|
||||
// name = "Change data directory location",
|
||||
description = "Changes the data directory in the application from " +
|
||||
"the app internal storage directory to /sdcard/android/data accessible by root-less devices." +
|
||||
"Using this patch can cause unexpected issues with some apps.",
|
||||
use = false,
|
||||
) {
|
||||
dependsOn(exportInternalDataDocumentsProviderPatch)
|
||||
}
|
||||
|
|
@ -36,7 +36,7 @@ fun <T> transformInstructionsPatch(
|
|||
}
|
||||
}.forEach { (classDef, methods) ->
|
||||
// And finally transform the methods...
|
||||
val mutableClass = proxy(classDef).mutableClass
|
||||
val mutableClass = mutableClassBy(classDef)
|
||||
|
||||
methods.map(mutableClass::findMutableMethodOf).forEach methods@{ mutableMethod ->
|
||||
val patchIndices = findPatchIndices(mutableClass, mutableMethod)?.toCollection(ArrayDeque())
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.amazon
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val deepLinkingFingerprint = fingerprint {
|
||||
internal val deepLinkingFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE)
|
||||
returns("Z")
|
||||
parameters("L")
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
|
|||
|
||||
// This fingerprint targets a method that returns the daily measurement count.
|
||||
// This method is used to determine if the user has reached the daily limit of measurements.
|
||||
internal val getDailyMeasurementCountFingerprint = fingerprint {
|
||||
internal val getDailyMeasurementCountFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE)
|
||||
returns("I")
|
||||
strings("dailyMeasurementCount")
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
package app.revanced.patches.backdrops.misc.pro
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
@Deprecated("Fingerprint no longer resolves and will soon be deleted.")
|
||||
internal val proUnlockFingerprint = fingerprint {
|
||||
opcodes(
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.INVOKE_INTERFACE,
|
||||
Opcode.MOVE_RESULT,
|
||||
Opcode.IF_EQZ,
|
||||
)
|
||||
custom { method, _ ->
|
||||
method.name == "lambda\$existPurchase\$0" &&
|
||||
method.definingClass == "Lcom/backdrops/wallpapers/data/local/DatabaseHandlerIAB;"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
package app.revanced.patches.backdrops.misc.pro
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Suppress("unused")
|
||||
@Deprecated("This patch no longer works and will soon be deleted.")
|
||||
val proUnlockPatch = bytecodePatch{
|
||||
compatibleWith("com.backdrops.wallpapers")
|
||||
|
||||
execute {
|
||||
val registerIndex = proUnlockFingerprint.patternMatch!!.endIndex - 1
|
||||
|
||||
proUnlockFingerprint.method.apply {
|
||||
val register = getInstruction<OneRegisterInstruction>(registerIndex).registerA
|
||||
addInstruction(
|
||||
proUnlockFingerprint.patternMatch!!.endIndex,
|
||||
"const/4 v$register, 0x1",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,6 @@ package app.revanced.patches.bandcamp.limitations
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val handlePlaybackLimitsFingerprint = fingerprint {
|
||||
internal val handlePlaybackLimitsFingerprint by fingerprint {
|
||||
strings("track_id", "play_count")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.cieid.restrictions.root
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val checkRootFingerprint = fingerprint {
|
||||
internal val checkRootFingerprint by fingerprint {
|
||||
custom { method, _ ->
|
||||
method.name == "onResume" && method.definingClass == "Lit/ipzs/cieid/BaseActivity;"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@ package app.revanced.patches.cricbuzz.ads
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val userStateSwitchFingerprint = fingerprint {
|
||||
internal val userStateSwitchFingerprint by fingerprint {
|
||||
opcodes(Opcode.SPARSE_SWITCH)
|
||||
strings("key.user.state", "NA")
|
||||
}
|
||||
|
||||
internal val cb11ConstructorFingerprint = fingerprint {
|
||||
internal val cb11ConstructorFingerprint by fingerprint {
|
||||
parameters(
|
||||
"Ljava/lang/String;",
|
||||
"Ljava/lang/String;",
|
||||
|
|
@ -26,7 +26,7 @@ internal val cb11ConstructorFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val getBottomBarFingerprint = fingerprint {
|
||||
internal val getBottomBarFingerprint by fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "getBottomBar" && classDef.endsWith("HomeMenu;")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@ package app.revanced.patches.crunchyroll.ads
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val videoUrlReadyToStringFingerprint = fingerprint {
|
||||
internal val videoUrlReadyToStringFingerprint by fingerprint {
|
||||
strings("VideoUrlReady(url=", ", enableAds=")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,16 +19,16 @@ val disableAdsPatch = bytecodePatch(
|
|||
// SharedPreferences has a debug boolean value with key "disable_ads", which maps to "DebugCategory.DISABLE_ADS".
|
||||
//
|
||||
// MonetizationDebugSettings seems to be the most general setting to work fine.
|
||||
initializeMonetizationDebugSettingsFingerprint
|
||||
.match(monetizationDebugSettingsToStringFingerprint.classDef)
|
||||
.method.apply {
|
||||
val insertIndex = initializeMonetizationDebugSettingsFingerprint.patternMatch!!.startIndex
|
||||
val register = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
|
||||
initializeMonetizationDebugSettingsFingerprint.match(
|
||||
monetizationDebugSettingsToStringFingerprint.classDef
|
||||
).method.apply {
|
||||
val insertIndex = initializeMonetizationDebugSettingsFingerprint.instructionMatches.first().index
|
||||
val register = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
insertIndex,
|
||||
"const/4 v$register, 0x1",
|
||||
)
|
||||
}
|
||||
addInstructions(
|
||||
insertIndex,
|
||||
"const/4 v$register, 0x1",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,14 +4,14 @@ import app.revanced.patcher.fingerprint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val initializeMonetizationDebugSettingsFingerprint = fingerprint {
|
||||
internal val initializeMonetizationDebugSettingsFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
returns("V")
|
||||
// Parameters have not been reliable for fingerprinting between versions.
|
||||
opcodes(Opcode.IPUT_BOOLEAN)
|
||||
}
|
||||
|
||||
internal val monetizationDebugSettingsToStringFingerprint = fingerprint {
|
||||
internal val monetizationDebugSettingsToStringFingerprint by fingerprint {
|
||||
strings("MonetizationDebugSettings(") // Partial string match.
|
||||
custom { method, _ -> method.name == "toString" }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ val enableDebugMenuPatch = bytecodePatch(
|
|||
|
||||
execute {
|
||||
initializeBuildConfigProviderFingerprint.method.apply {
|
||||
val insertIndex = initializeBuildConfigProviderFingerprint.patternMatch!!.startIndex
|
||||
val insertIndex = initializeBuildConfigProviderFingerprint.instructionMatches.first().index
|
||||
val register = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
|
|
|
|||
|
|
@ -11,9 +11,8 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
* - `isDebug`: compares "release" with "debug" <-- we want to force this to `true`
|
||||
*/
|
||||
|
||||
internal val initializeBuildConfigProviderFingerprint = fingerprint {
|
||||
internal val initializeBuildConfigProviderFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
returns("V")
|
||||
opcodes(Opcode.IPUT_BOOLEAN)
|
||||
strings("debug", "release", "china")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val baseModelMapperFingerprint = fingerprint {
|
||||
internal val baseModelMapperFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Lcom/facebook/graphql/modelutil/BaseModelWithTree;")
|
||||
parameters("Ljava/lang/Class", "I", "I")
|
||||
|
|
@ -17,7 +17,7 @@ internal val baseModelMapperFingerprint = fingerprint {
|
|||
)
|
||||
}
|
||||
|
||||
internal val getSponsoredDataModelTemplateFingerprint = fingerprint {
|
||||
internal val getSponsoredDataModelTemplateFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("L")
|
||||
parameters()
|
||||
|
|
@ -33,7 +33,7 @@ internal val getSponsoredDataModelTemplateFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val getStoryVisibilityFingerprint = fingerprint {
|
||||
internal val getStoryVisibilityFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("Ljava/lang/String;")
|
||||
opcodes(
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ val hideSponsoredStoriesPatch = bytecodePatch(
|
|||
// Check if the parameter type is GraphQLStory and if sponsoredDataModelGetter returns a non-null value.
|
||||
// If so, hide the story by setting the visibility to StoryVisibility.GONE.
|
||||
getStoryVisibilityFingerprint.method.addInstructionsWithLabels(
|
||||
getStoryVisibilityFingerprint.patternMatch!!.startIndex,
|
||||
getStoryVisibilityFingerprint.instructionMatches.first().index,
|
||||
"""
|
||||
instance-of v0, p0, $graphQlStoryClassDescriptor
|
||||
if-eqz v0, :resume_normal
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@ package app.revanced.patches.facebook.ads.story
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.iface.value.StringEncodedValue
|
||||
|
||||
internal val adsInsertionFingerprint = fieldFingerprint(
|
||||
internal val adsInsertionFingerprint by fieldFingerprint(
|
||||
fieldValue = "AdBucketDataSourceUtil\$attemptAdsInsertion\$1",
|
||||
)
|
||||
|
||||
internal val fetchMoreAdsFingerprint = fieldFingerprint(
|
||||
internal val fetchMoreAdsFingerprint by fieldFingerprint(
|
||||
fieldValue = "AdBucketDataSourceUtil\$attemptFetchMoreAds\$1",
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
|
|||
import app.revanced.patcher.fingerprint
|
||||
|
||||
// Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.AttestationHelper#isBootStateOk (3.0.1)
|
||||
internal val bootStateFingerprint = fingerprint {
|
||||
internal val bootStateFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
opcodes(
|
||||
|
|
@ -30,7 +30,7 @@ internal val bootStateFingerprint = fingerprint {
|
|||
}
|
||||
|
||||
// Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.AttestationHelper#createKey (3.0.1)
|
||||
internal val createKeyFingerprint = fingerprint {
|
||||
internal val createKeyFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
strings("attestation", "SHA-256", "random", "EC", "AndroidKeyStore")
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
|
|||
import app.revanced.patcher.fingerprint
|
||||
|
||||
// Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.RootDetection#isRooted (3.0.1)
|
||||
internal val rootDetectionFingerprint = fingerprint {
|
||||
internal val rootDetectionFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("L")
|
||||
parameters("L")
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ val enableCustomTabsPatch = bytecodePatch(
|
|||
|
||||
execute {
|
||||
launchCustomTabFingerprint.method.apply {
|
||||
val checkIndex = launchCustomTabFingerprint.patternMatch!!.endIndex + 1
|
||||
val checkIndex = launchCustomTabFingerprint.instructionMatches.last().index + 1
|
||||
val register = getInstruction<OneRegisterInstruction>(checkIndex).registerA
|
||||
|
||||
replaceInstruction(checkIndex, "const/4 v$register, 0x1")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val launchCustomTabFingerprint = fingerprint {
|
||||
internal val launchCustomTabFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
opcodes(
|
||||
Opcode.IPUT_OBJECT,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.googlenews.misc.gms
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val magazinesActivityOnCreateFingerprint = fingerprint {
|
||||
internal val magazinesActivityOnCreateFingerprint by fingerprint {
|
||||
custom { methodDef, classDef ->
|
||||
methodDef.name == "onCreate" && classDef.endsWith("/StartActivity;")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.googlephotos.misc.backup
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val isDCIMFolderBackupControlDisabled = fingerprint {
|
||||
internal val isDCIMFolderBackupControlDisabled by fingerprint {
|
||||
returns("Z")
|
||||
strings("/dcim", "/mars_files/")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@ package app.revanced.patches.googlephotos.misc.features
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val initializeFeaturesEnumFingerprint = fingerprint {
|
||||
internal val initializeFeaturesEnumFingerprint by fingerprint {
|
||||
strings("com.google.android.apps.photos.NEXUS_PRELOAD")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.googlephotos.misc.gms
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val homeActivityOnCreateFingerprint = fingerprint {
|
||||
internal val homeActivityOnCreateFingerprint by fingerprint {
|
||||
custom { methodDef, classDef ->
|
||||
methodDef.name == "onCreate" && classDef.endsWith("/HomeActivity;")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
package app.revanced.patches.googlephotos.misc.preferences
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val backupPreferencesFingerprint = fingerprint {
|
||||
returns("Lcom/google/android/apps/photos/backup/data/BackupPreferences;")
|
||||
strings("backup_prefs_had_backup_only_when_charging_enabled")
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
package app.revanced.patches.googlephotos.misc.preferences
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
@Deprecated("This patch no longer works and this code will soon be deleted")
|
||||
@Suppress("unused")
|
||||
val restoreHiddenBackUpWhileChargingTogglePatch = bytecodePatch(
|
||||
description = "Restores a hidden toggle to only run backups when the device is charging."
|
||||
) {
|
||||
compatibleWith("com.google.android.apps.photos"("7.11.0.705590205"))
|
||||
|
||||
execute {
|
||||
// Patches 'backup_prefs_had_backup_only_when_charging_enabled' to always be true.
|
||||
backupPreferencesFingerprint.let {
|
||||
it.method.apply {
|
||||
val index = indexOfFirstInstructionOrThrow(
|
||||
it.stringMatches!!.first().index,
|
||||
Opcode.MOVE_RESULT
|
||||
)
|
||||
val register = getInstruction<OneRegisterInstruction>(index).registerA
|
||||
addInstruction(index + 1, "const/4 v$register, 0x1")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.googlerecorder.restrictions
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val onApplicationCreateFingerprint = fingerprint {
|
||||
internal val onApplicationCreateFingerprint by fingerprint {
|
||||
strings("com.google.android.feature.PIXEL_2017_EXPERIENCE")
|
||||
custom { method, classDef ->
|
||||
if (method.name != "onCreate") return@custom false
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ val removeDeviceRestrictionsPatch = bytecodePatch(
|
|||
compatibleWith("com.google.android.apps.recorder")
|
||||
|
||||
execute {
|
||||
val featureStringIndex = onApplicationCreateFingerprint.stringMatches!!.first().index
|
||||
val featureStringIndex = onApplicationCreateFingerprint.stringMatches.first().index
|
||||
|
||||
onApplicationCreateFingerprint.method.apply {
|
||||
// Remove check for device restrictions.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.hexeditor.ad
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val primaryAdsFingerprint = fingerprint {
|
||||
internal val primaryAdsFingerprint by fingerprint {
|
||||
custom { method, classDef ->
|
||||
classDef.endsWith("PreferencesHelper;") && method.name == "isAdsDisabled"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.iconpackstudio.misc.pro
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val checkProFingerprint = fingerprint {
|
||||
internal val checkProFingerprint by fingerprint {
|
||||
returns("Z")
|
||||
custom { _, classDef -> classDef.endsWith("IPSPurchaseRepository;") }
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.idaustria.detection.root
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val attestationSupportedCheckFingerprint = fingerprint {
|
||||
internal val attestationSupportedCheckFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("V")
|
||||
custom { method, classDef ->
|
||||
|
|
@ -12,7 +12,7 @@ internal val attestationSupportedCheckFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val bootloaderCheckFingerprint = fingerprint {
|
||||
internal val bootloaderCheckFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
custom { method, classDef ->
|
||||
|
|
@ -21,7 +21,7 @@ internal val bootloaderCheckFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val rootCheckFingerprint = fingerprint {
|
||||
internal val rootCheckFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("V")
|
||||
custom { method, classDef ->
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.idaustria.detection.signature
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val spoofSignatureFingerprint = fingerprint {
|
||||
internal val spoofSignatureFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE)
|
||||
returns("L")
|
||||
parameters("L")
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.inshorts.ad
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val inshortsAdsFingerprint = fingerprint {
|
||||
internal val inshortsAdsFingerprint by fingerprint {
|
||||
returns("V")
|
||||
strings("GoogleAdLoader", "exception in requestAd")
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ package app.revanced.patches.instagram.hide.navigation
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val tabCreateButtonsLoopStartFingerprint = fingerprint {
|
||||
internal val tabCreateButtonsLoopStartFingerprint by fingerprint {
|
||||
returns("V")
|
||||
strings("InstagramMainActivity.createTabButtons")
|
||||
opcodes(
|
||||
|
|
@ -16,7 +16,7 @@ internal val tabCreateButtonsLoopStartFingerprint = fingerprint {
|
|||
)
|
||||
}
|
||||
|
||||
internal val tabCreateButtonsLoopEndFingerprint = fingerprint {
|
||||
internal val tabCreateButtonsLoopEndFingerprint by fingerprint {
|
||||
returns("V")
|
||||
strings("InstagramMainActivity.createTabButtons")
|
||||
opcodes(
|
||||
|
|
|
|||
|
|
@ -2,8 +2,7 @@ package app.revanced.patches.instagram.hide.stories
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
|
||||
internal val getOrCreateAvatarViewFingerprint = fingerprint {
|
||||
internal val getOrCreateAvatarViewFingerprint by fingerprint {
|
||||
parameters()
|
||||
returns("L")
|
||||
custom { method, classDef ->
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ import app.revanced.util.getReference
|
|||
import app.revanced.util.indexOfFirstInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
internal val isValidSignatureClassFingerprint = fingerprint {
|
||||
internal val isValidSignatureClassFingerprint by fingerprint {
|
||||
strings("The provider for uri '", "' is not trusted: ")
|
||||
}
|
||||
|
||||
internal val isValidSignatureMethodFingerprint = fingerprint {
|
||||
internal val isValidSignatureMethodFingerprint by fingerprint {
|
||||
parameters("L", "Z")
|
||||
returns("Z")
|
||||
custom { method, _ ->
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@ package app.revanced.patches.irplus.ad
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val irplusAdsFingerprint = fingerprint {
|
||||
internal val irplusAdsFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
returns("V")
|
||||
parameters("L", "Z")
|
||||
strings("TAGGED")
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val isLoggedInFingerprint = fingerprint {
|
||||
internal val isLoggedInFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
opcodes(
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val hasPurchasedFingerprint = fingerprint {
|
||||
internal val hasPurchasedFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
opcodes(
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val licenseValidationFingerprint = fingerprint {
|
||||
internal val licenseValidationFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("Z")
|
||||
parameters("Landroid/content/Context;")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val verifySignatureFingerprint = fingerprint(fuzzyPatternScanThreshold = 2) {
|
||||
internal val verifySignatureFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("Z")
|
||||
parameters("Landroid/app/Activity;")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val isFreeVersionFingerprint = fingerprint {
|
||||
internal val isFreeVersionFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("Ljava/lang/Boolean;")
|
||||
parameters("Landroid/content/Context;")
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.android.tools.smali.dexlib2.AccessFlags
|
|||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.value.StringEncodedValue
|
||||
|
||||
internal val createInboxSubTabsFingerprint = fingerprint {
|
||||
internal val createInboxSubTabsFingerprint by fingerprint {
|
||||
returns("V")
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
opcodes(
|
||||
|
|
@ -22,7 +22,7 @@ internal val createInboxSubTabsFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val loadInboxAdsFingerprint = fingerprint {
|
||||
internal val loadInboxAdsFingerprint by fingerprint {
|
||||
returns("V")
|
||||
strings(
|
||||
"ads_load_begin",
|
||||
|
|
|
|||
|
|
@ -1,28 +0,0 @@
|
|||
package app.revanced.patches.messenger.inputfield
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
/**
|
||||
* This patch will be deleted soon.
|
||||
*
|
||||
* Pull requests to update this patch to the latest app target are invited.
|
||||
*/
|
||||
@Deprecated("This patch only works with an outdated app target that is no longer fully supported by Facebook.")
|
||||
@Suppress("unused")
|
||||
val disableSwitchingEmojiToStickerPatch = bytecodePatch(
|
||||
description = "Disables switching from emoji to sticker search mode in message input field.",
|
||||
) {
|
||||
compatibleWith("com.facebook.orca"("439.0.0.29.119"))
|
||||
|
||||
execute {
|
||||
switchMessengeInputEmojiButtonFingerprint.method.apply {
|
||||
val setStringIndex = switchMessengeInputEmojiButtonFingerprint.patternMatch!!.startIndex + 2
|
||||
val targetRegister = getInstruction<OneRegisterInstruction>(setStringIndex).registerA
|
||||
|
||||
replaceInstruction(setStringIndex, "const-string v$targetRegister, \"expression\"")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
package app.revanced.patches.messenger.inputfield
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val disableTypingIndicatorPatch = bytecodePatch(
|
||||
name = "Disable typing indicator",
|
||||
description = "Disables the indicator while typing a message.",
|
||||
) {
|
||||
compatibleWith("com.facebook.orca")
|
||||
|
||||
execute {
|
||||
sendTypingIndicatorFingerprint.method.replaceInstruction(0, "return-void")
|
||||
}
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
package app.revanced.patches.messenger.inputfield
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.dexbacked.value.DexBackedStringEncodedValue
|
||||
|
||||
internal val sendTypingIndicatorFingerprint = fingerprint {
|
||||
returns("V")
|
||||
parameters()
|
||||
custom { method, classDef ->
|
||||
method.name == "run" &&
|
||||
classDef.fields.any {
|
||||
it.name == "__redex_internal_original_name" &&
|
||||
(it.initialValue as? DexBackedStringEncodedValue)?.value == "ConversationTypingContext\$sendActiveStateRunnable\$1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal val switchMessengeInputEmojiButtonFingerprint = fingerprint {
|
||||
returns("V")
|
||||
parameters("L", "Z")
|
||||
opcodes(
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.IF_EQZ,
|
||||
Opcode.CONST_STRING,
|
||||
Opcode.GOTO,
|
||||
Opcode.CONST_STRING,
|
||||
Opcode.GOTO,
|
||||
)
|
||||
strings("afterTextChanged", "expression_search")
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.messenger.layout
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val isFacebookButtonEnabledFingerprint = fingerprint {
|
||||
internal val isFacebookButtonEnabledFingerprint by fingerprint {
|
||||
parameters()
|
||||
returns("Z")
|
||||
strings("FacebookButtonTabButtonImplementation")
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.messenger.metaai
|
|||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val getMobileConfigBoolFingerprint = fingerprint {
|
||||
internal val getMobileConfigBoolFingerprint by fingerprint {
|
||||
parameters("J")
|
||||
returns("Z")
|
||||
opcodes(Opcode.RETURN)
|
||||
|
|
@ -12,12 +12,12 @@ internal val getMobileConfigBoolFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val metaAIKillSwitchCheckFingerprint = fingerprint {
|
||||
strings("SearchAiagentImplementationsKillSwitch")
|
||||
internal val metaAIKillSwitchCheckFingerprint by fingerprint {
|
||||
opcodes(Opcode.CONST_WIDE)
|
||||
strings("SearchAiagentImplementationsKillSwitch")
|
||||
}
|
||||
|
||||
internal val extensionMethodFingerprint = fingerprint {
|
||||
internal val extensionMethodFingerprint by fingerprint {
|
||||
strings("REPLACED_BY_PATCH")
|
||||
custom { method, classDef ->
|
||||
method.name == EXTENSION_METHOD_NAME && classDef.type == EXTENSION_CLASS_DESCRIPTOR
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ val removeMetaAIPatch = bytecodePatch(
|
|||
|
||||
// Extract the common starting digits of Meta AI flag IDs from a flag found in code.
|
||||
val relevantDigits = with(metaAIKillSwitchCheckFingerprint) {
|
||||
method.getInstruction<WideLiteralInstruction>(patternMatch!!.startIndex).wideLiteral
|
||||
method.getInstruction<WideLiteralInstruction>(patternMatch.startIndex).wideLiteral
|
||||
}.toString().substring(0, 7)
|
||||
|
||||
// Replace placeholder in the extension method.
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
package app.revanced.patches.messenger.navbar
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.messenger.metaai.removeMetaAIPatch
|
||||
|
||||
@Deprecated("Superseded by removeMetaAIPatch", ReplaceWith("removeMetaAIPatch"))
|
||||
@Suppress("unused")
|
||||
val removeMetaAITabPatch = bytecodePatch(
|
||||
description = "Removes the 'Meta AI' tab from the navbar.",
|
||||
) {
|
||||
dependsOn(removeMetaAIPatch)
|
||||
}
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
package app.revanced.patches.meta.ads
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val adInjectorFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE)
|
||||
returns("Z")
|
||||
parameters("L", "L")
|
||||
strings(
|
||||
"SponsoredContentController.insertItem",
|
||||
)
|
||||
}
|
||||
package app.revanced.patches.meta.ads
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val adInjectorFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE)
|
||||
returns("Z")
|
||||
parameters("L", "L")
|
||||
strings(
|
||||
"SponsoredContentController.insertItem",
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
package app.revanced.patches.meta.ads
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Deprecated("Instead use the Instagram or Threads specific hide ads patch")
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch {
|
||||
execute {
|
||||
adInjectorFingerprint.method.returnEarly(false)
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.mifitness.misc.locale
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val syncBluetoothLanguageFingerprint = fingerprint {
|
||||
internal val syncBluetoothLanguageFingerprint by fingerprint {
|
||||
opcodes(Opcode.MOVE_RESULT_OBJECT)
|
||||
custom { method, _ ->
|
||||
method.name == "syncBluetoothLanguage" &&
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ val forceEnglishLocalePatch = bytecodePatch(
|
|||
|
||||
execute {
|
||||
syncBluetoothLanguageFingerprint.method.apply {
|
||||
val resolvePhoneLocaleInstruction = syncBluetoothLanguageFingerprint.patternMatch!!.startIndex
|
||||
val resolvePhoneLocaleInstruction = syncBluetoothLanguageFingerprint.instructionMatches.first().index
|
||||
val registerIndexToUpdate = getInstruction<OneRegisterInstruction>(resolvePhoneLocaleInstruction).registerA
|
||||
|
||||
replaceInstruction(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.mifitness.misc.login
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val xiaomiAccountManagerConstructorFingerprint = fingerprint {
|
||||
internal val xiaomiAccountManagerConstructorFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.CONSTRUCTOR)
|
||||
parameters("Landroid/content/Context;", "Z")
|
||||
custom { method, _ ->
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.music.ad.video
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val showVideoAdsParentFingerprint = fingerprint {
|
||||
internal val showVideoAdsParentFingerprint by fingerprint {
|
||||
opcodes(
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ val hideVideoAdsPatch = bytecodePatch(
|
|||
|
||||
execute {
|
||||
navigate(showVideoAdsParentFingerprint.originalMethod)
|
||||
.to(showVideoAdsParentFingerprint.patternMatch!!.startIndex + 1)
|
||||
.to(showVideoAdsParentFingerprint.instructionMatches.first().index + 1)
|
||||
.stop()
|
||||
.addInstruction(0, "const/4 p1, 0x0")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val allowExclusiveAudioPlaybackFingerprint = fingerprint {
|
||||
internal val allowExclusiveAudioPlaybackFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
parameters()
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val repeatTrackFingerprint = fingerprint {
|
||||
internal val repeatTrackFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("L", "L")
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ val permanentRepeatPatch = bytecodePatch(
|
|||
compatibleWith("com.google.android.apps.youtube.music")
|
||||
|
||||
execute {
|
||||
val startIndex = repeatTrackFingerprint.patternMatch!!.endIndex
|
||||
val startIndex = repeatTrackFingerprint.instructionMatches.last().index
|
||||
val repeatIndex = startIndex + 1
|
||||
|
||||
repeatTrackFingerprint.method.apply {
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
package app.revanced.patches.music.interaction.permanentshuffle
|
||||
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val disableShuffleFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters()
|
||||
opcodes(
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.SGET_OBJECT,
|
||||
Opcode.IPUT_OBJECT,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL
|
||||
)
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
package app.revanced.patches.music.interaction.permanentshuffle
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Deprecated("This patch no longer works and will be removed in the future.")
|
||||
@Suppress("unused")
|
||||
val permanentShufflePatch = bytecodePatch(
|
||||
description = "Permanently remember your shuffle preference " +
|
||||
"even if the playlist ends or another track is played."
|
||||
) {
|
||||
compatibleWith("com.google.android.apps.youtube.music")
|
||||
|
||||
execute {
|
||||
disableShuffleFingerprint.method.addInstruction(0, "return-void")
|
||||
}
|
||||
}
|
||||
|
|
@ -4,9 +4,8 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val constructCategoryBarFingerprint = fingerprint {
|
||||
internal val constructCategoryBarFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
returns("V")
|
||||
parameters("Landroid/content/Context;", "L", "L", "L")
|
||||
opcodes(
|
||||
Opcode.IPUT_OBJECT,
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ val hideCategoryBar = bytecodePatch(
|
|||
|
||||
execute {
|
||||
constructCategoryBarFingerprint.method.apply {
|
||||
val insertIndex = constructCategoryBarFingerprint.patternMatch!!.startIndex
|
||||
val insertIndex = constructCategoryBarFingerprint.instructionMatches.first().index
|
||||
val register = getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
|
||||
val freeRegister = findFreeRegister(insertIndex, register)
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val hideGetPremiumFingerprint = fingerprint {
|
||||
internal val hideGetPremiumFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters()
|
||||
|
|
@ -16,7 +16,7 @@ internal val hideGetPremiumFingerprint = fingerprint {
|
|||
strings("FEmusic_history", "FEmusic_offline")
|
||||
}
|
||||
|
||||
internal val membershipSettingsFingerprint = fingerprint {
|
||||
internal val membershipSettingsFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Ljava/lang/CharSequence;")
|
||||
opcodes(
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ val hideGetPremiumPatch = bytecodePatch(
|
|||
|
||||
execute {
|
||||
hideGetPremiumFingerprint.method.apply {
|
||||
val insertIndex = hideGetPremiumFingerprint.patternMatch!!.endIndex
|
||||
val insertIndex = hideGetPremiumFingerprint.instructionMatches.last().index
|
||||
|
||||
val setVisibilityInstruction = getInstruction<FiveRegisterInstruction>(insertIndex)
|
||||
val getPremiumViewRegister = setVisibilityInstruction.registerC
|
||||
|
|
|
|||
|
|
@ -4,9 +4,8 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val pivotBarConstructorFingerprint = fingerprint {
|
||||
internal val pivotBarConstructorFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
returns("V")
|
||||
parameters("L", "Z")
|
||||
opcodes(
|
||||
Opcode.CHECK_CAST,
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ val removeUpgradeButtonPatch = bytecodePatch(
|
|||
execute {
|
||||
pivotBarConstructorFingerprint.method.apply {
|
||||
val pivotBarElementFieldReference =
|
||||
getInstruction(pivotBarConstructorFingerprint.patternMatch!!.endIndex - 1)
|
||||
getInstruction(pivotBarConstructorFingerprint.instructionMatches.last().index - 1)
|
||||
.getReference<FieldReference>()
|
||||
|
||||
val register = getInstruction<FiveRegisterInstruction>(0).registerC
|
||||
|
|
@ -37,7 +37,7 @@ val removeUpgradeButtonPatch = bytecodePatch(
|
|||
iput-object v0, v$register, $pivotBarElementFieldReference
|
||||
""".toInstructions().toMutableList()
|
||||
|
||||
val endIndex = pivotBarConstructorFingerprint.patternMatch!!.endIndex
|
||||
val endIndex = pivotBarConstructorFingerprint.instructionMatches.last().index
|
||||
|
||||
// Replace the instruction to retain the label at given index.
|
||||
replaceInstruction(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.music.misc.androidauto
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val checkCertificateFingerprint = fingerprint {
|
||||
internal val checkCertificateFingerprint by fingerprint {
|
||||
returns("Z")
|
||||
parameters("Ljava/lang/String;")
|
||||
strings(
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.android.tools.smali.dexlib2.Opcode
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val backgroundPlaybackDisableFingerprint = fingerprint {
|
||||
internal val backgroundPlaybackDisableFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("Z")
|
||||
parameters("L")
|
||||
|
|
@ -21,7 +21,7 @@ internal val backgroundPlaybackDisableFingerprint = fingerprint {
|
|||
)
|
||||
}
|
||||
|
||||
internal val kidsBackgroundPlaybackPolicyControllerFingerprint = fingerprint {
|
||||
internal val kidsBackgroundPlaybackPolicyControllerFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("I", "L", "Z")
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
package app.revanced.patches.music.misc.extension.hooks
|
||||
|
||||
import app.revanced.patcher.string
|
||||
import app.revanced.patches.shared.misc.extension.extensionHook
|
||||
|
||||
internal val applicationInitHook = extensionHook {
|
||||
returns("V")
|
||||
parameters()
|
||||
strings("activity")
|
||||
instructions(
|
||||
string("activity")
|
||||
)
|
||||
custom { method, _ -> method.name == "onCreate" }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.music.misc.gms
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val musicActivityOnCreateFingerprint = fingerprint {
|
||||
internal val musicActivityOnCreateFingerprint by fingerprint {
|
||||
returns("V")
|
||||
parameters("Landroid/os/Bundle;")
|
||||
custom { method, classDef ->
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val playerRequestConstructorFingerprint = fingerprint {
|
||||
internal val playerRequestConstructorFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
strings("player")
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@ internal val playerRequestConstructorFingerprint = fingerprint {
|
|||
/**
|
||||
* Matches using the class found in [playerRequestConstructorFingerprint].
|
||||
*/
|
||||
internal val createPlayerRequestBodyFingerprint = fingerprint {
|
||||
internal val createPlayerRequestBodyFingerprint by fingerprint {
|
||||
parameters("L")
|
||||
returns("V")
|
||||
opcodes(
|
||||
|
|
@ -26,7 +26,7 @@ internal val createPlayerRequestBodyFingerprint = fingerprint {
|
|||
/**
|
||||
* Used to get a reference to other clientInfo fields.
|
||||
*/
|
||||
internal val setClientInfoFieldsFingerprint = fingerprint {
|
||||
internal val setClientInfoFieldsFingerprint by fingerprint {
|
||||
returns("L")
|
||||
strings("Google Inc.")
|
||||
}
|
||||
|
|
@ -34,6 +34,6 @@ internal val setClientInfoFieldsFingerprint = fingerprint {
|
|||
/**
|
||||
* Used to get a reference to the clientInfo and clientInfo.clientVersion field.
|
||||
*/
|
||||
internal val setClientInfoClientVersionFingerprint = fingerprint {
|
||||
internal val setClientInfoClientVersionFingerprint by fingerprint {
|
||||
strings("10.29")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ val spoofClientPatch = bytecodePatch(
|
|||
val createPlayerRequestBodyMatch = createPlayerRequestBodyFingerprint.match(playerRequestClass)
|
||||
|
||||
val clientInfoContainerClass = createPlayerRequestBodyMatch.method
|
||||
.getInstruction(createPlayerRequestBodyMatch.patternMatch!!.startIndex)
|
||||
.getInstruction(createPlayerRequestBodyMatch.instructionMatches.first().index)
|
||||
.getReference<TypeReference>()!!.type
|
||||
|
||||
val clientInfoField = setClientInfoClientVersionFingerprint.method.instructions.first {
|
||||
|
|
@ -56,7 +56,7 @@ val spoofClientPatch = bytecodePatch(
|
|||
val clientModelField = setClientInfoFieldInstructions[5]
|
||||
val osVersionField = setClientInfoFieldInstructions[7]
|
||||
val clientVersionField = setClientInfoClientVersionFingerprint.method
|
||||
.getInstruction(setClientInfoClientVersionFingerprint.stringMatches!!.first().index + 1)
|
||||
.getInstruction(setClientInfoClientVersionFingerprint.stringMatches.first().index + 1)
|
||||
.getReference<FieldReference>()
|
||||
|
||||
// Helper method to spoof the client info.
|
||||
|
|
@ -96,7 +96,7 @@ val spoofClientPatch = bytecodePatch(
|
|||
}
|
||||
|
||||
createPlayerRequestBodyMatch.method.apply {
|
||||
val checkCastIndex = createPlayerRequestBodyMatch.patternMatch!!.startIndex
|
||||
val checkCastIndex = createPlayerRequestBodyMatch.instructionMatches.first().index
|
||||
val clientInfoContainerRegister = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
|
||||
|
||||
addInstruction(checkCastIndex + 1, "invoke-static {v$clientInfoContainerRegister}, $spoofClientInfoMethod")
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.myexpenses.misc.pro
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val isEnabledFingerprint = fingerprint {
|
||||
internal val isEnabledFingerprint by fingerprint {
|
||||
returns("Z")
|
||||
strings("feature", "feature.licenceStatus")
|
||||
}
|
||||
|
|
@ -3,14 +3,14 @@ package app.revanced.patches.myfitnesspal.ads
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val isPremiumUseCaseImplFingerprint = fingerprint {
|
||||
internal val isPremiumUseCaseImplFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
custom { method, classDef ->
|
||||
classDef.endsWith("IsPremiumUseCaseImpl;") && method.name == "doWork"
|
||||
}
|
||||
}
|
||||
|
||||
internal val mainActivityNavigateToNativePremiumUpsellFingerprint = fingerprint {
|
||||
internal val mainActivityNavigateToNativePremiumUpsellFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
custom { method, classDef ->
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
package app.revanced.patches.nfctoolsse.misc.pro
|
||||
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
@Deprecated("This patch no longer works and will soon be deleted.")
|
||||
internal val isLicenseRegisteredFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
strings("kLicenseCheck")
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
package app.revanced.patches.nfctoolsse.misc.pro
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
@Deprecated("This patch no longer works and will soon be deleted.")
|
||||
val unlockProPatch = bytecodePatch{
|
||||
compatibleWith("com.wakdev.apps.nfctools.se")
|
||||
|
||||
execute {
|
||||
isLicenseRegisteredFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
const/4 v0, 0x1
|
||||
return v0
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -4,14 +4,14 @@ import app.revanced.patcher.fingerprint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val jwPlayerConfigFingerprint = fingerprint {
|
||||
internal val jwPlayerConfigFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
custom { methodDef, classDef ->
|
||||
classDef.type == "Lcom/jwplayer/pub/api/configuration/PlayerConfig${'$'}Builder;" && methodDef.name == "advertisingConfig"
|
||||
}
|
||||
}
|
||||
|
||||
internal val screenMapperFingerprint = fingerprint {
|
||||
internal val screenMapperFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Lnl/nu/android/bff/domain/models/screen/ScreenEntity;")
|
||||
parameters("Lnl/nu/performance/api/client/objects/Screen;")
|
||||
|
|
@ -27,7 +27,7 @@ internal val screenMapperFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val nextPageRepositoryImplFingerprint = fingerprint {
|
||||
internal val nextPageRepositoryImplFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("Lnl/nu/android/bff/domain/models/Page;")
|
||||
parameters("Lnl/nu/performance/api/client/PacResponse;", "Ljava/lang/String;")
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ val spoofCertificatePatch = bytecodePatch(
|
|||
compatibleWith("nl.sanomamedia.android.nu")
|
||||
|
||||
execute {
|
||||
getFingerprintHashForPackageFingerprints.forEach { fingerprint ->
|
||||
getFingerprintHashForPackageFingerprints.forEach { fingerprintBuilder ->
|
||||
val fingerprint by fingerprintBuilder
|
||||
|
||||
fingerprint.method.returnEarly("eae41fc018df2731a9b6ae1ac327da44a288667b")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
package app.revanced.patches.nyx.misc.pro
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val checkProFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
classDef.endsWith("BillingManager;") && method.name == "isProVersion"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
package app.revanced.patches.nyx.misc.pro
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Deprecated("This patch will be removed in the future.")
|
||||
@Suppress("unused")
|
||||
val unlockProPatch = bytecodePatch {
|
||||
compatibleWith("com.awedea.nyx")
|
||||
|
||||
execute {
|
||||
checkProFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
const/4 v0, 0x1
|
||||
return v0
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.openinghours.misc.fix.crash
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val setPlaceFingerprint = fingerprint {
|
||||
internal val setPlaceFingerprint by fingerprint {
|
||||
returns("V")
|
||||
parameters("Lde/simon/openinghours/models/Place;")
|
||||
custom { method, _ ->
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.orfon.detection.root
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val isDeviceRootedFingeprint = fingerprint {
|
||||
internal val isDeviceRootedFingeprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
custom { method, classDef ->
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ package app.revanced.patches.pandora.ads
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val getIsAdSupportedFingerprint = fingerprint {
|
||||
internal val getIsAdSupportedFingerprint by fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "getIsAdSupported" && classDef.endsWith("UserData;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val requestAudioAdFingerprint = fingerprint {
|
||||
internal val requestAudioAdFingerprint by fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "requestAudioAdFromAdSDK" && classDef.endsWith("ContentServiceOpsImpl;")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.pandora.misc
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val skipLimitBehaviorFingerprint = fingerprint {
|
||||
internal val skipLimitBehaviorFingerprint by fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "getSkipLimitBehavior" && classDef.endsWith("UserData;")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.photomath.detection.deviceid
|
|||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val getDeviceIdFingerprint = fingerprint {
|
||||
internal val getDeviceIdFingerprint by fingerprint {
|
||||
returns("Ljava/lang/String;")
|
||||
parameters()
|
||||
opcodes(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.photomath.detection.signature
|
|||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val checkSignatureFingerprint = fingerprint {
|
||||
internal val checkSignatureFingerprint by fingerprint {
|
||||
opcodes(
|
||||
Opcode.CONST_STRING,
|
||||
Opcode.INVOKE_STATIC,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ val signatureDetectionPatch = bytecodePatch(
|
|||
) {
|
||||
|
||||
execute {
|
||||
val replacementIndex = checkSignatureFingerprint.patternMatch!!.endIndex
|
||||
val replacementIndex = checkSignatureFingerprint.instructionMatches.last().index
|
||||
val checkRegister =
|
||||
checkSignatureFingerprint.method.getInstruction<OneRegisterInstruction>(replacementIndex).registerA
|
||||
checkSignatureFingerprint.method.replaceInstruction(replacementIndex, "const/4 v$checkRegister, 0x1")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val hideUpdatePopupFingerprint = fingerprint {
|
||||
internal val hideUpdatePopupFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.FINAL, AccessFlags.PUBLIC)
|
||||
returns("V")
|
||||
opcodes(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.photomath.misc.unlock.bookpoint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val isBookpointEnabledFingerprint = fingerprint {
|
||||
internal val isBookpointEnabledFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
parameters()
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.photomath.misc.unlock.plus
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val isPlusUnlockedFingerprint = fingerprint{
|
||||
internal val isPlusUnlockedFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
strings("genius")
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.piccomafr.misc
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val getAndroidIdFingerprint = fingerprint {
|
||||
internal val getAndroidIdFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Ljava/lang/String;")
|
||||
parameters("Landroid/content/Context;")
|
||||
|
|
|
|||
|
|
@ -3,19 +3,18 @@ package app.revanced.patches.piccomafr.tracking
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val appMeasurementFingerprint = fingerprint {
|
||||
internal val appMeasurementFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
strings("config/app/", "Fetching remote configuration")
|
||||
}
|
||||
|
||||
internal val facebookSDKFingerprint = fingerprint {
|
||||
internal val facebookSDKFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR)
|
||||
returns("V")
|
||||
strings("instagram.com", "facebook.com")
|
||||
}
|
||||
|
||||
internal val firebaseInstallFingerprint = fingerprint {
|
||||
internal val firebaseInstallFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE)
|
||||
strings(
|
||||
"https://%s/%s/%s",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.pixiv.ads
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val shouldShowAdsFingerprint = fingerprint {
|
||||
internal val shouldShowAdsFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
custom { methodDef, classDef ->
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import app.revanced.patcher.fingerprint
|
|||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val enterServerInsertedAdBreakStateFingerprint = fingerprint {
|
||||
internal val enterServerInsertedAdBreakStateFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
parameters("Lcom/amazon/avod/fsm/Trigger;")
|
||||
returns("V")
|
||||
|
|
@ -19,7 +19,7 @@ internal val enterServerInsertedAdBreakStateFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val doTriggerFingerprint = fingerprint {
|
||||
internal val doTriggerFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PROTECTED)
|
||||
returns("V")
|
||||
opcodes(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.primevideo.video.speed
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val playbackUserControlsInitializeFingerprint = fingerprint {
|
||||
internal val playbackUserControlsInitializeFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
parameters("Lcom/amazon/avod/playbackclient/PlaybackInitializationContext;")
|
||||
returns("V")
|
||||
|
|
@ -12,7 +12,7 @@ internal val playbackUserControlsInitializeFingerprint = fingerprint {
|
|||
}
|
||||
}
|
||||
|
||||
internal val playbackUserControlsPrepareForPlaybackFingerprint = fingerprint {
|
||||
internal val playbackUserControlsPrepareForPlaybackFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
parameters("Lcom/amazon/avod/playbackclient/PlaybackContext;")
|
||||
returns("V")
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package app.revanced.patches.rar.misc.annoyances.purchasereminder
|
|||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val showReminderFingerprint = fingerprint {
|
||||
internal val showReminderFingerprint by fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("V")
|
||||
custom { method, _ ->
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package app.revanced.patches.reddit.ad.comments
|
|||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val hideCommentAdsFingerprint = fingerprint {
|
||||
internal val hideCommentAdsFingerprint by fingerprint {
|
||||
strings(
|
||||
"link",
|
||||
// CommentPageRepository is not returning a link object
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue