优化代码

This commit is contained in:
2022-01-25 05:14:44 +08:00
parent 674f0a9cd7
commit 4ecc694dd4

View File

@@ -172,25 +172,12 @@ class HookMain : IXposedHookLoadPackage {
} }
} }
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
if (lpparam == null) return
when (lpparam.packageName) {
/** Hook 自身 */
SELF_PACKAGE_NAME ->
XposedHelpers.findAndHookMethod(
"$SELF_PACKAGE_NAME.hook.HookMedium",
lpparam.classLoader,
"isHooked",
replaceToTrue
)
/** 经过测试 QQ 与 TIM 这两个是一个模子里面的东西,所以他们的类名也基本上是一样的 */
QQ_PACKAGE_NAME, TIM_PACKAGE_NAME -> {
lpparam.hookSystemWakeLock()
/** 增加通知栏文本显示守护状态 */ /** 增加通知栏文本显示守护状态 */
private fun XC_LoadPackage.LoadPackageParam.hookNotification() =
runWithoutError("Notification") { runWithoutError("Notification") {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"android.app.Notification\$Builder", "android.app.Notification\$Builder",
lpparam.classLoader, classLoader,
"setContentText", "setContentText",
CharSequence::class.java, CharSequence::class.java,
object : XC_MethodHook() { object : XC_MethodHook() {
@@ -204,9 +191,12 @@ class HookMain : IXposedHookLoadPackage {
} }
}) })
} }
/** 提示模块运行信息 QQ、TIM */
private fun XC_LoadPackage.LoadPackageParam.hookModuleRunningInfo() =
runWithoutError("SplashActivity") {
/** 判断是否开启提示模块运行信息 */ /** 判断是否开启提示模块运行信息 */
if (XPrefUtils.getBoolean(HookMedium.ENABLE_RUN_INFO)) if (XPrefUtils.getBoolean(HookMedium.ENABLE_RUN_INFO))
runWithoutError("SplashActivity") {
/** /**
* Hook 启动界面的第一个 [Activity] * Hook 启动界面的第一个 [Activity]
* QQ 和 TIM 都是一样的类 * QQ 和 TIM 都是一样的类
@@ -214,7 +204,7 @@ class HookMain : IXposedHookLoadPackage {
*/ */
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.activity.SplashActivity", "$QQ_PACKAGE_NAME.activity.SplashActivity",
lpparam.classLoader, classLoader,
"doOnCreate", "doOnCreate",
Bundle::class.java, Bundle::class.java,
object : XC_MethodHook() { object : XC_MethodHook() {
@@ -239,21 +229,24 @@ class HookMain : IXposedHookLoadPackage {
} }
}) })
} }
/** Hook CoreService QQ、TIM */
private fun XC_LoadPackage.LoadPackageParam.hookCoreService() {
/** Hook CoreService 指定方法 */ /** Hook CoreService 指定方法 */
if (lpparam.packageName == QQ_PACKAGE_NAME) if (packageName == QQ_PACKAGE_NAME)
runWithoutError("CoreServiceKnownMethods") { runWithoutError("CoreServiceKnownMethods") {
if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) { if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService", "$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader, "startTempService", replaceToNull classLoader, "startTempService", replaceToNull
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService", "$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader, "startCoreService", Boolean::class.java, replaceToNull classLoader, "startCoreService", Boolean::class.java, replaceToNull
) )
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService", "$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader, classLoader,
"onStartCommand", "onStartCommand",
Intent::class.java, Int::class.java, Int::class.java, Intent::class.java, Int::class.java, Int::class.java,
object : XC_MethodReplacement() { object : XC_MethodReplacement() {
@@ -268,7 +261,7 @@ class HookMain : IXposedHookLoadPackage {
if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) { if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService", "$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader, "onCreate", classLoader, "onCreate",
object : XC_MethodHook() { object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam?) { override fun afterHookedMethod(param: MethodHookParam?) {
@@ -289,7 +282,7 @@ class HookMain : IXposedHookLoadPackage {
if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_CHILD_BAN)) { if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_CHILD_BAN)) {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService\$KernelService", "$QQ_PACKAGE_NAME.app.CoreService\$KernelService",
lpparam.classLoader, "onCreate", classLoader, "onCreate",
object : XC_MethodHook() { object : XC_MethodHook() {
override fun afterHookedMethod(param: MethodHookParam?) { override fun afterHookedMethod(param: MethodHookParam?) {
@@ -304,7 +297,7 @@ class HookMain : IXposedHookLoadPackage {
}) })
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService\$KernelService", "$QQ_PACKAGE_NAME.app.CoreService\$KernelService",
lpparam.classLoader, classLoader,
"onStartCommand", "onStartCommand",
Intent::class.java, Int::class.java, Int::class.java, Intent::class.java, Int::class.java, Int::class.java,
object : XC_MethodReplacement() { object : XC_MethodReplacement() {
@@ -314,6 +307,36 @@ class HookMain : IXposedHookLoadPackage {
logD("hook CoreService\$KernelService [onCreate] OK!") logD("hook CoreService\$KernelService [onCreate] OK!")
} }
} }
}
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
if (lpparam == null) return
when (lpparam.packageName) {
/** Hook 自身 */
SELF_PACKAGE_NAME ->
XposedHelpers.findAndHookMethod(
"$SELF_PACKAGE_NAME.hook.HookMedium",
lpparam.classLoader,
"isHooked",
replaceToTrue
)
/** Hook TIM */
TIM_PACKAGE_NAME ->
lpparam.apply {
hookSystemWakeLock()
hookNotification()
hookModuleRunningInfo()
hookCoreService()
logD("hook Completed!")
}
/** Hook QQ */
QQ_PACKAGE_NAME -> {
lpparam.apply {
hookSystemWakeLock()
hookNotification()
hookModuleRunningInfo()
hookCoreService()
}
/** 关闭保守模式后不再仅仅作用于系统电源锁 */ /** 关闭保守模式后不再仅仅作用于系统电源锁 */
if (!XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_WHITE_MODE)) { if (!XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_WHITE_MODE)) {
runWithoutError("BaseChatPie(first time)") { runWithoutError("BaseChatPie(first time)") {
@@ -327,13 +350,8 @@ class HookMain : IXposedHookLoadPackage {
override fun beforeHookedMethod(param: MethodHookParam?) { override fun beforeHookedMethod(param: MethodHookParam?) {
val self = param?.thisObject as? Activity ?: return val self = param?.thisObject as? Activity ?: return
val name = self.packageName
val version = self.versionName val version = self.versionName
/** 这个地方我们只处理 QQ */ runWithoutError("BaseChatPie") { lpparam.hookQQBaseChatPie(version) }
runWithoutError("BaseChatPie") {
if (name == QQ_PACKAGE_NAME)
lpparam.hookQQBaseChatPie(version)
}
} }
}) })
} }
@@ -342,7 +360,6 @@ class HookMain : IXposedHookLoadPackage {
* 一个不知道是什么作用的电源锁 * 一个不知道是什么作用的电源锁
* 同样直接干掉 * 同样直接干掉
*/ */
if (lpparam.packageName == QQ_PACKAGE_NAME)
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.tencent.mars.ilink.comm.WakerLock", "com.tencent.mars.ilink.comm.WakerLock",
lpparam.classLoader, lpparam.classLoader,
@@ -392,7 +409,6 @@ class HookMain : IXposedHookLoadPackage {
* 讯哥的程序员真的有你的 * 讯哥的程序员真的有你的
* 2022/1/25 后期查证:锁屏界面消息快速回复窗口 * 2022/1/25 后期查证:锁屏界面消息快速回复窗口
*/ */
if (lpparam.packageName == QQ_PACKAGE_NAME)
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.activity.QQLSActivity\$14", "$QQ_PACKAGE_NAME.activity.QQLSActivity\$14",
lpparam.classLoader, lpparam.classLoader,
@@ -409,7 +425,6 @@ class HookMain : IXposedHookLoadPackage {
* 里面有各种使用 Handler 和 Timer 的各种耗时常驻后台耗电办法持续接收消息 * 里面有各种使用 Handler 和 Timer 的各种耗时常驻后台耗电办法持续接收消息
* 直接循环全部方法全部干掉 * 直接循环全部方法全部干掉
*/ */
if (lpparam.packageName == QQ_PACKAGE_NAME)
lpparam.classLoader.loadClass("com.tencent.qapmsdk.qqbattery.monitor.WakeLockMonitor") lpparam.classLoader.loadClass("com.tencent.qapmsdk.qqbattery.monitor.WakeLockMonitor")
.apply { .apply {
val lockClazz = val lockClazz =