From 0cffbfdbd1caf1756c7b1794af6f8f34ba53ce87 Mon Sep 17 00:00:00 2001 From: R0rt1z2 Date: Thu, 23 Jan 2025 14:33:05 +0100 Subject: [PATCH] GrindrPlus: Initial update for 25.0.0 Change-Id: I0094e26a19b6afa72dcfb59b6efc8ca8210264e4 --- app/build.gradle.kts | 2 +- app/src/main/java/com/grindrplus/GrindrPlus.kt | 6 +++--- .../java/com/grindrplus/core/http/Interceptor.kt | 6 +++--- app/src/main/java/com/grindrplus/hooks/AntiBlock.kt | 6 +++--- .../main/java/com/grindrplus/hooks/ChatTerminal.kt | 2 +- .../java/com/grindrplus/hooks/DisableAnalytics.kt | 2 +- .../java/com/grindrplus/hooks/DisableBoosting.kt | 6 +++--- .../main/java/com/grindrplus/hooks/DisableUpdates.kt | 2 +- app/src/main/java/com/grindrplus/hooks/EmptyCalls.kt | 2 +- .../java/com/grindrplus/hooks/EnableUnlimited.kt | 12 ++++++------ .../java/com/grindrplus/hooks/FeatureGranting.kt | 2 +- .../java/com/grindrplus/hooks/LocalSavedPhrases.kt | 4 ++-- .../java/com/grindrplus/hooks/OnlineIndicator.kt | 2 +- .../java/com/grindrplus/hooks/PersistentIncognito.kt | 2 +- app/src/main/java/com/grindrplus/hooks/QuickBlock.kt | 4 ++-- .../java/com/grindrplus/hooks/ReverseRadarTabs.kt | 8 ++++---- .../java/com/grindrplus/hooks/UnlimitedAlbums.kt | 2 +- .../main/java/com/grindrplus/utils/RetrofitUtils.kt | 4 ++-- version.json | 4 ++-- 19 files changed, 39 insertions(+), 39 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ba78a0f..5b93d82 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } android { - val grindrVersions = listOf("24.19.0") + val grindrVersions = listOf("25.0.0") namespace = "com.grindrplus" compileSdk = 34 diff --git a/app/src/main/java/com/grindrplus/GrindrPlus.kt b/app/src/main/java/com/grindrplus/GrindrPlus.kt index 998e0e5..c18bd65 100644 --- a/app/src/main/java/com/grindrplus/GrindrPlus.kt +++ b/app/src/main/java/com/grindrplus/GrindrPlus.kt @@ -63,9 +63,9 @@ object GrindrPlus { var currentActivity: Activity? = null private set - private val userAgent = "a5.t" - private val userSession = "com.grindrapp.android.storage.b" - private val deviceInfo = "j3.t" + private val userAgent = "l5.v" + private val userSession = "V8.T" + private val deviceInfo = "u3.t" private val profileRepo = "com.grindrapp.android.persistence.repository.ProfileRepo" private val ioScope = CoroutineScope(Dispatchers.IO) diff --git a/app/src/main/java/com/grindrplus/core/http/Interceptor.kt b/app/src/main/java/com/grindrplus/core/http/Interceptor.kt index 5e03ee8..a038234 100644 --- a/app/src/main/java/com/grindrplus/core/http/Interceptor.kt +++ b/app/src/main/java/com/grindrplus/core/http/Interceptor.kt @@ -17,10 +17,10 @@ class Interceptor( Interceptor { private fun modifyRequest(originalRequest: Request): Request { try { - val isLoggedIn = invokeMethodSafe(userSession, "p") as Boolean - val authTokenFlow = invokeMethodSafe(userSession, "t") + val isLoggedIn = invokeMethodSafe(userSession, "o") as Boolean + val authTokenFlow = invokeMethodSafe(userSession, "s") val authToken = invokeMethodSafe(authTokenFlow, "getValue") as String - val roles = invokeMethodSafe(userSession, "y") as String + val roles = invokeMethodSafe(userSession, "x") as String val userAgent = invokeMethodSafe(userAgent, "a") as String val deviceInfoLazy = getFieldSafe(deviceInfo, "c") as Any val lDeviceInfo = invokeMethodSafe(deviceInfoLazy, "getValue") as String diff --git a/app/src/main/java/com/grindrplus/hooks/AntiBlock.kt b/app/src/main/java/com/grindrplus/hooks/AntiBlock.kt index 427ee91..7a6ebba 100644 --- a/app/src/main/java/com/grindrplus/hooks/AntiBlock.kt +++ b/app/src/main/java/com/grindrplus/hooks/AntiBlock.kt @@ -17,7 +17,7 @@ class AntiBlock : Hook( "Notifies you when someone blocks or unblocks you" ) { private var myProfileId: Long = 0 - private val inboxFragmentV2DeleteConversations = "na.b0\$a" + private val inboxFragmentV2DeleteConversations = "Ma.v0\$a" override fun init() { findClass(inboxFragmentV2DeleteConversations) @@ -34,7 +34,7 @@ class AntiBlock : Hook( GrindrPlus.blockCaller = "" } - findClass("k4.c").hook("b", HookStage.BEFORE) { param -> + findClass("v4.c").hook("b", HookStage.BEFORE) { param -> if (!GrindrPlus.shouldTriggerAntiblock) { val whitelist = listOf( "inboxFragmentV2DeleteConversations", @@ -46,7 +46,7 @@ class AntiBlock : Hook( } else { if (myProfileId == 0L) { myProfileId = (getObjectField(instanceManager - .getInstance("com.grindrapp.android.storage.b"), + .getInstance("V8.T"), "p") as String).toLong() } diff --git a/app/src/main/java/com/grindrplus/hooks/ChatTerminal.kt b/app/src/main/java/com/grindrplus/hooks/ChatTerminal.kt index 45ddcf5..178011b 100644 --- a/app/src/main/java/com/grindrplus/hooks/ChatTerminal.kt +++ b/app/src/main/java/com/grindrplus/hooks/ChatTerminal.kt @@ -12,7 +12,7 @@ class ChatTerminal : Hook( "Chat terminal", "Create a chat terminal to execute commands" ) { - private val chatMessageHandler = "r4.b" + private val chatMessageHandler = "C4.b" override fun init() { findClass(chatMessageHandler).hook("m", HookStage.BEFORE) { param -> diff --git a/app/src/main/java/com/grindrplus/hooks/DisableAnalytics.kt b/app/src/main/java/com/grindrplus/hooks/DisableAnalytics.kt index 75bcedc..3e8c2c3 100644 --- a/app/src/main/java/com/grindrplus/hooks/DisableAnalytics.kt +++ b/app/src/main/java/com/grindrplus/hooks/DisableAnalytics.kt @@ -9,7 +9,7 @@ class DisableAnalytics : Hook( "Disable analytics", "Disable Grindr analytics (data collection)" ) { - private val analyticsRestService = "K4.a" + private val analyticsRestService = "V4.a" override fun init() { val analyticsRestServiceClass = findClass(analyticsRestService) diff --git a/app/src/main/java/com/grindrplus/hooks/DisableBoosting.kt b/app/src/main/java/com/grindrplus/hooks/DisableBoosting.kt index a94ced1..4de313d 100644 --- a/app/src/main/java/com/grindrplus/hooks/DisableBoosting.kt +++ b/app/src/main/java/com/grindrplus/hooks/DisableBoosting.kt @@ -11,8 +11,8 @@ class DisableBoosting : Hook( "Disable boosting", "Get rid of all upsells related to boosting" ) { - private val drawerProfileUiState = "ca.e\$a" - private val radarUiModel = "X7.a\$a" + private val drawerProfileUiState = "Ba.e\$a" + private val radarUiModel = "n8.a\$a" private val fabUiModel = "com.grindrapp.android.boost2.presentation.model.FabUIModel" private val boostStateClass = "com.grindrapp.android.ui.drawer.model.MicrosDrawerItemState\$Unavailable" @@ -47,7 +47,7 @@ class DisableBoosting : Hook( // the two anonymous functions that get called to invoke the annoying tooltip // respectively: showRadarTooltip. and showTapsAndViewedMePopup - listOf("ma.o0", "ma.q0", "ma.r0", "ma.p0").forEach { + listOf("La.n0", "La.p0", "La.q0", "La.o0").forEach { findClass(it).hook("invoke", HookStage.BEFORE) { param -> param.setResult(null) } diff --git a/app/src/main/java/com/grindrplus/hooks/DisableUpdates.kt b/app/src/main/java/com/grindrplus/hooks/DisableUpdates.kt index 42eeca8..0dd0a19 100644 --- a/app/src/main/java/com/grindrplus/hooks/DisableUpdates.kt +++ b/app/src/main/java/com/grindrplus/hooks/DisableUpdates.kt @@ -23,7 +23,7 @@ class DisableUpdates : Hook( "https://raw.githubusercontent.com/R0rt1z2/GrindrPlus/master/version.json" private val appUpdateInfo = "com.google.android.play.core.appupdate.AppUpdateInfo" private val appUpdateZzm = "com.google.android.play.core.appupdate.zzm" - private val appUpgradeManager = "e6.j" + private val appUpgradeManager = "s6.j" private val appConfiguration = "com.grindrapp.android.base.config.AppConfiguration" private var versionCode: Int = 0 private var versionName: String = "" diff --git a/app/src/main/java/com/grindrplus/hooks/EmptyCalls.kt b/app/src/main/java/com/grindrplus/hooks/EmptyCalls.kt index 09433bb..8e91e35 100644 --- a/app/src/main/java/com/grindrplus/hooks/EmptyCalls.kt +++ b/app/src/main/java/com/grindrplus/hooks/EmptyCalls.kt @@ -9,7 +9,7 @@ class EmptyCalls : Hook( "Video calls", "Allow video calls on empty chats" ) { - private val individualChatNavViewModel = "D4.V" + private val individualChatNavViewModel = "O4.W" private val createVideoCallResponse = "com.grindrapp.android.chat.api.model.CreateVideoCallResponse" private val videoCallInfoResponse = "com.grindrapp.android.chat.api.model.VideoCallInfoResponse" diff --git a/app/src/main/java/com/grindrplus/hooks/EnableUnlimited.kt b/app/src/main/java/com/grindrplus/hooks/EnableUnlimited.kt index 73fd91c..074fcf8 100644 --- a/app/src/main/java/com/grindrplus/hooks/EnableUnlimited.kt +++ b/app/src/main/java/com/grindrplus/hooks/EnableUnlimited.kt @@ -9,22 +9,22 @@ class EnableUnlimited : Hook( "Enable unlimited", "Enable Grindr Unlimited features" ) { - private val userSession = "com.grindrapp.android.storage.b" + private val userSession = "V8.T" private val subscribeToInterstitialsList = listOf( - "x4.y\$a" // Chat ($1) + "I4.d0\$a" // Chat ($1) ) override fun init() { val userSessionClass = findClass(userSession) userSessionClass.hook( // hasFeature() - "h", HookStage.BEFORE // done + "v", HookStage.BEFORE // done ) { param -> val disallowedFeatures = setOf("DisableScreenshot") param.setResult(param.arg(0, String::class.java) !in disallowedFeatures) } userSessionClass.hook( // isNoXtraUpsell() - "l", HookStage.BEFORE + "k", HookStage.BEFORE ) { param -> param.setResult(true) } @@ -36,13 +36,13 @@ class EnableUnlimited : Hook( } userSessionClass.hook( // isFree() - "x", HookStage.BEFORE + "w", HookStage.BEFORE ) { param -> param.setResult(false) } userSessionClass.hook( // isFreeXtra() - "u", HookStage.BEFORE + "t", HookStage.BEFORE ) { param -> param.setResult(false) } diff --git a/app/src/main/java/com/grindrplus/hooks/FeatureGranting.kt b/app/src/main/java/com/grindrplus/hooks/FeatureGranting.kt index b625628..a95c579 100644 --- a/app/src/main/java/com/grindrplus/hooks/FeatureGranting.kt +++ b/app/src/main/java/com/grindrplus/hooks/FeatureGranting.kt @@ -13,7 +13,7 @@ class FeatureGranting : Hook( "Feature granting", "Grant all Grindr features" ) { - private val featureFlags = "A5.g" + private val featureFlags = "M5.h" private val upsellsV8Model = "com.grindrapp.android.model.UpsellsV8" private val insertsModel = "com.grindrapp.android.model.Inserts" private val settingDistanceVisibilityViewModel = diff --git a/app/src/main/java/com/grindrplus/hooks/LocalSavedPhrases.kt b/app/src/main/java/com/grindrplus/hooks/LocalSavedPhrases.kt index 317aec4..35bfc38 100644 --- a/app/src/main/java/com/grindrplus/hooks/LocalSavedPhrases.kt +++ b/app/src/main/java/com/grindrplus/hooks/LocalSavedPhrases.kt @@ -15,8 +15,8 @@ class LocalSavedPhrases : Hook( "Local saved phrases", "Save unlimited phrases locally" ) { - private val phrasesRestService = "v3.k" - private val createSuccessResult = "L6.a\$b" + private val phrasesRestService = "G3.k" + private val createSuccessResult = "Z6.a\$b" private val retrofit = "retrofit2.Retrofit" private val chatRestService = "com.grindrapp.android.chat.data.datasource.api.service.ChatRestService" private val addSavedPhraseResponse = diff --git a/app/src/main/java/com/grindrplus/hooks/OnlineIndicator.kt b/app/src/main/java/com/grindrplus/hooks/OnlineIndicator.kt index c0a79b7..4d30f76 100644 --- a/app/src/main/java/com/grindrplus/hooks/OnlineIndicator.kt +++ b/app/src/main/java/com/grindrplus/hooks/OnlineIndicator.kt @@ -10,7 +10,7 @@ class OnlineIndicator : Hook( "Online indicator", "Customize online indicator duration" ) { - val utils = "Za.c0" + val utils = "zb.b0" override fun init() { findClass(utils) // shouldShowOnlineIndicator() diff --git a/app/src/main/java/com/grindrplus/hooks/PersistentIncognito.kt b/app/src/main/java/com/grindrplus/hooks/PersistentIncognito.kt index f9e5ebc..f389036 100644 --- a/app/src/main/java/com/grindrplus/hooks/PersistentIncognito.kt +++ b/app/src/main/java/com/grindrplus/hooks/PersistentIncognito.kt @@ -22,7 +22,7 @@ class PersistentIncognito : Hook( "Persistent incognito", "Makes incognito mode persistent" ) { - private val meRestService = "v3.q" + private val meRestService = "G3.q" private val grindrSettings = "com.grindrapp.android.model.GrindrSettings" private val drawerProfileFragment = "com.grindrapp.android.ui.drawer.DrawerProfileFragment" diff --git a/app/src/main/java/com/grindrplus/hooks/QuickBlock.kt b/app/src/main/java/com/grindrplus/hooks/QuickBlock.kt index 881846f..51d6e80 100644 --- a/app/src/main/java/com/grindrplus/hooks/QuickBlock.kt +++ b/app/src/main/java/com/grindrplus/hooks/QuickBlock.kt @@ -14,10 +14,10 @@ class QuickBlock : Hook( "Quick block", "Ability to block users quickly" ) { - private val blockViewModel = "S9.b" + private val blockViewModel = "qa.b" private val profileViewHolder = "com.grindrapp.android.ui.profileV2.g" override fun init() { - findClass(profileViewHolder).hook("F", HookStage.AFTER) { param -> + findClass(profileViewHolder).hook("G", HookStage.AFTER) { param -> val arg0 = param.arg(0) as Any val profileViewState = param.args().getOrNull(1) ?: return@hook val profileId = getObjectField(profileViewState, "profileId") as String diff --git a/app/src/main/java/com/grindrplus/hooks/ReverseRadarTabs.kt b/app/src/main/java/com/grindrplus/hooks/ReverseRadarTabs.kt index cf7e08e..242464f 100644 --- a/app/src/main/java/com/grindrplus/hooks/ReverseRadarTabs.kt +++ b/app/src/main/java/com/grindrplus/hooks/ReverseRadarTabs.kt @@ -25,7 +25,7 @@ class ReverseRadarTabs : Hook( private inline fun getJavaClass() = T::class.java - private val radarTabs = "W7.c" + private val radarTabs = "m8.b" private val radarFragment = "com.grindrapp.android.radar.presentation.ui.RadarFragment" override fun init() { @@ -73,7 +73,7 @@ class ReverseRadarTabs : Hook( //This LiveData observer consumes the integer values from a flow and makes the ViewPager scroll to that position //This is used to make the ViewPager scroll to the taps page upon clicking such notification. //However, this is based on the ordinal values again, so we have to reverse the values, too. - findClass("K9.H0") + findClass("Ma.B") .hook("onChanged", HookStage.BEFORE) { param -> //Check whether this observer is responsible for handling the ViewPager position if (getIntField(param.thisObject(), "b") != 1) return@hook @@ -84,9 +84,9 @@ class ReverseRadarTabs : Hook( //The modified LiveData observer will no longer scroll to the first position when receiving a value 0. //In order to still show the new first tab (TapsFragment) by default, we need to set the initial value to the last index, //so that the LiveData observer reverts it back to 0. - findClass("ma.t0") + findClass("La.s0") .hookConstructor(HookStage.AFTER) { param -> - val stateFlow = getObjectField(param.thisObject(), "I0") + val stateFlow = getObjectField(param.thisObject(), "J0") //Set initial position to the last page, so that the onChanged hook of the LiveData observer reverts it to the new first page callMethod(stateFlow, "setValue", Integer.valueOf(radarTabs.size - 1)) } diff --git a/app/src/main/java/com/grindrplus/hooks/UnlimitedAlbums.kt b/app/src/main/java/com/grindrplus/hooks/UnlimitedAlbums.kt index 500dd3e..db80554 100644 --- a/app/src/main/java/com/grindrplus/hooks/UnlimitedAlbums.kt +++ b/app/src/main/java/com/grindrplus/hooks/UnlimitedAlbums.kt @@ -28,7 +28,7 @@ class UnlimitedAlbums : Hook( "Unlimited albums", "Allow to be able to view unlimited albums" ) { - private val albumsService = "w3.a" + private val albumsService = "H3.a" override fun init() { val albumsService = findClass(albumsService) diff --git a/app/src/main/java/com/grindrplus/utils/RetrofitUtils.kt b/app/src/main/java/com/grindrplus/utils/RetrofitUtils.kt index e9dcdc2..f5ab8f0 100644 --- a/app/src/main/java/com/grindrplus/utils/RetrofitUtils.kt +++ b/app/src/main/java/com/grindrplus/utils/RetrofitUtils.kt @@ -8,8 +8,8 @@ import java.lang.reflect.Method import java.lang.reflect.Proxy object RetrofitUtils { - const val FAIL_CLASS_NAME = "L6.a\$a" - const val SUCCESS_CLASS_NAME = "L6.a\$b" + const val FAIL_CLASS_NAME = "Z6.a\$a" + const val SUCCESS_CLASS_NAME = "Z6.a\$b" const val SUCCESS_VALUE_NAME = "a" fun findPOSTMethod(clazz: Class<*>, value: String): Method? { diff --git a/version.json b/version.json index 0bf88c7..5e26b6b 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "versionName": "24.19.0", - "versionCode": 132462 + "versionName": "25.0.0", + "versionCode": 133286 }