diff --git a/README.md b/README.md index 2e9b435..365e753 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@
- + + # 冰社 / IceCore [![LSPosed](https://img.shields.io/badge/LSPosed-Module-blue.svg)](https://github.com/bingqiu456/IceCore) @@ -7,12 +8,14 @@ [![QQ_group](https://img.shields.io/badge/QQ%E7%BE%A4-855183768-orange?style=flat-square)](https://qm.qq.com/q/hnbnj43qwM) -✨一个集成了各种好玩功能的Xposed模块,支持获取vip,去除广告,等功能 ✨ +✨**一个集成了各种好玩功能的Xposed模块,支持获取vip,去除广告,等功能** ✨
**🌈冰社2.0 大版本更新来了,这次更新内容较多,大家可以下载体验一下🌈** +🎉**编写模块不易 有能力的大佬不如[捐赠](https://afdian.com/a/bingyueblog)一下**🎉 + ## ✨如何使用 点击[这里](https://github.com/Xposed-Modules-Repo/me.bingyue.IceCore/releases),下载**最新版本** @@ -65,11 +68,14 @@ | 倒数日 | 🟢 | 破解了内购,点击购买后退出即可获得`vip` | 1.22.0\ | | 小黑屋 | 🟢 | 破解了使用激活码激活,随便输入一个支付宝订单号即可 | 1.9.18c | | fake_location | 🟢 | 解锁`vip` | 1.3.5 BETA | +| fake_location | 🟢 | 解锁vip,去除更新,去除云控 | 1.3.2.2 | | 堆糖 | 🟢 | 可以自由使用vip功能 | 8.42.3 | | vmos pro | 🟢 | 去登录 | 3.0.7 | | 番茄小说 | 🟢 | 去除广告 | 6.4.5.32 | | 小熊录屏 | 🟢 | 可以使用vip功能 | 2.4.4 | -| 不背单词 | 🟢 | 终生大会员 | 8.0 | +| 不背单词 | 🟢 | 终生大会员 | 5.0-5.5.6 | +| 潮汐 | 🟢 | 解锁`vip`功能,大部分功能有服务器校验 | 4.2.4 | +| 无痛单词 | 🟢 | 解锁终生vip | 1.18.0 | | Autocmd | 🟢 | 解锁专业版 | 1.1.9 | | 一木记账 | 🟢 | `vip`功能解锁 | 5.8.9 | | nfc tool | 🟢 | 可以使用vip功能 | 2.6.5 | diff --git a/app/build.gradle b/app/build.gradle index d705d3d..3c6336d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "me.bingyue.IceCore" minSdkVersion 27 targetSdkVersion 33 - versionCode 3 - versionName "2.0.1" + versionCode 4 + versionName "2.0.2" // ndk { // abiFilters "x86_64","x86","armeabi-v7a","arm64-v8a" // } diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 3376702..6f2b92a 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 65cca7a..a03dfb9 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 3, - "versionName": "2.0.1", + "versionCode": 4, + "versionName": "2.0.2", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/me/bingyue/IceCore/MainHook.java b/app/src/main/java/me/bingyue/IceCore/MainHook.java index 34359f3..82cf1d6 100644 --- a/app/src/main/java/me/bingyue/IceCore/MainHook.java +++ b/app/src/main/java/me/bingyue/IceCore/MainHook.java @@ -8,12 +8,12 @@ import java.util.Objects; import de.robv.android.xposed.IXposedHookLoadPackage; +import me.bingyue.IceCore.hook_app.android; import de.robv.android.xposed.XC_MethodReplacement; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; - public class MainHook implements IXposedHookLoadPackage { @@ -38,10 +38,15 @@ public class MainHook implements IXposedHookLoadPackage { hook_method_app.put("com.estrongs.android.pop", "a1"); hook_method_app.put("cn.com.langeasy.LangEasyLexis", "a2"); hook_method_app.put("com.lerist.autocmd", "b2"); + hook_method_app.put("tech.xiangzi.painless", "c2"); + hook_method_app.put("io.moreless.tide", "c3"); } @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + if(Objects.equals(lpparam.packageName, "android")){ + android.hook_init(); + } if(Objects.equals(lpparam.packageName, "me.bingyue.IceCore")){ XposedHelpers.findAndHookMethod("me.bingyue.IceCore.activity.MainActivityKt", lpparam.classLoader, "isModuleActivated", XC_MethodReplacement.returnConstant(true)); } diff --git a/app/src/main/java/me/bingyue/IceCore/activity/Config.kt b/app/src/main/java/me/bingyue/IceCore/activity/Config.kt index 1541342..f9dcf58 100644 --- a/app/src/main/java/me/bingyue/IceCore/activity/Config.kt +++ b/app/src/main/java/me/bingyue/IceCore/activity/Config.kt @@ -2,11 +2,16 @@ package me.bingyue.IceCore.activity class Config { val settingsMap = mapOf( - "Fake Location" to listOf( + "Fake Location New" to listOf( listOf("启用本地VIP", "com_lerist_fakelocation__vip", "仅本地生效"), listOf("去除APP黑名单", "com_lerist_fakelocation__black_app", "如上所述"), listOf("去除服务器验证", "com_lerist_fakelocation__verify", "防止定位突然关闭") ), + "Fake Location 1.3.2.2" to listOf( + listOf("总开关", "com_lerist_fakelocation__oid_all", "如果想使用请手动勾选系统框架\n同时把new上面的关了"), + listOf("启用本地VIP", "com_lerist_fakelocation__vip_old", "仅本地生效"), + listOf("去除服务器验证", "com_lerist_fakelocation__verify", "防止定位突然关闭") + ), "Autocmd+" to listOf( listOf("启用本地VIP", "com_lerist_autocmd__vip", "仅本地生效"), ), @@ -51,6 +56,12 @@ class Config { ), "不背单词" to listOf( listOf("启用本地VIP", "cn_com_langeasy_LangEasyLexis__isvip", "仅本地生效") + ), + "无痛单词" to listOf( + listOf("启用本地VIP", "tech_xiangzi_painless__isvip", "仅本地生效") + ), + "潮汐" to listOf( + listOf("启用本地VIP", "io_moreless_tide__isvip", "仅本地生效") ) ) } \ No newline at end of file diff --git a/app/src/main/java/me/bingyue/IceCore/config/Config.java b/app/src/main/java/me/bingyue/IceCore/config/Config.java index b1fb86f..1c587e6 100644 --- a/app/src/main/java/me/bingyue/IceCore/config/Config.java +++ b/app/src/main/java/me/bingyue/IceCore/config/Config.java @@ -1,9 +1,12 @@ package me.bingyue.IceCore.config; public class Config { + public static boolean com_lerist_fakelocation__oid_all = true; public static boolean com_lerist_fakelocation__vip = true; public static boolean com_lerist_fakelocation__black_app = true; public static boolean com_lerist_fakelocation__verify = true; + public static boolean com_lerist_fakelocation__vip_old = true; + public static boolean com_lerist_fakelocation__verify_old = true; public static boolean com_nowcasting_activity__isvip = true; public static boolean cn_ticktick_task__isvip = true; public static boolean com_clover_daysmatter__pay = true; @@ -18,6 +21,8 @@ public class Config { public static boolean com_dragon_read__isvip = true; public static boolean me_mapleaf_calendar__isvip = true; public static boolean com_mutangtech_qianji__isvip = true; + public static boolean tech_xiangzi_painless__isvip = true; + public static boolean io_moreless_tide__isvip = true; public static boolean com_duapps_recorder__isvip = true; public static boolean web1n_stopapp__vip = true; } diff --git a/app/src/main/java/me/bingyue/IceCore/hook_app/android.java b/app/src/main/java/me/bingyue/IceCore/hook_app/android.java new file mode 100644 index 0000000..7f32232 --- /dev/null +++ b/app/src/main/java/me/bingyue/IceCore/hook_app/android.java @@ -0,0 +1,51 @@ +package me.bingyue.IceCore.hook_app; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; + +public class android { + public static void hook_init(){ + XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (param.hasThrowable()) return; + Class cls = (Class) param.getResult(); + if(cls.getClassLoader().toString().contains("/data/fakeloc/libfakeloc.so")) { + XposedBridge.log("hook libfakeloc.so"); + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(3500); + XposedBridge.log("start"); + XposedHelpers.findAndHookMethod("com.lerist.inject.utils.ޏ", cls.getClassLoader(), "އ", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + } + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(true); + } + }); + XposedHelpers.findAndHookMethod("com.lerist.inject.utils.ބ", cls.getClassLoader(), "ރ", java.lang.String.class, int.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + param.args[0]="114.114.114.114";//把vef.api.fakeloc.cc改为114.114.114.114 + } + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + super.afterHookedMethod(param); + } + }); + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + } + }); + } +} diff --git a/app/src/main/java/me/bingyue/IceCore/hook_app/com_lerist_autocmd.java b/app/src/main/java/me/bingyue/IceCore/hook_app/com_lerist_autocmd.java index 80ff34d..ff412d2 100644 --- a/app/src/main/java/me/bingyue/IceCore/hook_app/com_lerist_autocmd.java +++ b/app/src/main/java/me/bingyue/IceCore/hook_app/com_lerist_autocmd.java @@ -28,6 +28,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { param.setResult(true); } }); + XposedHelpers.findAndHookMethod("\u0793.\u0221", classLoader, "\u0D08", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(1); + super.afterHookedMethod(param); + } + }); } }); } diff --git a/app/src/main/java/me/bingyue/IceCore/hook_app/com_lerist_fakelocation_old.java b/app/src/main/java/me/bingyue/IceCore/hook_app/com_lerist_fakelocation_old.java new file mode 100644 index 0000000..1ec2111 --- /dev/null +++ b/app/src/main/java/me/bingyue/IceCore/hook_app/com_lerist_fakelocation_old.java @@ -0,0 +1,113 @@ +package me.bingyue.IceCore.hook_app; + +import android.content.Context; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedHelpers; +import de.robv.android.xposed.callbacks.XC_LoadPackage; +import me.bingyue.IceCore.config.Config; +import android.util.Base64; + + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.DESKeySpec; + +public class com_lerist_fakelocation_old { + public static void hook_init(XC_LoadPackage.LoadPackageParam lpparam){ + XposedHelpers.findAndHookMethod("com.stub.StubApp", lpparam.classLoader, "attachBaseContext", Context.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + super.afterHookedMethod(param); + Context context = (Context) param.args[0]; + ClassLoader classLoader = context.getClassLoader(); + XposedHelpers.findAndHookMethod("ކ.ޖ$֏", classLoader, "ށ", java.lang.String.class, new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if(Config.com_lerist_fakelocation__verify_old){ + param.args[0]="114.114.114.114"; + } + } + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + super.afterHookedMethod(param); + } + }); + + Class JSONClass =XposedHelpers.findClass("com.alibaba.fastjson.JSON",classLoader); + + XposedHelpers.findAndHookMethod("ށ.ރ.ށ.ހ.ށ.ؠ", classLoader, "֏", java.lang.String.class, java.lang.Class.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(param.args[0]=="key_userinfo" && Config.com_lerist_fakelocation__vip_old){ + long proindate=System.currentTimeMillis()+200000000; + long tokenTime=System.currentTimeMillis()+500000000; + String key = "1#" + Long.toString(proindate) + "#" + Long.toString(tokenTime) + "#T"; + String data = "{\"key\":\"" + desEncryptECB(key, "Lerist.T") + "\",\"loginName\":\"IceCore\",\"loginTime\":0,\"loginType\":\"email\",\"proindate\":" + Long.toString(proindate) + ",\"stability\":0,\"token\":\"T\",\"type\":1}"; + param.setResult(XposedHelpers.callStaticMethod(JSONClass,"parseObject",data,param.args[1])); + return; + } + super.afterHookedMethod(param); + } + }); + + XposedHelpers.findAndHookMethod("ށ.ރ.ށ.ހ.ށ.ؠ", classLoader, "ނ", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(false); + } + }); + + XposedHelpers.findAndHookMethod("ށ.ރ.ؠ.ހ.ؠ", classLoader, "ށ", java.lang.String.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(true); + } + }); + + XposedHelpers.findAndHookMethod("ށ.ރ.ؠ.ހ.ؠ", classLoader, "ؠ", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(null); + } + }); + + XposedHelpers.findAndHookMethod("ށ.ރ.ؠ.ؠ.֏", classLoader, "ޅ",Context.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(true); + } + }); + + } + }); + + } + + + public static String desEncryptECB(String content, String key) { + try { + Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); + DESKeySpec desKeySpec = new DESKeySpec(key.getBytes()); + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); + SecretKey secretKey = keyFactory.generateSecret(desKeySpec); + cipher.init(Cipher.ENCRYPT_MODE, secretKey); + byte[] result = cipher.doFinal(content.getBytes()); + return Base64.encodeToString(result, Base64.DEFAULT); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static String desECBDecrypt(byte[] data, String key) throws Exception { + Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); + DESKeySpec desKeySpec = new DESKeySpec(key.getBytes()); + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); + SecretKey secretKey = keyFactory.generateSecret(desKeySpec); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + byte[] encryptedData = Base64.decode(data, Base64.DEFAULT); + byte[] decryptedData = cipher.doFinal(encryptedData); + return new String(decryptedData); + } +} diff --git a/app/src/main/java/me/bingyue/IceCore/hook_app/io_moreless_tide.java b/app/src/main/java/me/bingyue/IceCore/hook_app/io_moreless_tide.java new file mode 100644 index 0000000..6f6dab2 --- /dev/null +++ b/app/src/main/java/me/bingyue/IceCore/hook_app/io_moreless_tide.java @@ -0,0 +1,39 @@ +package me.bingyue.IceCore.hook_app; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedHelpers; +import de.robv.android.xposed.callbacks.XC_LoadPackage; +import me.bingyue.IceCore.config.Config; + +public class io_moreless_tide { + public static void hook_init(XC_LoadPackage.LoadPackageParam lpparam){ + hook_vip(lpparam); + } + + public static void hook_vip(XC_LoadPackage.LoadPackageParam lpparam){ + if(!Config.io_moreless_tide__isvip){ + return; + } + XposedHelpers.findAndHookMethod("io.moreless.tide.base.model.User$Vip", lpparam.classLoader, "getExpired", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(false); + super.afterHookedMethod(param); + } + }); + XposedHelpers.findAndHookMethod("io.moreless.tide.base.model.User$Vip", lpparam.classLoader, "getValid", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(true); + super.afterHookedMethod(param); + } + }); + XposedHelpers.findAndHookMethod("k1.l", lpparam.classLoader, "ll", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(true); + super.afterHookedMethod(param); + } + }); + } +} diff --git a/app/src/main/java/me/bingyue/IceCore/hook_app/tech_xiangzi_painless.java b/app/src/main/java/me/bingyue/IceCore/hook_app/tech_xiangzi_painless.java new file mode 100644 index 0000000..6ac60a6 --- /dev/null +++ b/app/src/main/java/me/bingyue/IceCore/hook_app/tech_xiangzi_painless.java @@ -0,0 +1,30 @@ +package me.bingyue.IceCore.hook_app; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedHelpers; +import de.robv.android.xposed.callbacks.XC_LoadPackage; +import me.bingyue.IceCore.config.Config; + +public class tech_xiangzi_painless { + public static void hook_init(XC_LoadPackage.LoadPackageParam lpparam){ + hook_vip(lpparam); + } + + public static void hook_vip(XC_LoadPackage.LoadPackageParam lpparam){ + if(!Config.tech_xiangzi_painless__isvip){ + return; + } + XposedHelpers.findAndHookMethod("tech.xiangzi.painless.data.remote.model.UserBean", lpparam.classLoader, "getPro", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + } + + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + param.setResult(9); + super.afterHookedMethod(param); + } + }); + } +} diff --git a/app/src/main/java/me/bingyue/IceCore/hook_core.java b/app/src/main/java/me/bingyue/IceCore/hook_core.java index 544d297..1a3f3f7 100644 --- a/app/src/main/java/me/bingyue/IceCore/hook_core.java +++ b/app/src/main/java/me/bingyue/IceCore/hook_core.java @@ -1,6 +1,7 @@ package me.bingyue.IceCore; import de.robv.android.xposed.callbacks.XC_LoadPackage; +import me.bingyue.IceCore.config.Config; import me.bingyue.IceCore.hook_app.com_clover_daysmatter_vip; import me.bingyue.IceCore.hook_app.com_when_coco_vip; import me.bingyue.IceCore.hook_app.me_mapleaf_calendar_vip; @@ -18,6 +19,9 @@ import me.bingyue.IceCore.hook_app.com_estrongs_android_pop; import me.bingyue.IceCore.hook_app.cn_com_langeasy_LangEasyLexis; import me.bingyue.IceCore.hook_app.com_lerist_autocmd; +import me.bingyue.IceCore.hook_app.com_lerist_fakelocation_old; +import me.bingyue.IceCore.hook_app.io_moreless_tide; +import me.bingyue.IceCore.hook_app.tech_xiangzi_painless; public class hook_core{ @@ -33,7 +37,13 @@ public void d(XC_LoadPackage.LoadPackageParam lpparam){ webn_stopapp_vip.hook_init(lpparam); } - public void e(XC_LoadPackage.LoadPackageParam lpparam) throws ClassNotFoundException { fake_location_vip.hook_init(lpparam); } + public void e(XC_LoadPackage.LoadPackageParam lpparam) throws ClassNotFoundException { + if(Config.com_lerist_fakelocation__oid_all){ + com_lerist_fakelocation_old.hook_init(lpparam); + }else{ + fake_location_vip.hook_init(lpparam); + } + } public void f(XC_LoadPackage.LoadPackageParam lpparam) throws ClassNotFoundException{ fanqie_xiao_suo.hook_init(lpparam); } @@ -60,4 +70,9 @@ public void g(XC_LoadPackage.LoadPackageParam lpparam){ public void a2(XC_LoadPackage.LoadPackageParam lpparam) {cn_com_langeasy_LangEasyLexis.hook_init(lpparam);} public void b2(XC_LoadPackage.LoadPackageParam lpparam) {com_lerist_autocmd.hook_init(lpparam);} + + public void c2(XC_LoadPackage.LoadPackageParam lpparam) {tech_xiangzi_painless.hook_init(lpparam);} + + public void c3(XC_LoadPackage.LoadPackageParam lpparam) {io_moreless_tide.hook_init(lpparam);} + } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index b619f3e..ca54256 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -27,5 +27,7 @@ com.vmos.pro cn.com.langeasy.LangEasyLexis com.lerist.autocmd + io.moreless.tide + tech.xiangzi.painless \ No newline at end of file diff --git a/ice_core.png b/ice_core.png new file mode 100644 index 0000000..6820ca3 Binary files /dev/null and b/ice_core.png differ diff --git "a/\345\206\260\347\244\276_logo.png" "b/\345\206\260\347\244\276_logo.png" deleted file mode 100644 index ac46b6f..0000000 Binary files "a/\345\206\260\347\244\276_logo.png" and /dev/null differ