feat: Update to patcher v22

This commit is contained in:
LisoUseInAIKyrios 2025-09-12 20:26:39 +04:00
parent c4a720fbd3
commit 724e6d61b2
420 changed files with 4247 additions and 4429 deletions

View file

@ -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)
}

View file

@ -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())

View file

@ -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")

View file

@ -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")

View file

@ -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;"
}
}

View file

@ -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",
)
}
}
}

View file

@ -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")
}

View file

@ -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;"
}

View file

@ -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;")
}

View file

@ -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=")
}

View file

@ -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",
)
}
}
}

View file

@ -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" }
}
}

View file

@ -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(

View file

@ -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")
}

View file

@ -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(

View file

@ -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

View file

@ -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",
)

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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,

View file

@ -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;")
}

View file

@ -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/")
}

View file

@ -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")
}

View file

@ -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;")
}

View file

@ -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")
}

View file

@ -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")
}
}
}
}

View file

@ -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

View file

@ -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.

View file

@ -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"
}

View file

@ -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;") }
}

View file

@ -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 ->

View file

@ -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")

View file

@ -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")
}

View file

@ -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(

View file

@ -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 ->

View file

@ -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, _ ->

View file

@ -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")
}

View file

@ -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(

View file

@ -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(

View file

@ -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;")

View file

@ -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;")

View file

@ -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;")

View file

@ -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",

View file

@ -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\"")
}
}
}

View file

@ -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")
}
}

View file

@ -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")
}

View file

@ -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")

View file

@ -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

View file

@ -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.

View file

@ -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)
}

View file

@ -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",
)
}

View file

@ -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)
}
}

View file

@ -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" &&

View file

@ -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(

View file

@ -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, _ ->

View file

@ -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,

View file

@ -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")
}

View file

@ -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()

View file

@ -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")

View file

@ -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 {

View file

@ -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
)
}

View file

@ -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")
}
}

View file

@ -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,

View file

@ -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)

View file

@ -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(

View file

@ -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

View file

@ -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,

View file

@ -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(

View file

@ -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(

View file

@ -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")

View file

@ -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" }
}

View file

@ -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 ->

View file

@ -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")
}

View file

@ -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")

View file

@ -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")
}

View file

@ -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 ->

View file

@ -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")
}

View file

@ -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
""",
)
}
}

View file

@ -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;")

View file

@ -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")
}
}

View file

@ -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"
}
}

View file

@ -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
""",
)
}
}

View file

@ -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, _ ->

View file

@ -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 ->

View file

@ -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;")
}

View file

@ -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;")
}

View file

@ -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(

View file

@ -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,

View file

@ -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")

View file

@ -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(

View file

@ -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()

View file

@ -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")

View file

@ -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;")

View file

@ -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",

View file

@ -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 ->

View file

@ -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(

View file

@ -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")

View file

@ -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, _ ->

View file

@ -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