commit 167f93feca2d1993fc3cbf3e9f49cb14369c3632 parent 3c09bf20c9bac7a214f4495a39adcb159dcba0f4 Author: rhunk <101876869+rhunk@users.noreply.github.com> Date: Sat, 9 Sep 2023 09:21:32 +0200 feat(snapchat_plus): hidden sc+ features (experimental) Diffstat:
3 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/core/src/main/assets/lang/en_US.json b/core/src/main/assets/lang/en_US.json @@ -498,6 +498,10 @@ "add_friend_source_spoof": { "name": "Add Friend Source Spoof", "description": "Spoofs the source of a Friend Request" + }, + "hidden_snapchat_plus_features": { + "name": "Hidden Snapchat Plus Features", + "description": "Enables unreleased/beta Snapchat Plus features\nMight not work on older Snapchat versions" } } } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/config/impl/Experimental.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/config/impl/Experimental.kt @@ -12,6 +12,7 @@ class Experimental : ConfigContainer() { val meoPasscodeBypass = boolean("meo_passcode_bypass") val unlimitedMultiSnap = boolean("unlimited_multi_snap") { addNotices(FeatureNotice.BAN_RISK)} val noFriendScoreDelay = boolean("no_friend_score_delay") + val hiddenSnapchatPlusFeatures = boolean("hidden_snapchat_plus_features") { addNotices(FeatureNotice.BAN_RISK, FeatureNotice.UNSTABLE) } val addFriendSourceSpoof = unique("add_friend_source_spoof", "added_by_username", "added_by_mention", diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/SnapchatPlus.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/SnapchatPlus.kt @@ -4,12 +4,13 @@ import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.FeatureLoadParams import me.rhunk.snapenhance.hook.HookStage import me.rhunk.snapenhance.hook.Hooker +import me.rhunk.snapenhance.hook.hook -class SnapchatPlus: Feature("SnapchatPlus", loadParams = FeatureLoadParams.ACTIVITY_CREATE_ASYNC) { +class SnapchatPlus: Feature("SnapchatPlus", loadParams = FeatureLoadParams.INIT_SYNC) { private val originalSubscriptionTime = (System.currentTimeMillis() - 7776000000L) private val expirationTimeMillis = (System.currentTimeMillis() + 15552000000L) - override fun asyncOnActivityCreate() { + override fun init() { if (!context.config.global.snapchatPlus.get()) return val subscriptionInfoClass = context.mappings.getMappedClass("SubscriptionInfoClass") @@ -24,5 +25,21 @@ class SnapchatPlus: Feature("SnapchatPlus", loadParams = FeatureLoadParams.ACTIV param.setArg(2, originalSubscriptionTime) param.setArg(3, expirationTimeMillis) } + + if (context.config.experimental.hiddenSnapchatPlusFeatures.get()) { + findClass("com.snap.plus.FeatureCatalog").methods.last { + !it.name.contains("init") && + it.parameterTypes.isNotEmpty() && + it.parameterTypes[0].name != "java.lang.Boolean" + }.hook(HookStage.BEFORE) { param -> + val instance = param.thisObject<Any>() + val firstArg = param.args()[0] + + instance::class.java.declaredFields.filter { it.type == firstArg::class.java }.forEach { + it.isAccessible = true + it.set(instance, firstArg) + } + } + } } } \ No newline at end of file