feat: meo passcode bypass
This commit is contained in:
@@ -53,7 +53,8 @@
|
||||
"block_ads": "Block Ads",
|
||||
"streak_expiration_info": "Show Streak Expiration Info",
|
||||
"new_map_ui": "New Map UI",
|
||||
"use_download_manager": "Use Android Download Manager"
|
||||
"use_download_manager": "Use Android Download Manager",
|
||||
"meo_passcode_bypass": "My Eyes Only Passcode Bypass"
|
||||
},
|
||||
|
||||
"option": {
|
||||
|
||||
@@ -209,6 +209,12 @@ enum class ConfigProperty(
|
||||
"description.use_download_manager",
|
||||
ConfigCategory.EXPERIMENTAL,
|
||||
ConfigStateValue(false)
|
||||
),
|
||||
MEO_PASSCODE_BYPASS(
|
||||
"property.meo_passcode_bypass",
|
||||
"description.meo_passcode_bypass",
|
||||
ConfigCategory.EXPERIMENTAL,
|
||||
ConfigStateValue(false)
|
||||
);
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package me.rhunk.snapenhance.features.impl
|
||||
|
||||
import me.rhunk.snapenhance.config.ConfigProperty
|
||||
import me.rhunk.snapenhance.features.Feature
|
||||
import me.rhunk.snapenhance.features.FeatureLoadParams
|
||||
import me.rhunk.snapenhance.hook.HookStage
|
||||
import me.rhunk.snapenhance.hook.Hooker
|
||||
|
||||
class MeoPasscodeBypass : Feature("Meo Passcode Bypass", loadParams = FeatureLoadParams.ACTIVITY_CREATE_ASYNC) {
|
||||
override fun asyncOnActivityCreate() {
|
||||
Hooker.hook(
|
||||
context.mappings.getMappedClass("BCryptClass"),
|
||||
context.mappings.getMappedValue("BCryptClassHashMethod"),
|
||||
HookStage.BEFORE,
|
||||
{ context.config.bool(ConfigProperty.MEO_PASSCODE_BYPASS) },
|
||||
) { param ->
|
||||
//set the hash to the result of the method
|
||||
param.setResult(param.arg(1))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,14 +5,15 @@ import me.rhunk.snapenhance.ModContext
|
||||
import me.rhunk.snapenhance.features.Feature
|
||||
import me.rhunk.snapenhance.features.FeatureLoadParams
|
||||
import me.rhunk.snapenhance.features.impl.ConfigEnumKeys
|
||||
import me.rhunk.snapenhance.features.impl.MeoPasscodeBypass
|
||||
import me.rhunk.snapenhance.features.impl.Messaging
|
||||
import me.rhunk.snapenhance.features.impl.downloader.AntiAutoDownload
|
||||
import me.rhunk.snapenhance.features.impl.downloader.MediaDownloader
|
||||
import me.rhunk.snapenhance.features.impl.extras.AntiAutoSave
|
||||
import me.rhunk.snapenhance.features.impl.extras.AutoSave
|
||||
import me.rhunk.snapenhance.features.impl.extras.MediaQualityLevelOverride
|
||||
import me.rhunk.snapenhance.features.impl.extras.DisableVideoLengthRestriction
|
||||
import me.rhunk.snapenhance.features.impl.extras.ExternalMediaAsSnap
|
||||
import me.rhunk.snapenhance.features.impl.extras.MediaQualityLevelOverride
|
||||
import me.rhunk.snapenhance.features.impl.extras.Notifications
|
||||
import me.rhunk.snapenhance.features.impl.extras.SnapchatPlus
|
||||
import me.rhunk.snapenhance.features.impl.extras.UnlimitedSnapViewTime
|
||||
@@ -70,6 +71,7 @@ class FeatureManager(private val context: ModContext) : Manager {
|
||||
register(UnlimitedSnapViewTime::class)
|
||||
register(DisableVideoLengthRestriction::class)
|
||||
register(MediaQualityLevelOverride::class)
|
||||
register(MeoPasscodeBypass::class)
|
||||
|
||||
initializeFeatures()
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import me.rhunk.snapenhance.ModContext
|
||||
import me.rhunk.snapenhance.bridge.common.impl.file.BridgeFileType
|
||||
import me.rhunk.snapenhance.manager.Manager
|
||||
import me.rhunk.snapenhance.mapping.Mapper
|
||||
import me.rhunk.snapenhance.mapping.impl.BCryptClassMapper
|
||||
import me.rhunk.snapenhance.mapping.impl.CallbackMapper
|
||||
import me.rhunk.snapenhance.mapping.impl.EnumMapper
|
||||
import me.rhunk.snapenhance.mapping.impl.GridMediaItemMapper
|
||||
@@ -29,6 +30,7 @@ class MappingManager(private val context: ModContext) : Manager {
|
||||
add(OperaPageViewControllerMapper())
|
||||
add(PlusSubscriptionMapper())
|
||||
add(GridMediaItemMapper())
|
||||
add(BCryptClassMapper())
|
||||
}
|
||||
|
||||
private val mappings = ConcurrentHashMap<String, Any>()
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package me.rhunk.snapenhance.mapping.impl
|
||||
|
||||
import me.rhunk.snapenhance.mapping.Mapper
|
||||
import java.lang.reflect.Modifier
|
||||
|
||||
class BCryptClassMapper : Mapper() {
|
||||
override fun useClasses(
|
||||
classLoader: ClassLoader,
|
||||
classes: List<Class<*>>,
|
||||
mappings: MutableMap<String, Any>
|
||||
) {
|
||||
for (clazz in classes) {
|
||||
if (!Modifier.isFinal(clazz.modifiers)) continue
|
||||
clazz.fields.firstOrNull { it.type == IntArray::class.java && Modifier.isStatic(it.modifiers)}?.let { field ->
|
||||
val fieldData = field.get(null)
|
||||
if (fieldData !is IntArray) return@let
|
||||
if (fieldData.size != 18 || fieldData[0] != 608135816) return@let
|
||||
mappings["BCryptClass"] = clazz.name
|
||||
mappings["BCryptClassHashMethod"] = clazz.methods.first {
|
||||
it.parameterTypes.size == 2 && it.returnType == String::class.java && it.parameterTypes[0] == String::class.java && it.parameterTypes[1] == String::class.java
|
||||
}.name
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user