Skip to content

Commit

Permalink
优化逻辑,撤销分离,并修改fuckTinker来保证不会崩溃(效果应该有的)
Browse files Browse the repository at this point in the history
Signed-off-by: ghhccghk <[email protected]>
  • Loading branch information
ghhccghk committed Sep 25, 2024
1 parent e224ba7 commit 5050902
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 152 deletions.
4 changes: 1 addition & 3 deletions app/src/main/kotlin/cn/lyric/getter/hook/MainHook.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import cn.lyric.getter.hook.app.Bodian
import cn.lyric.getter.hook.app.Flamingo
import cn.lyric.getter.hook.app.Kde
import cn.lyric.getter.hook.app.Kugou
import cn.lyric.getter.hook.app.KugouLite
import cn.lyric.getter.hook.app.Kuwo
import cn.lyric.getter.hook.app.LMusic
import cn.lyric.getter.hook.app.Luna
Expand Down Expand Up @@ -43,8 +42,7 @@ class MainHook : IXposedHookLoadPackage, IXposedHookZygoteInit {
"com.miui.player" -> initHooks(MiPlayer)
"com.netease.cloudmusic" -> initHooks(Netease)
"com.netease.cloudmusic.lite" -> initHooks(NeteaseLite)
"com.kugou.android"-> initHooks(Kugou)
"com.kugou.android.lite" -> initHooks(KugouLite)
"com.kugou.android", "com.kugou.android.lite" -> initHooks(Kugou)
"cn.kuwo.player" -> initHooks(Kuwo)
"remix.myplayer" -> initHooks(APlayer)
"cmccwm.mobilemusic" -> initHooks(MobileMusic)
Expand Down
177 changes: 103 additions & 74 deletions app/src/main/kotlin/cn/lyric/getter/hook/app/Kugou.kt
Original file line number Diff line number Diff line change
@@ -1,74 +1,103 @@
package cn.lyric.getter.hook.app

import android.content.Intent
import cn.lyric.getter.hook.BaseHook
import cn.lyric.getter.tool.HookTools
import cn.lyric.getter.tool.HookTools.eventTools
import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass
import com.github.kyuubiran.ezxhelper.EzXHelper.classLoader
import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook
import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder

object Kugou : BaseHook() {

override fun init() {
super.init()
HookTools.fuckTinker()
HookTools.openBluetoothA2dpOn()
HookTools.getApplication {
@Suppress("DEPRECATION") val verCode = it.packageManager?.getPackageInfo(it.packageName, 0)?.versionCode ?: 0
if (verCode < 10648) {
loadClass("com.kugou.framework.player.c").methodFinder()
.filterByParamTypes(HashMap::class.java).first { name == "a" }.createHook {
after {
val hashMap = it.args[0] as HashMap<*, *>
eventTools.sendLyric(hashMap[0].toString())
}
}
}
if (verCode < 12000) {
HookTools.MockFlyme().mock()
loadClass("android.support.v4.content.LocalBroadcastManager", classLoader).methodFinder().first { name == "sendBroadcast" }.createHook {
before {
val intent = it.args[0] as Intent
val action = intent.action
val message = intent.getStringExtra("lyric")
// 处理接收到的广播
if (action == "com.kugou.android.update_meizu_lyric") {
// 执行你需要的操作
message?.let { it1 -> HookTools.eventTools.sendLyric(it1) }
}
}
}
}
//后面换库了
if (verCode < 12999) {
HookTools.MockFlyme().mock()
loadClass("androidx.localbroadcastmanager.content.LocalBroadcastManager", classLoader).methodFinder()
.first { name == "sendBroadcast" }
.createHook {
before {
val intent = it.args[0] as Intent
val action = intent.action
val message = intent.getStringExtra("lyric")
// 处理接收到的广播
if (action == "com.kugou.android.update_meizu_lyric")
{ // 执行你需要的操作
message?.let { it1 -> HookTools.eventTools.sendLyric(it1) }
}
}
}
}
//// 不知道12之后哪些版本因为腾讯fuckTinker会导致异常,先留着
if (verCode >= 13000) {loadClass("com.kugou.framework.player.c").methodFinder()
.filterByParamTypes(HashMap::class.java).first { name == "a" }.createHook {
after {
val hashMap = it.args[0] as HashMap<*, *>
eventTools.sendLyric(hashMap[0].toString())
}
}

}
}
}
}
package cn.lyric.getter.hook.app

import android.content.Intent
import cn.lyric.getter.hook.BaseHook
import cn.lyric.getter.tool.HookTools
import cn.lyric.getter.tool.HookTools.eventTools
import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass
import com.github.kyuubiran.ezxhelper.EzXHelper.classLoader
import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook
import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder
import android.content.pm.PackageInfo
import android.os.Build
import cn.lyric.getter.tool.HookTools.fuckTinker

import cn.xiaowine.xkt.LogTool.log

//修复高版本安卓系统无法获取版本号
fun PackageInfo.getVersionCode() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
longVersionCode.toInt()
} else {
@Suppress("DEPRECATION")
versionCode
}

object Kugou : BaseHook() {
override fun init() {
super.init()
fuckTinker()
HookTools.openBluetoothA2dpOn()
HookTools.getApplication { app ->
val verCode:Int = app.packageManager?.getPackageInfo(app.packageName, 0)?.getVersionCode() ?: 0
when {
verCode <= 10000 && app.packageName == "com.kugou.android" -> {
//"第一个".log()
//verCode.log()
hookMethodForVersionA()
}
verCode <= 12009 && app.packageName == "com.kugou.android" -> {
//"第二个".log()
//verCode.log()
HookTools.MockFlyme().mock()
hookLocalBroadcast("android.support.v4.content.LocalBroadcastManager")
}
verCode <= 999999 && app.packageName == "com.kugou.android" -> {
//"第三个".log()
//verCode.log()
HookTools.MockFlyme().mock()
hookLocalBroadcast("androidx.localbroadcastmanager.content.LocalBroadcastManager")
}
//verCode >= 999999 && app.packageName == "com.kugou.android" -> {
//"第四个".log()
//verCode.log()
// hookMethodForVersionA()
// }
verCode <= 10648 && app.packageName == "com.kugou.android.lite" -> {
// "第五个".log()
//verCode.log()
hookMethodForVersionA()
}
verCode <= 10999 && app.packageName == "com.kugou.android.lite" -> {
//"第七个".log()
//verCode.log()
HookTools.MockFlyme().mock()
hookLocalBroadcast("android.support.v4.content.LocalBroadcastManager")
}
verCode > 11001 && app.packageName == "com.kugou.android.lite" -> {
//"第八个".log()
//verCode.log()
HookTools.MockFlyme().mock()
hookLocalBroadcast("androidx.localbroadcastmanager.content.LocalBroadcastManager")
}
}
}
}

private fun hookMethodForVersionA() {
loadClass("com.kugou.framework.player.c").methodFinder()
.filterByParamTypes(HashMap::class.java).first { name == "a" }
.createHook {
after {
val hashMap = it.args[0] as HashMap<*, *>
eventTools.sendLyric(hashMap[0].toString())
}
}
}

private fun hookLocalBroadcast(className: String) {
loadClass(className, classLoader).methodFinder()
.first { name == "sendBroadcast" }
.createHook {
before {
val intent = it.args[0] as Intent
val action = intent.action
val message = intent.getStringExtra("lyric")
//action.log()
if (action == "com.kugou.android.update_meizu_lyric") {
message?.let { it3 -> eventTools.sendLyric(it3)
}
}
}
}
}
}
73 changes: 0 additions & 73 deletions app/src/main/kotlin/cn/lyric/getter/hook/app/KugouLite.kt

This file was deleted.

4 changes: 2 additions & 2 deletions app/src/main/kotlin/cn/lyric/getter/tool/HookTools.kt
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ object HookTools {
after { param ->
val resultIntent = param.result as Intent
val application = param.args[0] as Application
val resultCode = resultIntent.getIntExtra("intent_return_code", -114514)
val resultCode = resultIntent.getIntExtra("intent_return_code", -2)
if (resultCode == 0) {
ClassLoaderProvider.classLoader = application.classLoader
}
Expand Down Expand Up @@ -203,4 +203,4 @@ object HookTools {
}
}

}
}

0 comments on commit 5050902

Please sign in to comment.