From b8246657d1fa6d8971dde92953ea87e2ceb9095d Mon Sep 17 00:00:00 2001
From: MoonLeeeaf <150461955+MoonLeeeaf@users.noreply.github.com>
Date: Sun, 7 Jul 2024 21:01:02 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=8B=E6=9D=83=E7=AF=A1=E4=BD=8D=20?=
=?UTF-8?q?&=20=E5=BC=BA=E5=88=B6=E7=BD=AE=E9=A1=B6=E8=AF=84=E8=AE=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.androidide/editor/openedFiles.json | 30 +++---
app/build.gradle | 4 +-
.../fuckmaonemo/ConfigActivity.java | 9 ++
.../github/moonleeeaf/fuckmaonemo/Hook.java | 102 ++++++++++++++++++
app/src/main/res/xml/config.xml | 34 +++++-
5 files changed, 157 insertions(+), 22 deletions(-)
diff --git a/.androidide/editor/openedFiles.json b/.androidide/editor/openedFiles.json
index 14e4213..a7cb09e 100644
--- a/.androidide/editor/openedFiles.json
+++ b/.androidide/editor/openedFiles.json
@@ -1,35 +1,35 @@
{
"allFiles": [
{
- "file": "/storage/emulated/0/铃芽の文件/Projects/FuckMaoNemo/app/src/main/res/xml/config.xml",
+ "file": "/storage/emulated/0/MoonLeaf/Projects/FuckMaoNemo/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java",
"selection": {
"end": {
- "column": 36,
- "index": 1031,
- "line": 30
+ "column": 59,
+ "index": 9189,
+ "line": 224
},
"start": {
- "column": 36,
- "index": 1031,
- "line": 30
+ "column": 59,
+ "index": 9189,
+ "line": 224
}
}
},
{
- "file": "/storage/emulated/0/铃芽の文件/Projects/FuckMaoNemo/app/build.gradle",
+ "file": "/storage/emulated/0/MoonLeaf/Projects/FuckMaoNemo/app/src/main/res/xml/config.xml",
"selection": {
"end": {
- "column": 26,
- "index": 302,
- "line": 15
+ "column": 0,
+ "index": 0,
+ "line": 0
},
"start": {
- "column": 26,
- "index": 302,
- "line": 15
+ "column": 0,
+ "index": 0,
+ "line": 0
}
}
}
],
- "selectedFile": "/storage/emulated/0/铃芽の文件/Projects/FuckMaoNemo/app/build.gradle"
+ "selectedFile": "/storage/emulated/0/MoonLeaf/Projects/FuckMaoNemo/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java"
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index d0b0484..10e751c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -12,8 +12,8 @@ android {
applicationId "io.github.moonleeeaf.fuckmaonemo"
minSdk 21
targetSdk 33
- versionCode 12100
- versionName "1.2.1"
+ versionCode 13000
+ versionName "1.3.p"
vectorDrawables {
useSupportLibrary true
diff --git a/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/ConfigActivity.java b/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/ConfigActivity.java
index 93d293a..fbcdb60 100644
--- a/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/ConfigActivity.java
+++ b/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/ConfigActivity.java
@@ -31,6 +31,15 @@ public class ConfigActivity extends PreferenceActivity {
return false;
});
+
+ findPreference("see_miao").setOnPreferenceClickListener((p) -> {
+ new AlertDialog.Builder(this)
+ .setTitle("屏蔽词列表")
+ .setMessage("当期列表:\n" + Hook.MIAO_LIST)
+ .show();
+
+ return false;
+ });
}
}
diff --git a/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java b/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java
index 2657dda..a1513a2 100644
--- a/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java
+++ b/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java
@@ -24,6 +24,11 @@ public class Hook implements IXposedHookLoadPackage {
private int nohengheng;
private int aaaa;
+ public static final String MIAO_LIST = "妈 马 操 草 傻 艹 牛 逼 P 槽 涩 色 m";
+ public static final String[] MIAO = MIAO_LIST.split(" ");
+
+ private XC_MethodHook.Unhook force_set_work_myown_unhook;
+
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam param) throws Throwable {
if ("com.codemao.nemo".equals(param.packageName)) {
@@ -53,6 +58,13 @@ public class Hook implements IXposedHookLoadPackage {
return (Application) XposedHelpers.callStaticMethod(Class.forName("android.app.ActivityThread"), "currentApplication");
}
+ public static String fuck屏蔽词(String str) {
+ for (String i : MIAO) {
+ str = str.replaceAll(i, "" + i + "");
+ }
+ return str;
+ }
+
public void hook(XC_LoadPackage.LoadPackageParam param) throws Exception {
if (isHooked) return;
else isHooked = true;
@@ -164,6 +176,96 @@ public class Hook implements IXposedHookLoadPackage {
);
});
+ // 强制置顶评论
+ load("force_top_comment", () -> {
+ XposedBridge.log("[FuckMaoNemo] Hook_强制置顶评论");
+ XposedBridge.hookMethod(
+ getMethod(
+ XposedHelpers.findClass("com.codemao.nemo.view.CommentOptionDialogV2", classLoader),
+ "checkIsSelf",
+ null
+ ),
+ new XC_MethodHook() {
+ @Override
+ protected void beforeHookedMethod(MethodHookParam mp) throws Throwable {
+ XposedHelpers.setBooleanField(mp.thisObject, "isOwnWork", true);
+ }
+ }
+ );
+ });
+
+ // 谋权篡位
+ load("force_set_work_myown", () -> {
+ XposedBridge.log("[FuckMaoNemo] Hook_谋权篡位");
+ XposedBridge.hookMethod(
+ getMethod(
+ XposedHelpers.findClass("com.codemao.nemo.activity.WorkDetailActivity", classLoader),
+ "setWorkDetailData",
+ null
+ ),
+ new XC_MethodHook() {
+ @Override
+ protected void beforeHookedMethod(MethodHookParam mp) throws Throwable {
+ force_set_work_myown_unhook = XposedBridge.hookMethod(
+ getMethod(
+ XposedHelpers.findClass("com.codemao.creativecenter.utils.bcm.bean.AuthorInfo", classLoader),
+ "getId",
+ null
+ ),
+ new XC_MethodReplacement() {
+ @Override
+ protected Object replaceHookedMethod(MethodHookParam hp) throws Throwable {
+ Method m = getMethod(XposedHelpers.findClass("com.codemao.nemo.util.LocalUserHelper", classLoader), "getUserInfo", null);
+ m.setAccessible(true);
+ Object usrInfo = m.invoke(null, null);
+
+ m = getMethod(usrInfo.getClass(), "getId", null);
+ m.setAccessible(true);
+
+ force_set_work_myown_unhook.unhook(); // 希望人没事
+ return m.invoke(usrInfo, null); // long 类型
+ }
+ });
+ }
+ }
+ );
+ });
+
+ // 防止屏蔽屏蔽词
+ load("fuck_miao", () -> {
+ XposedBridge.log("[FuckMaoNemo] Hook_反屏蔽");
+ XC_MethodHook hook = new XC_MethodHook() {
+ @Override
+ protected void beforeHookedMethod(MethodHookParam mp) throws Throwable {
+ XposedHelpers.setObjectField(mp.thisObject, "content", fuck屏蔽词((String) XposedHelpers.getObjectField(mp.thisObject, "content")));
+ }
+ };
+ XposedBridge.hookMethod(
+ getMethod(
+ XposedHelpers.findClass("com.codemao.nemo.fragment.WorkCommentFragment", classLoader),
+ "sendReply",
+ null
+ ),
+ hook
+ );
+ XposedBridge.hookMethod(
+ getMethod(
+ XposedHelpers.findClass("com.codemao.nemo.fragment.WorkCommentFragment", classLoader),
+ "sendComment",
+ null
+ ),
+ hook
+ );
+ XposedBridge.hookMethod(
+ getMethod(
+ XposedHelpers.findClass("com.codemao.nemo.activity.CommentDetailActivity", classLoader),
+ "send",
+ null
+ ),
+ hook
+ );
+ });
+
XposedBridge.log("[FuckMaoNemo] 执行完毕");
Toast.makeText(getApplication(), "[FuckMaoNemo] 加载成功 (≧▽≦)\n" + nohengheng + " 个功能加载成功, " + aaaa + " 个失败", Toast.LENGTH_LONG).show();
diff --git a/app/src/main/res/xml/config.xml b/app/src/main/res/xml/config.xml
index 1e2f71b..29bb6fa 100644
--- a/app/src/main/res/xml/config.xml
+++ b/app/src/main/res/xml/config.xml
@@ -28,12 +28,31 @@
+ android:summary="主页不会弹更新对话框,不会拦截设置里手动查看的更新" />
+ android:summary="目前只发现账号相关的有反防抓包,真无法抓包就去刷原生安卓吧,亲测有效" />
+
+
+
+
+
+
+
+
+
+
@@ -42,15 +61,20 @@
+ android:summary="滞空防沉迷检测方法的调用实现无伤速通破解防沉迷,无需 Player 链接,不支持叽叽猫砸进里面的岛3,不支持内嵌社区网页的防沉迷,那不属于我的能力范围" />
+
+
-
+
+ android:summary="使作品的 再创作 按钮永远显示,即使作品并未设置为开放源代码(显示了也没啥用,服务端给你拦截了,报错信息为 作品未开源,亲测无效)" />
\ No newline at end of file