2 Commits

Author SHA1 Message Date
MoonLeeeaf
b8246657d1 feat: 谋权篡位 & 强制置顶评论
Some checks failed
Android CI / build (push) Failing after 14m58s
2024-07-07 21:01:02 +08:00
满月叶
6b886b3182 docs: docs
Some checks failed
Android CI / build (push) Failing after 19m57s
2024-06-29 22:06:53 +08:00
6 changed files with 159 additions and 22 deletions

View File

@@ -1,35 +1,35 @@
{ {
"allFiles": [ "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": { "selection": {
"end": { "end": {
"column": 36, "column": 59,
"index": 1031, "index": 9189,
"line": 30 "line": 224
}, },
"start": { "start": {
"column": 36, "column": 59,
"index": 1031, "index": 9189,
"line": 30 "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": { "selection": {
"end": { "end": {
"column": 26, "column": 0,
"index": 302, "index": 0,
"line": 15 "line": 0
}, },
"start": { "start": {
"column": 26, "column": 0,
"index": 302, "index": 0,
"line": 15 "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"
} }

View File

@@ -12,8 +12,8 @@ android {
applicationId "io.github.moonleeeaf.fuckmaonemo" applicationId "io.github.moonleeeaf.fuckmaonemo"
minSdk 21 minSdk 21
targetSdk 33 targetSdk 33
versionCode 12100 versionCode 13000
versionName "1.2.1" versionName "1.3.p"
vectorDrawables { vectorDrawables {
useSupportLibrary true useSupportLibrary true

View File

@@ -31,6 +31,15 @@ public class ConfigActivity extends PreferenceActivity {
return false; return false;
}); });
findPreference("see_miao").setOnPreferenceClickListener((p) -> {
new AlertDialog.Builder(this)
.setTitle("屏蔽词列表")
.setMessage("当期列表:\n" + Hook.MIAO_LIST)
.show();
return false;
});
} }
} }

View File

@@ -24,6 +24,11 @@ public class Hook implements IXposedHookLoadPackage {
private int nohengheng; private int nohengheng;
private int aaaa; 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 @Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam param) throws Throwable { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam param) throws Throwable {
if ("com.codemao.nemo".equals(param.packageName)) { 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"); 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 { public void hook(XC_LoadPackage.LoadPackageParam param) throws Exception {
if (isHooked) return; if (isHooked) return;
else isHooked = true; 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] 执行完毕"); XposedBridge.log("[FuckMaoNemo] 执行完毕");
Toast.makeText(getApplication(), "[FuckMaoNemo] 加载成功 (≧▽≦)\n" + nohengheng + " 个功能加载成功, " + aaaa + " 个失败", Toast.LENGTH_LONG).show(); Toast.makeText(getApplication(), "[FuckMaoNemo] 加载成功 (≧▽≦)\n" + nohengheng + " 个功能加载成功, " + aaaa + " 个失败", Toast.LENGTH_LONG).show();

View File

@@ -28,12 +28,31 @@
<SwitchPreference <SwitchPreference
android:key="fuck_update" android:key="fuck_update"
android:title="屏蔽更新" android:title="屏蔽更新"
android:summary="主页不会弹更新对话框" /> android:summary="主页不会弹更新对话框,不会拦截设置里手动查看的更新" />
<SwitchPreference <SwitchPreference
android:key="fuck_no_proxy" android:key="fuck_no_proxy"
android:title="反防抓包" android:title="反防抓包"
android:summary="效果不太明显,目前只发现账号相关的有反防抓包" /> android:summary="目前只发现账号相关的有反防抓包,真无法抓包就去刷原生安卓吧,亲测有效" />
</PreferenceCategory>
<PreferenceCategory android:title="评论">
<SwitchPreference
android:key="force_top_comment"
android:title="强制置顶评论"
android:summary="灵感来源于 CodeCat可以无视作品作者直接置顶评论注意只支持 Nemo 作品其它无效响应406码" />
<SwitchPreference
android:key="fuck_miao"
android:title="别屏蔽我词语!"
android:summary="让部分屏蔽词无法再被屏蔽,请勿用于恶语相向,否则被举报不要来找我!!\n可能会导致缩短评论字数上限算法有待优化" />
<Preference
android:key="see_miao"
android:title="查看支持防屏蔽的词汇"
android:summary="对应上面的 防屏蔽" />
</PreferenceCategory> </PreferenceCategory>
@@ -42,15 +61,20 @@
<SwitchPreference <SwitchPreference
android:key="fuck_fcm" android:key="fuck_fcm"
android:title="绕过防沉迷" android:title="绕过防沉迷"
android:summary="滞空防沉迷检测方法的调用实现无伤速通破解防沉迷,无需 Player 链接" /> android:summary="滞空防沉迷检测方法的调用实现无伤速通破解防沉迷,无需 Player 链接不支持叽叽猫砸进里面的岛3不支持内嵌社区网页的防沉迷那不属于我的能力范围" />
<SwitchPreference
android:key="force_set_work_myown"
android:title="谋权篡位"
android:summary="伪装任意作品是你自己的,可以:\n直接编辑作品源码\n其他用途" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="已弃用"> <PreferenceCategory android:title="实验">
<SwitchPreference <SwitchPreference
android:key="force_show_rework" android:key="force_show_rework"
android:title="强制显示再创作图标" android:title="强制显示再创作图标"
android:summary="使作品的 再创作 按钮永远显示,即使作品并未设置为开放源代码(显示了也没啥用,服务端给你拦截了:作品未开源" /> android:summary="使作品的 再创作 按钮永远显示,即使作品并未设置为开放源代码(显示了也没啥用,服务端给你拦截了,报错信息为 作品未开源,亲测无效" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -2,6 +2,8 @@
弥补 编程猫Nemo/点个猫 的不合理特性,功能增强等特性(。・ω・。) 弥补 编程猫Nemo/点个猫 的不合理特性,功能增强等特性(。・ω・。)
提示:本项目只在 GitHub 存在, **严禁任何人或任何组织在没有得到我的书面许可、公告明示许可及社交账号发帖许可的情况下照搬本仓库** <!-- GitCode, 说的就是你, 到时候如果被我发现你搬我仓库我迟早要找你算账 -->
### For non-Chinese users ### For non-Chinese users
This project is for Codemao Nemo. Most of the time, you needn't use this Xposed module. This project is for Codemao Nemo. Most of the time, you needn't use this Xposed module.