feat(snapchat_plus): hidden sc+ features (experimental)

This commit is contained in:
rhunk
2023-09-09 09:21:32 +02:00
parent 3c09bf20c9
commit 167f93feca
3 changed files with 24 additions and 2 deletions

View File

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

View File

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

View File

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