diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt index 02cf1f2430..66863f4749 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/ads/BaseAdsPatch.kt @@ -10,6 +10,7 @@ import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.extension.Constants.PATCHES_PATH +import app.revanced.util.fingerprint.matchOrThrow import app.revanced.util.fingerprint.methodOrThrow import app.revanced.util.getReference import app.revanced.util.getWalkerMethod @@ -32,15 +33,20 @@ fun baseAdsPatch( ) { execute { - videoAdsFingerprint.methodOrThrow().apply { - addInstructionsWithLabels( - 0, """ - invoke-static {}, $classDescriptor->$methodDescriptor()Z - move-result v0 - if-nez v0, :show_ads - return-void - """, ExternalLabel("show_ads", getInstruction(0)) - ) + setOf( + sslGuardFingerprint, + videoAdsFingerprint, + ).forEach { fingerprint -> + fingerprint.methodOrThrow().apply { + addInstructionsWithLabels( + 0, """ + invoke-static {}, $classDescriptor->$methodDescriptor()Z + move-result v0 + if-nez v0, :show_ads + return-void + """, ExternalLabel("show_ads", getInstruction(0)) + ) + } } musicAdsFingerprint.methodOrThrow().apply { @@ -61,6 +67,21 @@ fun baseAdsPatch( ) } + advertisingIdFingerprint.matchOrThrow().let { + it.method.apply { + val insertIndex = it.stringMatches!!.first().index + val insertRegister = getInstruction(insertIndex).registerA + addInstructionsWithLabels( + insertIndex, """ + invoke-static {}, $classDescriptor->$methodDescriptor()Z + move-result v$insertRegister + if-nez v$insertRegister, :enable_id + return-void + """, ExternalLabel("enable_id", getInstruction(insertIndex)) + ) + } + } + } } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/ads/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/ads/Fingerprints.kt index 9ec1389620..6853546b45 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/ads/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/ads/Fingerprints.kt @@ -4,6 +4,24 @@ import app.revanced.util.fingerprint.legacyFingerprint import app.revanced.util.or import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.util.MethodUtil + +internal val advertisingIdFingerprint = legacyFingerprint( + name = "advertisingIdFingerprint", + returnType = "V", + strings = listOf("a."), + customFingerprint = { method, classDef -> + MethodUtil.isConstructor(method) && + classDef.fields.find { it.type == "Ljava/util/Random;" } != null + } +) + +internal val sslGuardFingerprint = legacyFingerprint( + name = "sslGuardFingerprint", + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + strings = listOf("Cannot initialize SslGuardSocketFactory will null"), +) internal val musicAdsFingerprint = legacyFingerprint( name = "musicAdsFingerprint", diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/gms/GmsCoreSupportPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/gms/GmsCoreSupportPatch.kt index 57d27416fe..69edcdc065 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/gms/GmsCoreSupportPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/gms/GmsCoreSupportPatch.kt @@ -330,262 +330,134 @@ private object Constants { * All permissions. */ val PERMISSIONS = setOf( + // C2DM / GCM "com.google.android.c2dm.permission.RECEIVE", "com.google.android.c2dm.permission.SEND", - "com.google.android.gms.auth.api.phone.permission.SEND", - "com.google.android.gms.permission.AD_ID", - "com.google.android.gms.permission.AD_ID_NOTIFICATION", - "com.google.android.gms.permission.CAR_FUEL", - "com.google.android.gms.permission.CAR_INFORMATION", - "com.google.android.gms.permission.CAR_MILEAGE", - "com.google.android.gms.permission.CAR_SPEED", - "com.google.android.gms.permission.CAR_VENDOR_EXTENSION", + "com.google.android.gtalkservice.permission.GTALK_SERVICE", + "com.google.android.providers.gsf.permission.READ_GSERVICES", + + // GAuth "com.google.android.googleapps.permission.GOOGLE_AUTH", "com.google.android.googleapps.permission.GOOGLE_AUTH.cp", "com.google.android.googleapps.permission.GOOGLE_AUTH.local", "com.google.android.googleapps.permission.GOOGLE_AUTH.mail", "com.google.android.googleapps.permission.GOOGLE_AUTH.writely", - "com.google.android.gtalkservice.permission.GTALK_SERVICE", - "com.google.android.providers.gsf.permission.READ_GSERVICES", + + // Ad + "com.google.android.gms.permission.AD_ID_NOTIFICATION", + "com.google.android.gms.permission.AD_ID", ) /** * All intent actions. */ val ACTIONS = setOf( - "com.google.android.c2dm.intent.RECEIVE", + // location + "com.google.android.gms.location.places.ui.PICK_PLACE", + "com.google.android.gms.location.places.GeoDataApi", + "com.google.android.gms.location.places.PlacesApi", + "com.google.android.gms.location.places.PlaceDetectionApi", + "com.google.android.gms.wearable.MESSAGE_RECEIVED", + "com.google.android.gms.checkin.BIND_TO_SERVICE", + + // C2DM / GCM "com.google.android.c2dm.intent.REGISTER", "com.google.android.c2dm.intent.REGISTRATION", "com.google.android.c2dm.intent.UNREGISTER", - "com.google.android.contextmanager.service.ContextManagerService.START", + "com.google.android.c2dm.intent.RECEIVE", + "com.google.iid.TOKEN_REQUEST", "com.google.android.gcm.intent.SEND", - "com.google.android.gms.accounts.ACCOUNT_SERVICE", - "com.google.android.gms.accountsettings.ACCOUNT_PREFERENCES_SETTINGS", - "com.google.android.gms.accountsettings.action.BROWSE_SETTINGS", - "com.google.android.gms.accountsettings.action.VIEW_SETTINGS", - "com.google.android.gms.accountsettings.MY_ACCOUNT", - "com.google.android.gms.accountsettings.PRIVACY_SETTINGS", - "com.google.android.gms.accountsettings.SECURITY_SETTINGS", - "com.google.android.gms.ads.gservice.START", - "com.google.android.gms.ads.identifier.service.EVENT_ATTESTATION", - "com.google.android.gms.ads.service.CACHE", - "com.google.android.gms.ads.service.CONSENT_LOOKUP", - "com.google.android.gms.ads.service.HTTP", - "com.google.android.gms.analytics.service.START", - "com.google.android.gms.app.settings.GoogleSettingsLink", - "com.google.android.gms.appstate.service.START", - "com.google.android.gms.appusage.service.START", - "com.google.android.gms.asterism.service.START", - "com.google.android.gms.audiomodem.service.AudioModemService.START", - "com.google.android.gms.audit.service.START", - "com.google.android.gms.auth.account.authapi.START", - "com.google.android.gms.auth.account.authenticator.auto.service.START", - "com.google.android.gms.auth.account.authenticator.chromeos.START", - "com.google.android.gms.auth.account.authenticator.tv.service.START", - "com.google.android.gms.auth.account.data.service.START", + + // car + "com.google.android.gms.car.service.START", + + // people + "com.google.android.gms.people.service.START", + + // wearable + "com.google.android.gms.wearable.BIND", + + // auth + "com.google.android.gsf.login", + "com.google.android.gsf.action.GET_GLS", + "com.google.android.gms.common.account.CHOOSE_ACCOUNT", + "com.google.android.gms.auth.login.LOGIN", "com.google.android.gms.auth.api.credentials.PICKER", "com.google.android.gms.auth.api.credentials.service.START", - "com.google.android.gms.auth.api.identity.service.authorization.START", - "com.google.android.gms.auth.api.identity.service.credentialsaving.START", - "com.google.android.gms.auth.api.identity.service.signin.START", - "com.google.android.gms.auth.api.phone.service.InternalService.START", - "com.google.android.gms.auth.api.signin.service.START", - "com.google.android.gms.auth.be.appcert.AppCertService", - "com.google.android.gms.auth.blockstore.service.START", - "com.google.android.gms.auth.config.service.START", - "com.google.android.gms.auth.cryptauth.cryptauthservice.START", - "com.google.android.gms.auth.GOOGLE_SIGN_IN", - "com.google.android.gms.auth.login.LOGIN", - "com.google.android.gms.auth.proximity.devicesyncservice.START", - "com.google.android.gms.auth.proximity.securechannelservice.START", - "com.google.android.gms.auth.proximity.START", "com.google.android.gms.auth.service.START", - "com.google.android.gms.backup.ACTION_BACKUP_SETTINGS", - "com.google.android.gms.backup.G1_BACKUP", - "com.google.android.gms.backup.G1_RESTORE", - "com.google.android.gms.backup.GMS_MODULE_RESTORE", - "com.google.android.gms.beacon.internal.IBleService.START", - "com.google.android.gms.car.service.START", - "com.google.android.gms.carrierauth.service.START", - "com.google.android.gms.cast.firstparty.START", - "com.google.android.gms.cast.remote_display.service.START", - "com.google.android.gms.cast.service.BIND_CAST_DEVICE_CONTROLLER_SERVICE", - "com.google.android.gms.cast_mirroring.service.START", - "com.google.android.gms.checkin.BIND_TO_SERVICE", - "com.google.android.gms.chromesync.service.START", - "com.google.android.gms.clearcut.service.START", - "com.google.android.gms.common.account.CHOOSE_ACCOUNT", - "com.google.android.gms.common.download.START", - "com.google.android.gms.common.service.START", - "com.google.android.gms.common.telemetry.service.START", - "com.google.android.gms.config.START", - "com.google.android.gms.constellation.service.START", + "com.google.firebase.auth.api.gms.service.START", + "com.google.android.gms.auth.be.appcert.AppCertService", "com.google.android.gms.credential.manager.service.firstparty.START", - "com.google.android.gms.deviceconnection.service.START", - "com.google.android.gms.drive.ApiService.RESET_AFTER_BOOT", - "com.google.android.gms.drive.ApiService.START", - "com.google.android.gms.drive.ApiService.STOP", - "com.google.android.gms.droidguard.service.INIT", - "com.google.android.gms.droidguard.service.PING", - "com.google.android.gms.droidguard.service.START", - "com.google.android.gms.enterprise.loader.service.START", - "com.google.android.gms.facs.cache.service.START", - "com.google.android.gms.facs.internal.service.START", - "com.google.android.gms.feedback.internal.IFeedbackService", - "com.google.android.gms.fido.credentialstore.internal_service.START", + "com.google.android.gms.auth.GOOGLE_SIGN_IN", + "com.google.android.gms.signin.service.START", + "com.google.android.gms.auth.api.signin.service.START", + "com.google.android.gms.auth.api.identity.service.signin.START", + "com.google.android.gms.accountsettings.action.VIEW_SETTINGS", + + // fido "com.google.android.gms.fido.fido2.privileged.START", - "com.google.android.gms.fido.fido2.regular.START", - "com.google.android.gms.fido.fido2.zeroparty.START", - "com.google.android.gms.fido.sourcedevice.service.START", - "com.google.android.gms.fido.targetdevice.internal_service.START", - "com.google.android.gms.fido.u2f.privileged.START", - "com.google.android.gms.fido.u2f.thirdparty.START", - "com.google.android.gms.fido.u2f.zeroparty.START", - "com.google.android.gms.fitness.BleApi", - "com.google.android.gms.fitness.ConfigApi", - "com.google.android.gms.fitness.GoalsApi", - "com.google.android.gms.fitness.GoogleFitnessService.START", - "com.google.android.gms.fitness.HistoryApi", - "com.google.android.gms.fitness.InternalApi", - "com.google.android.gms.fitness.RecordingApi", - "com.google.android.gms.fitness.SensorsApi", - "com.google.android.gms.fitness.SessionsApi", - "com.google.android.gms.fonts.service.START", - "com.google.android.gms.freighter.service.START", - "com.google.android.gms.games.internal.connect.service.START", - "com.google.android.gms.games.PLAY_GAMES_UPGRADE", - "com.google.android.gms.games.service.START", + + // gass "com.google.android.gms.gass.START", - "com.google.android.gms.gmscompliance.service.START", - "com.google.android.gms.googlehelp.HELP", + + // games + "com.google.android.gms.games.service.START", + "com.google.android.gms.games.PLAY_GAMES_UPGRADE", + "com.google.android.gms.games.internal.connect.service.START", + + // help "com.google.android.gms.googlehelp.service.GoogleHelpService.START", - "com.google.android.gms.growth.service.START", - "com.google.android.gms.herrevad.services.LightweightNetworkQualityAndroidService.START", - "com.google.android.gms.icing.INDEX_SERVICE", - "com.google.android.gms.icing.LIGHTWEIGHT_INDEX_SERVICE", - "com.google.android.gms.identity.service.BIND", - "com.google.android.gms.inappreach.service.START", - "com.google.android.gms.instantapps.START", - "com.google.android.gms.kids.service.START", - "com.google.android.gms.languageprofile.service.START", - "com.google.android.gms.learning.internal.dynamitesupport.START", - "com.google.android.gms.learning.intservice.START", - "com.google.android.gms.learning.predictor.START", - "com.google.android.gms.learning.trainer.START", - "com.google.android.gms.learning.training.background.START", - "com.google.android.gms.location.places.GeoDataApi", - "com.google.android.gms.location.places.PlaceDetectionApi", - "com.google.android.gms.location.places.PlacesApi", + "com.google.android.gms.googlehelp.HELP", + "com.google.android.gms.feedback.internal.IFeedbackService", + + // cast + "com.google.android.gms.cast.firstparty.START", + "com.google.android.gms.cast.service.BIND_CAST_DEVICE_CONTROLLER_SERVICE", + + // fonts + "com.google.android.gms.fonts", + + // phenotype + "com.google.android.gms.phenotype.service.START", + + // location "com.google.android.gms.location.reporting.service.START", - "com.google.android.gms.location.settings.LOCATION_HISTORY", - "com.google.android.gms.location.settings.LOCATION_REPORTING_SETTINGS", - "com.google.android.gms.locationsharing.api.START", - "com.google.android.gms.locationsharingreporter.service.START", - "com.google.android.gms.lockbox.service.START", - "com.google.android.gms.matchstick.lighter.service.START", - "com.google.android.gms.mdm.services.DeviceManagerApiService.START", - "com.google.android.gms.mdm.services.START", - "com.google.android.gms.mdns.service.START", - "com.google.android.gms.measurement.START", - "com.google.android.gms.nearby.bootstrap.service.NearbyBootstrapService.START", - "com.google.android.gms.nearby.connection.service.START", - "com.google.android.gms.nearby.fastpair.START", - "com.google.android.gms.nearby.messages.service.NearbyMessagesService.START", - "com.google.android.gms.nearby.sharing.service.NearbySharingService.START", - "com.google.android.gms.nearby.sharing.START_SERVICE", - "com.google.android.gms.notifications.service.START", - "com.google.android.gms.ocr.service.internal.START", - "com.google.android.gms.ocr.service.START", + + // misc + "com.google.android.gms.gmscompliance.service.START", "com.google.android.gms.oss.licenses.service.START", - "com.google.android.gms.payse.service.BIND", - "com.google.android.gms.people.contactssync.service.START", - "com.google.android.gms.people.service.START", - "com.google.android.gms.phenotype.service.START", - "com.google.android.gms.photos.autobackup.service.START", - "com.google.android.gms.playlog.service.START", - "com.google.android.gms.plus.service.default.INTENT", - "com.google.android.gms.plus.service.image.INTENT", - "com.google.android.gms.plus.service.internal.START", - "com.google.android.gms.plus.service.START", + "com.google.android.gms.tapandpay.service.BIND", + "com.google.android.gms.measurement.START", + "com.google.android.gms.languageprofile.service.START", + "com.google.android.gms.clearcut.service.START", + "com.google.android.gms.icing.LIGHTWEIGHT_INDEX_SERVICE", + "com.google.android.gms.icing.INDEX_SERVICE", + "com.google.android.gms.mdm.services.START", + + // potoken "com.google.android.gms.potokens.service.START", - "com.google.android.gms.pseudonymous.service.START", - "com.google.android.gms.rcs.START", - "com.google.android.gms.reminders.service.START", - "com.google.android.gms.romanesco.MODULE_BACKUP_AGENT", - "com.google.android.gms.romanesco.service.START", + + // droidguard, safetynet + "com.google.android.gms.droidguard.service.START", "com.google.android.gms.safetynet.service.START", - "com.google.android.gms.scheduler.ACTION_PROXY_SCHEDULE", - "com.google.android.gms.search.service.SEARCH_AUTH_START", - "com.google.android.gms.semanticlocation.service.START_ODLH", - "com.google.android.gms.sesame.service.BIND", - "com.google.android.gms.settings.EXPOSURE_NOTIFICATION_SETTINGS", - "com.google.android.gms.setup.auth.SecondDeviceAuth.START", - "com.google.android.gms.signin.service.START", - "com.google.android.gms.smartdevice.d2d.SourceDeviceService.START", - "com.google.android.gms.smartdevice.d2d.TargetDeviceService.START", - "com.google.android.gms.smartdevice.directtransfer.SourceDirectTransferService.START", - "com.google.android.gms.smartdevice.directtransfer.TargetDirectTransferService.START", - "com.google.android.gms.smartdevice.postsetup.PostSetupService.START", - "com.google.android.gms.smartdevice.setup.accounts.AccountsService.START", - "com.google.android.gms.smartdevice.wifi.START_WIFI_HELPER_SERVICE", - "com.google.android.gms.social.location.activity.service.START", - "com.google.android.gms.speech.service.START", - "com.google.android.gms.statementservice.EXECUTE", - "com.google.android.gms.stats.ACTION_UPLOAD_DROPBOX_ENTRIES", - "com.google.android.gms.tapandpay.service.BIND", - "com.google.android.gms.telephonyspam.service.START", - "com.google.android.gms.testsupport.service.START", - "com.google.android.gms.thunderbird.service.START", - "com.google.android.gms.trustagent.BridgeApi.START", - "com.google.android.gms.trustagent.StateApi.START", - "com.google.android.gms.trustagent.trustlet.trustletmanagerservice.BIND", - "com.google.android.gms.trustlet.bluetooth.service.BIND", - "com.google.android.gms.trustlet.connectionlessble.service.BIND", - "com.google.android.gms.trustlet.face.service.BIND", - "com.google.android.gms.trustlet.nfc.service.BIND", - "com.google.android.gms.trustlet.onbody.service.BIND", - "com.google.android.gms.trustlet.place.service.BIND", - "com.google.android.gms.trustlet.voiceunlock.service.BIND", - "com.google.android.gms.udc.service.START", - "com.google.android.gms.update.START_API_SERVICE", - "com.google.android.gms.update.START_SERVICE", - "com.google.android.gms.update.START_SINGLE_USER_API_SERVICE", - "com.google.android.gms.update.START_TV_API_SERVICE", - "com.google.android.gms.usagereporting.service.START", - "com.google.android.gms.userlocation.service.START", - "com.google.android.gms.vehicle.cabin.service.START", - "com.google.android.gms.vehicle.climate.service.START", - "com.google.android.gms.vehicle.info.service.START", - "com.google.android.gms.wallet.service.BIND", - "com.google.android.gms.walletp2p.service.firstparty.BIND", - "com.google.android.gms.walletp2p.service.zeroparty.BIND", - "com.google.android.gms.wearable.BIND", - "com.google.android.gms.wearable.BIND_LISTENER", - "com.google.android.gms.wearable.DATA_CHANGED", - "com.google.android.gms.wearable.MESSAGE_RECEIVED", - "com.google.android.gms.wearable.NODE_CHANGED", - "com.google.android.gsf.action.GET_GLS", - "com.google.android.location.settings.LOCATION_REPORTING_SETTINGS", - "com.google.android.mdd.service.START", - "com.google.android.mdh.service.listener.START", - "com.google.android.mdh.service.START", - "com.google.android.mobstore.service.START", - "com.google.firebase.auth.api.gms.service.START", - "com.google.firebase.dynamiclinks.service.START", - "com.google.iid.TOKEN_REQUEST", - "com.google.android.gms.location.places.ui.PICK_PLACE", ) /** * All content provider authorities. */ val AUTHORITIES = setOf( + // gsf + "com.google.android.gsf.gservices", + "com.google.settings", + + // auth "com.google.android.gms.auth.accounts", - "com.google.android.gms.chimera", + + // fonts "com.google.android.gms.fonts", + + // phenotype "com.google.android.gms.phenotype", - "com.google.android.gsf.gservices", - "com.google.settings", ) }