Skip to content

Commit c643f35

Browse files
committed
chore: 兼容9.2.15及以上版本
不支持获取完整数据包,怎么修???
1 parent 2a53f82 commit c643f35

File tree

4 files changed

+36
-11
lines changed

4 files changed

+36
-11
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919

2020
在3.2.3版本,模块添加了一个Hook,使其将NT登录流程强制降级到WT登录流程,这个方法或许会在QQ之后的某次更新失效.
2121

22+
#### 2025-10-07:
23+
24+
从9.2.15版本开始,模块无法再获取完整数据包,但经过临时修复可以获取到内层包数据.
25+
26+
所以要抓取完整数据包需要降级到9.2.10版本或以下.
27+
2228
---
2329

2430
## ⚠️ 警告

app/src/main/java/moe/ore/xposed/hook/AntiDetection.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package moe.ore.xposed.hook
22

3+
import moe.ore.xposed.hook.base.hostPackageName
4+
import moe.ore.xposed.hook.base.hostVersionCode
5+
import moe.ore.xposed.hook.enums.QQTypeEnum
6+
import moe.ore.xposed.utils.QQ_9_1_90_26520
7+
import moe.ore.xposed.utils.QQ_9_2_10_29175
38
import moe.ore.xposed.utils.XPClassloader.load
49
import moe.ore.xposed.utils.hookMethod
510

611
internal object AntiDetection {
712

813
operator fun invoke() {
914
disableSwitch()
10-
// isLoginByNTHook()
15+
isLoginByNTHook()
1116
}
1217

1318
private fun disableSwitch() {
@@ -17,7 +22,7 @@ internal object AntiDetection {
1722
val tag = param.args[1] as String
1823
when (tag) {
1924
"msf_init_optimize", "msf_network_service_switch_new" -> {
20-
param.result = false
25+
if (isSupportedDisablingNewService()) param.result = false
2126
}
2227
"wt_login_upgrade" -> {
2328
param.result = false
@@ -35,4 +40,15 @@ internal object AntiDetection {
3540
param.result = false
3641
}
3742
}
43+
44+
fun isSupportedQQVersion(packageName: String, versionCode: Long): Boolean {
45+
return QQTypeEnum.valueOfPackage(packageName) == QQTypeEnum.QQ &&
46+
versionCode in QQ_9_1_90_26520..QQ_9_2_10_29175
47+
}
48+
49+
fun isSupportedDisablingNewService(): Boolean {
50+
return (QQTypeEnum.valueOfPackage(hostPackageName) == QQTypeEnum.QQ &&
51+
hostVersionCode <= QQ_9_2_10_29175) ||
52+
QQTypeEnum.valueOfPackage(hostPackageName) == QQTypeEnum.TIM
53+
}
3854
}

app/src/main/java/moe/ore/xposed/hook/MainHook.kt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import moe.ore.xposed.utils.GlobalData
2222
import moe.ore.xposed.utils.HookUtil
2323
import moe.ore.xposed.utils.HttpUtil
2424
import moe.ore.xposed.utils.PacketDedupCache
25-
import moe.ore.xposed.utils.QQ_9_1_90_26520
25+
import moe.ore.xposed.utils.QQ_9_2_10_29175
2626
import moe.ore.xposed.utils.XPClassloader
2727
import moe.ore.xposed.utils.getPatchBuffer
2828
import moe.ore.xposed.utils.hookMethod
@@ -57,7 +57,7 @@ object MainHook {
5757
private val tlv_t = XPClassloader.load("oicq.wlogin_sdk.tlv_type.tlv_t")!!
5858
private val MD5 = XPClassloader.load("oicq.wlogin_sdk.tools.MD5")!!
5959
private val HighwaySessionData = XPClassloader.load("com.tencent.mobileqq.highway.openup.SessionInfo")!!
60-
// private val MSFKernel = XPClassloader.load("com.tencent.mobileqq.msfcore.MSFKernel")
60+
private val MSFKernel = XPClassloader.load("com.tencent.mobileqq.msfcore.MSFKernel")
6161

6262
lateinit var unhook: XC_MethodHook.Unhook
6363
val hasUnhook get() = ::unhook.isInitialized
@@ -67,16 +67,15 @@ object MainHook {
6767
HttpUtil.contextWeakReference = WeakReference(ctx)
6868
this.source = source
6969

70+
hookMSFKernelPacket()
7071
hookCodecWarpperInit()
7172
hookMD5()
7273
hookTlv()
7374
hookTea()
7475
hookSendPacket()
7576
hookBDH()
7677
hookParams()
77-
if (QQTypeEnum.valueOfPackage(hostPackageName) == QQTypeEnum.QQ && hostVersionCode >= QQ_9_1_90_26520) {
78-
hookReceData(true)
79-
} else hookReceData(false)
78+
hookReceData(AntiDetection.isSupportedQQVersion(hostPackageName, hostVersionCode))
8079
}
8180

8281
private fun hookCodecWarpperInit() {
@@ -94,8 +93,11 @@ object MainHook {
9493
}
9594

9695
private fun hookMSFKernelPacket() {
97-
hookMSFKernelSend()
98-
hookMSFKernelReceive()
96+
if (QQTypeEnum.valueOfPackage(hostPackageName) == QQTypeEnum.QQ &&
97+
hostVersionCode > QQ_9_2_10_29175) {
98+
hookMSFKernelSend()
99+
hookMSFKernelReceive()
100+
}
99101
}
100102

101103
private fun hookMSFKernelReceive() {
@@ -137,7 +139,7 @@ object MainHook {
137139
}
138140

139141
private fun hookMSFKernelSend() {
140-
/*MSFKernel?.hookMethod("sendPacket")?.after {
142+
MSFKernel?.hookMethod("sendPacket")?.after {
141143
val from = it.args[0]
142144
if (from.javaClass.name == "com.tencent.mobileqq.msfcore.MSFRequestAdapter") {
143145
val cmdField = from.javaClass.getDeclaredField("mCmd").also { it.isAccessible = true }
@@ -164,7 +166,7 @@ object MainHook {
164166
HttpUtil.sendTo(defaultUri, value, source)
165167
}
166168
}
167-
}*/
169+
}
168170
}
169171

170172
private fun hookBDH() {

app/src/main/java/moe/ore/xposed/utils/QQVersion.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ package moe.ore.xposed.utils
22

33
const val QQ_9_1_90_26520 = 10248L
44
const val QQ_9_1_90_26530 = 10252L
5+
const val QQ_9_2_10_29175 = 11310L

0 commit comments

Comments
 (0)