Skip to content
This repository has been archived by the owner on Feb 4, 2023. It is now read-only.

Commit

Permalink
添加去语音房 & 添加appcenter统计
Browse files Browse the repository at this point in the history
  • Loading branch information
lliioollcn committed Sep 8, 2022
1 parent f8c0971 commit d282084
Show file tree
Hide file tree
Showing 16 changed files with 248 additions and 32 deletions.
8 changes: 7 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ android {
applicationId "cn.lliiooll.pphelper"
minSdk 26
targetSdk 32
versionCode Common.getTimeStamp()//Common.getBuildVersionCode(rootProject)
versionCode Common.getBuildVersionCode(rootProject)
//versionCode Common.getTimeStamp()
versionName "1.0.0.${versionCode}${Common.getGitHeadRefsSuffix(rootProject)}"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = false
Expand Down Expand Up @@ -86,4 +87,9 @@ dependencies {

compileOnly fileTree('lib')
compileOnly 'de.robv.android.xposed:api:82'

def appCenterSdkVersion = '4.3.1'
implementation "com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}"
implementation "com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}"

}
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:requestLegacyExternalStorage="true"
android:dataExtractionRules="@xml/appcenter_backup_rule_h"
android:fullBackupContent="@xml/appcenter_backup_rule"
android:theme="@style/Theme.PPHelper">
<activity
android:name=".activity.SettingsActivity"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
package cn.lliiooll.pphelper.activity

import android.app.Activity
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.View.OnClickListener
import android.widget.LinearLayout
import android.widget.Switch
import android.widget.TextView
import cn.lliiooll.pphelper.R
import cn.lliiooll.pphelper.config.ConfigManager
import cn.lliiooll.pphelper.hook.*
import cn.lliiooll.pphelper.utils.PLog
import cn.lliiooll.pphelper.utils.PermissionUtils
import cn.lliiooll.pphelper.utils.Utils
import cn.lliiooll.pphelper.utils.addSetting
import cn.lliiooll.pphelper.utils.showShortToast
import cn.lliiooll.pphelper.utils.*
import cn.xiaochuankeji.zuiyouLite.ui.base.BaseActivity

class SettingsActivity : BaseActivity(), OnClickListener {
Expand Down Expand Up @@ -44,6 +35,11 @@ class SettingsActivity : BaseActivity(), OnClickListener {
"还没写呢".showShortToast()
}
RemoveLiveHook.addSetting(this, app_setting_clean_parent)
RemoveVoiceRoomHook.addSetting(this, app_setting_clean_parent)
RemoveVoiceRoomHook.setClickListener {
"此功能需要重启皮皮搞笑生效".showLongToast()
}
ShowHideHook.addSetting(this, app_setting_play_parent)
/*
val switch_noad = findViewById<Switch>(R.id.switch_noad)
val switch_nomark = findViewById<Switch>(R.id.switch_nomark)
Expand Down
4 changes: 0 additions & 4 deletions app/src/main/java/cn/lliiooll/pphelper/app/PPHelperImpl.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package cn.lliiooll.pphelper.app;

import android.app.Application;
import cn.lliiooll.pphelper.config.ConfigManager;
import com.tencent.mmkv.MMKV;

import java.io.File;

public class PPHelperImpl extends Application {

Expand Down
32 changes: 32 additions & 0 deletions app/src/main/java/cn/lliiooll/pphelper/hook/AccountHook.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package cn.lliiooll.pphelper.hook

import cn.lliiooll.pphelper.utils.DexKit
import cn.lliiooll.pphelper.utils.PLog
import cn.lliiooll.pphelper.utils.hook
import de.robv.android.xposed.XC_MethodHook
import java.util.*

object AccountHook : BaseHook("account", "账号hook") {
override fun init(): Boolean {
this.desc = "账号hook"
val clazz = DexKit.load(DexKit.OBF_ACCOUNT_SERVICE_MANAGER)
for (m in clazz?.declaredMethods!!) {
m.hook(object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam?) {
PLog.log("\n========================================")
PLog.log(
"\n来自{}的方法被调用;" + "\n方法名称: {}" + "\n参数数量: {}" + "\n参数类型: {}" + "\n参数内容: {}\n当前堆栈: ",
param?.thisObject?.javaClass?.simpleName,
m.name,
m.parameterTypes.size,
Arrays.toString(m.parameterTypes),
Arrays.toString(param?.args)
)
PLog.printStacks()
PLog.log("========================================\n")
}
})
}
return true
}
}
7 changes: 7 additions & 0 deletions app/src/main/java/cn/lliiooll/pphelper/hook/Hooks.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ public class Hooks {
CustomVoiceHook.INSTANCE,
AriaInitHook.INSTANCE,
RemoveLiveHook.INSTANCE,
RemoveVoiceRoomHook.INSTANCE,
TestHook.INSTANCE,
AccountHook.INSTANCE,
ShowHideHook.INSTANCE,
};

/**
Expand All @@ -38,6 +41,10 @@ public static void init(Object instance) {
add("http://alfile.ippzone.com/img/mp4/id/");
add("videocomment");
}});
put(DexKit.OBF_ACCOUNT_SERVICE_MANAGER,new HashSet<String>(){{
add("avatar");
add("third_force_bind_phone");
}});
}});
PLog.log("查找结果: " + result);
DexKit.cache(result);
Expand Down
28 changes: 18 additions & 10 deletions app/src/main/java/cn/lliiooll/pphelper/hook/RemoveVoiceRoomHook.kt
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
package cn.lliiooll.pphelper.hook

import android.content.Context
import android.os.Bundle
import cn.lliiooll.pphelper.utils.Utils
import cn.lliiooll.pphelper.utils.loadClass
import cn.lliiooll.pphelper.utils.*
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XC_MethodReplacement
import de.robv.android.xposed.XposedHelpers
import java.util.*

object RemoveVoiceRoomHook : BaseHook("removeVoiceRoom", "移除语音房") {
override fun init(): Boolean {
this.desc = "移除语音房"
XposedHelpers.findAndHookMethod(
"cn.xiaochuankeji.chat.gui.base.ChatBaseActivity".loadClass(),
"onCreate",
Bundle::class.java,
object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam?) {
Utils.showShort("")
val clazz1 = "com.youyisia.voices.sdk.api.HYVoiceRoomSdk".loadClass()
for (m in clazz1?.declaredMethods!!) {
m.hookAfter {
if (m.name == "isInited") {
it?.result = true
}
})
PLog.log(
"\n来自{}的方法被调用;" + "\n方法名称: {}" + "\n参数数量: {}" + "\n参数类型: {}" + "\n参数内容: {}\n当前堆栈: ",
clazz1.name,
m.name,
m.parameterTypes.size,
Arrays.toString(m.parameterTypes),
Arrays.toString(it?.args)
)
}
}
return true
}
}
67 changes: 67 additions & 0 deletions app/src/main/java/cn/lliiooll/pphelper/hook/ShowHideHook.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package cn.lliiooll.pphelper.hook

import android.os.Bundle
import cn.hutool.json.JSONUtil
import cn.lliiooll.pphelper.utils.PLog
import cn.lliiooll.pphelper.utils.loadClass
import cn.xiaochuankeji.zuiyouLite.ui.postdetail.comment.CommentDetailActivity
import cn.xiaochuankeji.zuiyouLite.ui.slide.ActivitySlideDetail
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers

object ShowHideHook : BaseHook("comment_show_hide", "评论区显示隐藏评论") {
override fun init(): Boolean {
this.desc = "评论区显示隐藏评论"
XposedHelpers.findAndHookMethod(
CommentDetailActivity::class.java,
"onCreate",
Bundle::class.java,
object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam?) {
val commentBeanClazz = "cn.xiaochuankeji.zuiyouLite.data.CommentBean".loadClass()
val objClazz = param?.thisObject?.javaClass
for (field in objClazz?.declaredFields!!) {
if (field.type == commentBeanClazz) {
val commentBean = XposedHelpers.getObjectField(param.thisObject, field.name)
val replays = XposedHelpers.getObjectField(commentBean, "replyReviews") as List<*>
XposedHelpers.setIntField(commentBean, "isHide", 0)
for (replay in replays) {
XposedHelpers.setIntField(replay, "isHide", 0)
}
//PLog.log(JSONUtil.toJsonStr(commentBean))
}
}
}
})
XposedHelpers.findAndHookMethod(
ActivitySlideDetail::class.java,
"onCreate",
Bundle::class.java,
object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam?) {
//val commentBeanClazz = "cn.xiaochuankeji.zuiyouLite.data.CommentBean".loadClass()
val postDataBeanClazz = "cn.xiaochuankeji.zuiyouLite.data.post.PostDataBean".loadClass()
val objClazz = param?.thisObject?.javaClass
for (field in objClazz?.declaredFields!!) {
if (field.type == postDataBeanClazz) {
val postDataBean = XposedHelpers.getObjectField(param.thisObject, field.name)
val godReviews = XposedHelpers.getObjectField(postDataBean, field.name) as List<*>
val myReviews = XposedHelpers.getObjectField(postDataBean, field.name) as List<*>
val reviewList = XposedHelpers.getObjectField(postDataBean, field.name) as List<*>
for (replay in godReviews) {
XposedHelpers.setIntField(replay, "isHide", 0)
}
for (replay in myReviews) {
XposedHelpers.setIntField(replay, "isHide", 0)
}
for (replay in reviewList) {
XposedHelpers.setIntField(replay, "isHide", 0)
}
//PLog.log(JSONUtil.toJsonStr(commentBean))
}
}
}
})
return true
}
}
13 changes: 13 additions & 0 deletions app/src/main/java/cn/lliiooll/pphelper/hook/TestHook.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,27 @@
package cn.lliiooll.pphelper.hook

import android.app.Application
import android.os.Bundle
import cn.lliiooll.pphelper.utils.CliOper
import cn.lliiooll.pphelper.utils.Utils
import cn.lliiooll.pphelper.utils.loadClass
import cn.xiaochuankeji.zuiyouLite.ui.main.MainActivity
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers

object TestHook : BaseHook("test", "测试hook") {
override fun init(): Boolean {
this.desc = "测试hook"
XposedHelpers.findAndHookMethod(
"com.tencent.bugly.crashreport.CrashReport".loadClass(),
"setUserId",
String::class.java,
object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam) {
//Utils.showShort("用户id: " + param.args[0])
CliOper.init(Utils.getApplication(), param.args[0] as String?)
}
})
XposedHelpers.findAndHookMethod(
MainActivity::class.java,
"onCreate",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package cn.lliiooll.pphelper.startup;

import android.app.Application;
import android.content.Context;
import cn.lliiooll.pphelper.R;
import cn.lliiooll.pphelper.utils.CliOper;
import cn.lliiooll.pphelper.utils.PLog;
import cn.lliiooll.pphelper.utils.Utils;
import cn.lliiooll.pphelper.utils.hookstatus.HookStatusInit;
import cn.xiaochuankeji.zuiyouLite.app.AppController;
import de.robv.android.xposed.IXposedHookLoadPackage;
Expand Down Expand Up @@ -38,7 +42,7 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th
XposedHelpers.findAndHookMethod("cn.xiaochuankeji.zuiyouLite.app.AppController", lpparam.classLoader, "onCreate", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
PLog.log("开始初始化");
PLog.log("开始初始化, app版本: "+ Utils.getVersion((Application) param.thisObject));
StartupHook.init(param.thisObject, lpparam.classLoader);
}
});
Expand Down
38 changes: 38 additions & 0 deletions app/src/main/java/cn/lliiooll/pphelper/utils/CliOper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package cn.lliiooll.pphelper.utils;

import android.app.Application;
import android.os.Build;
import cn.lliiooll.pphelper.BuildConfig;
import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.analytics.Analytics;
import com.microsoft.appcenter.crashes.Crashes;

import java.util.HashMap;
import java.util.Map;


public class CliOper {
public static void init(Application app, String account) {
PLog.log("开始初始化统计...");
if (!BuildConfig.DEBUG){
if (!AppCenter.isConfigured()) {
AppCenter.start(app, getSecert(), Analytics.class, Crashes.class);
}
Map<String, String> data = new HashMap<String, String>() {{
put("os_version", Build.VERSION.RELEASE);
put("os_brand", Build.BRAND);
put("os_model", Build.MODEL);
put("app_version", BuildConfig.VERSION_NAME);
put("app_type", BuildConfig.BUILD_TYPE);
put("app_code", BuildConfig.VERSION_CODE + "");
put("account", account);
}};
Analytics.trackEvent("onLoad", data);
PLog.log("上报数据: " + data);
}
}

private static String getSecert() {
return "d107307f-0e8f-4e99-aaf6-1eb3060d1d22";
}
}
8 changes: 5 additions & 3 deletions app/src/main/java/cn/lliiooll/pphelper/utils/DexKit.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
public class DexKit {

public static String OBF_COMMENT_VIDEO = "Lcn/xiaochuankeji/zuiyouLite/common/CommentVideo;";
public static String OBF_ACCOUNT_SERVICE_MANAGER = "Lcn/xiaochuankeji/zuiyouLite/api/account/AccountServiceManager";

private static native String find(ClassLoader loader, String input);

Expand Down Expand Up @@ -46,17 +47,18 @@ public static void cache(String result) {
List<String> results = new ArrayList<>(Arrays.asList(result.split("\n")));
results.forEach(r -> {
List<String> tokens = new ArrayList<>(Arrays.asList(r.split("\t")));
if (tokens.size() > 2 && Utils.isNotBlank(tokens.get(0))) {
if (tokens.size() > 1 && Utils.isNotBlank(tokens.get(0))) {
String filter = doFilter(tokens.get(0), tokens.subList(1, tokens.size()));
if (Utils.isNotBlank(filter)) {
caches.put(tokens.get(0), filter);
PLog.log("找到类: " + tokens.get(0) + " -> " + filter);
} else {
PLog.log("未找到合适的类: \n" + Arrays.toString(tokens.toArray()));
PLog.log("未找到合适的类(NoFilter): " + Arrays.toString(tokens.toArray()));
}
} else {
PLog.log("未找到合适的类: \n" + Arrays.toString(tokens.toArray()));
PLog.log("未找到合适的类: " + Arrays.toString(tokens.toArray()));
}

});
}

Expand Down
21 changes: 18 additions & 3 deletions app/src/main/java/cn/lliiooll/pphelper/utils/PLog.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cn.lliiooll.pphelper.utils;

import android.util.Log;
import cn.hutool.core.util.StrUtil;
import cn.lliiooll.pphelper.BuildConfig;
import de.robv.android.xposed.XposedBridge;
import org.jetbrains.annotations.NotNull;
Expand All @@ -17,9 +18,23 @@ public static void log(String str, Object... replaces) {
for (Object replace : replaces) {
s = s.replaceFirst("\\{\\}", replace == null ? "null" : replace.toString());
}
s = "[PPHelper] >> " + s;
//XposedBridge.log(s);
Log.d("PPHelper", s);
int limit = 500;
if (s.length() >= limit) {
String q = s;
int c = 0;
for (int i = 0; i < s.length(); i += limit) {

if (i != 0 && q.length() > limit) {
q = q.substring(limit);
}
Log.d("PPHelper", "[PPHelper] @" + c + " >> " + q);
c++;
}
} else {
s = "[PPHelper] >> " + s;
//XposedBridge.log(s);
Log.d("PPHelper", s);
}
}
}

Expand Down
Loading

0 comments on commit d282084

Please sign in to comment.