diff --git a/.idea/.name b/.idea/.name index 8e6e635..e7c85bc 100644 --- a/.idea/.name +++ b/.idea/.name @@ -1 +1 @@ -VendettaXposed \ No newline at end of file +PyoncordXposed \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f959782..e4a334f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -5,11 +5,11 @@ plugins { } android { - namespace = "dev.beefers.vendetta.xposed" + namespace = "com.pyoncord.xposed" compileSdk = 33 defaultConfig { - applicationId = "dev.beefers.vendetta.xposed" + applicationId = "com.pyoncord.xposed" minSdk = 24 targetSdk = 33 versionCode = 1 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce2aee5..ca939d8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ android:value="true" /> + android:value="An Xposed module to inject Pyoncord, a mod for Discord's mobile apps." /> diff --git a/app/src/main/assets/js/identity.js b/app/src/main/assets/js/identity.js index 4d908a2..8f18304 100644 --- a/app/src/main/assets/js/identity.js +++ b/app/src/main/assets/js/identity.js @@ -1,4 +1,3 @@ -globalThis.__vendetta_loader = { - name: "VendettaXposed", - features: {}, +globalThis.__pyoncord_loader_payload = { + name: "PyoncordXposed", } \ No newline at end of file diff --git a/app/src/main/assets/xposed_init b/app/src/main/assets/xposed_init index f45efc1..3006973 100644 --- a/app/src/main/assets/xposed_init +++ b/app/src/main/assets/xposed_init @@ -1 +1 @@ -dev.beefers.vendetta.xposed.Main \ No newline at end of file +com.pyoncord.xposed.Main \ No newline at end of file diff --git a/app/src/main/kotlin/dev/beefers/vendetta/xposed/Main.kt b/app/src/main/kotlin/dev/beefers/vendetta/xposed/Main.kt index f031502..0be8531 100644 --- a/app/src/main/kotlin/dev/beefers/vendetta/xposed/Main.kt +++ b/app/src/main/kotlin/dev/beefers/vendetta/xposed/Main.kt @@ -1,4 +1,4 @@ -package dev.beefers.vendetta.xposed +package com.pyoncord.xposed import java.io.File import java.lang.Exception @@ -28,23 +28,26 @@ class Main : IXposedHookZygoteInit, IXposedHookLoadPackage { } // Hook function responsible for loading Discord's package - // Also, Kotlin has `with`? How does this language have literally everything?! override fun handleLoadPackage(param: XC_LoadPackage.LoadPackageParam) = with(param) { - // Stop executing when we aren't in Discord's React Native context - val catalystInstance = try { classLoader.loadClass("com.facebook.react.bridge.CatalystInstanceImpl") } catch(e: ClassNotFoundException) { return } + val catalystInstance = try { + classLoader.loadClass("com.facebook.react.bridge.CatalystInstanceImpl") + } catch (e: ClassNotFoundException) { + // Package is not the target app, return + return@with + } val cache = File(appInfo.dataDir, "cache").also { it.mkdirs() } - val bundle = File(cache, "vendetta.js") - val etag = File(cache, "vendetta_etag.txt") + val bundle = File(cache, "pyoncord.js") + val etag = File(cache, "pyoncord_etag.txt") val scope = MainScope() val httpJob = scope.async(Dispatchers.IO) { try { val client = HttpClient(CIO) { install(HttpTimeout) { requestTimeoutMillis = 1000 } - install(UserAgent) { agent = "VendettaXposed" } + install(UserAgent) { agent = "PyoncordXposed" } } - val response: HttpResponse = client.get("https://raw.githubusercontent.com/vendetta-mod/builds/master/vendetta.js") { + val response: HttpResponse = client.get("https://raw.githubusercontent.com/pyoncord/pyoncord/builds/pyoncord.js") { headers { if (etag.exists() && bundle.exists()) append(HttpHeaders.IfNoneMatch, etag.readText()) } } @@ -55,7 +58,7 @@ class Main : IXposedHookZygoteInit, IXposedHookLoadPackage { return@async } catch (e: Exception) { - Log.e("Vendetta", "Failed to download Vendetta") + Log.e("Pyoncord", "Failed to download pyoncord.js bundle") } } @@ -66,9 +69,7 @@ class Main : IXposedHookZygoteInit, IXposedHookLoadPackage { val hook = object : XC_MethodHook() { override fun beforeHookedMethod(param: MethodHookParam) { - Log.d("Vendetta", "Exfiltrating Metro modules") XposedBridge.invokeOriginalMethod(loadScriptFromAssets,param.thisObject, arrayOf(resources.assets, "assets://js/modules.js", true)) - Log.d("Vendetta", "Executing identity snippet") XposedBridge.invokeOriginalMethod(loadScriptFromAssets, param.thisObject, arrayOf(resources.assets, "assets://js/identity.js", true)) } @@ -76,7 +77,7 @@ class Main : IXposedHookZygoteInit, IXposedHookLoadPackage { scope.launch(scope.coroutineContext) { try { httpJob.await() - Log.d("Vendetta", "Executing Vendetta") + Log.d("Pyoncord", "Executing Pyoncord") XposedBridge.invokeOriginalMethod(loadScriptFromFile, param.thisObject, arrayOf(bundle.absolutePath, bundle.absolutePath, param.args[2])) } catch (_: Exception) {} } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ed0f020..261dd6d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - VendettaXposed + PyoncordXposed \ No newline at end of file diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/settings.gradle.kts b/settings.gradle.kts index 868289d..c288f19 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,2 +1,2 @@ -rootProject.name = "VendettaXposed" +rootProject.name = "PyoncordXposed" include(":app")