diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt index 79ccf9324..79302c07b 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt @@ -29,11 +29,11 @@ internal open class QQAndroidClient( ) { val tgtgtKey: ByteArray = generateTgtgtKey(device.guid) - var miscBitMap: Int = 150470524 + var miscBitMap: Int = 184024956 // 也可能是 150470524 ? var mainSigMap: Int = 16724722 var subSigMap: Int = 0x10400 //=66,560 - var ssoSequenceId: Int = 0 + var ssoSequenceId: Int = 85602 var openAppId: Long = 715019303L val apkVersionName: ByteArray = "8.2.0".toByteArray() diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt index 73ffa1cae..8cc650dc4 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt @@ -8,6 +8,7 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.login.PacketId import net.mamoe.mirai.qqandroid.utils.ECDH import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.io.encryptAndWrite +import net.mamoe.mirai.utils.io.writeIntLVPacket import net.mamoe.mirai.utils.io.writeQQ import net.mamoe.mirai.utils.io.writeShortLVByteArray @@ -46,7 +47,7 @@ inline class EncryptMethod(val value: UByte) { * * * **Packet Structure** - * byte 2 // head + * byte 2 // head flag * short 27 + 2 + body.size * ushort client.protocolVersion // const 8001 * ushort sequenceId @@ -74,27 +75,90 @@ internal inline fun PacketFactory<*, *>.buildOutgoingPacket( ): OutgoingPacket { val body = buildPacket { bodyBlock() } return OutgoingPacket(name, id, sequenceId, buildPacket { - // Head - writeByte(0x02) // head - writeShort((27 + 2 + body.remaining).toShort()) // orthodox algorithm - writeShort(client.protocolVersion) - writeShort(id.commandId.toShort()) - writeShort(sequenceId.toShort()) - writeQQ(client.account.id) - writeByte(3) // originally const - writeUByte(encryptMethod.value) - writeByte(0) // const8_always_0 - writeInt(2) // originally const - writeInt(client.appClientVersion) - writeInt(0) // constp_always_0 + writeIntLVPacket(lengthOffset = { it + 4 }) { - // Body - writePacket(body) + // Head + writeByte(0x02) // head + writeShort((27 + 2 + body.remaining).toShort()) // orthodox algorithm + writeShort(client.protocolVersion) + writeShort(sequenceId.toShort()) + writeShort(id.commandId.toShort()) + writeQQ(client.account.id) + writeByte(3) // originally const + writeUByte(encryptMethod.value) + writeByte(0) // const8_always_0 + writeInt(2) // originally const + writeInt(client.appClientVersion) + writeInt(0) // constp_always_0 - // Tail - writeByte(0x03) // tail + // Body + writePacket(body) + + // Tail + writeByte(0x03) // tail + } }) } +/* +00 00 01 64 +00 00 00 0A +02 +00 00 00 04 +00 + +00 00 00 0E +31 39 39 34 37 30 31 30 32 31 + +// encrypted with 16zero +F8 22 FC 39 2E 93 D7 73 A9 75 A2 D4 67 D2 C4 0D F1 02 1F A5 74 8F D8 0E 8E 86 AF 4F 4A A9 C7 74 56 71 B9 03 FC B3 DE A0 F3 14 B7 E9 54 3B 22 F0 24 10 BD 52 88 FC F3 58 66 6C B9 DB 4D 45 2C EF DE 2C C9 E1 1B 27 C7 E2 EF 38 6A 7E 8B 52 3A F4 93 40 E1 A9 ED 10 C3 A3 7E 64 17 02 8F 5C 01 92 72 C7 B8 E0 E1 A5 AF 0B 27 D0 05 C1 33 37 77 37 6D 96 0B B4 1F 41 98 42 35 2C 2A 00 E4 ED E8 C6 42 C4 F4 FD 13 39 D8 E8 19 50 E9 49 06 37 CA CF 42 C3 DD B5 DC B0 E9 87 83 6E 77 AE B6 5C F5 0D 6A 08 67 D0 61 B0 86 39 F7 2E AF E7 B7 C5 F4 42 40 A1 E1 A9 90 55 26 BD C6 03 73 73 BF A2 0A 3F E6 D3 8D B3 69 63 81 83 1E F1 72 5D FA FC 5E 65 B9 C1 FE 77 A8 50 80 F1 A5 DF E0 C4 96 1D 21 CD 5B 70 62 35 51 B5 37 1F 0B 4A 6D 97 92 D0 33 2B 56 11 CB 54 E5 6A A4 B9 97 04 B3 4B 27 A6 61 B7 77 5C C0 D1 6B 98 1C 7A 7B 57 28 3B 80 3B 81 88 69 D2 1C 91 B8 4A DE 0F FD A2 82 F8 3B F6 61 90 84 EF 4A 17 B6 30 1D 09 62 11 C7 BB 00 76 8E 0D 48 1B 11 F4 90 7A 13 0F 09 2B 4E 2F BE FD D9 57 07 18 29 4C 52 23 2E AE + +//decrypted: +00 00 00 C1 + 00 01 4E 6A + 20 02 ED BD + 20 02 ED BD + 01 00 00 00 00 00 00 00 00 00 01 00 + 00 00 00 4C + B8 12 0D E1 DA 19 AF D3 EB 36 76 BD 42 08 F6 DC A5 35 69 C0 8F F2 75 28 B4 CE 09 C9 B7 86 E3 5A 14 D1 0D CA 5D D4 CB 16 77 8B 32 8D 81 3B 3F D9 52 13 77 03 D3 F7 0E CD 7B 21 95 D2 59 CE 0C 31 D6 F1 38 2A FA 82 AD 60 + 00 00 00 14 + 47 72 61 79 55 69 6E 50 72 6F 2E 43 68 65 63 6B // serviceCommand + 00 00 00 08 + 02 B0 5B 8B + 00 00 00 13 + 38 35 38 34 31 34 33 36 39 32 31 31 39 39 33 + 00 00 00 04 + 00 22 + 7C 34 35 34 30 30 31 32 32 38 34 33 37 35 39 30 7C 41 38 2E 32 2E 30 2E 32 37 66 36 65 61 39 36 00 00 00 04 + +00 00 00 7A // UniPacket + 10 + 03 2C + 3C 42 00 01 4E 69 56 22 4B 51 51 2E 43 6F 6E 66 69 67 53 65 72 76 69 63 65 2E 43 6F 6E 66 69 67 53 65 72 76 61 6E 74 4F 62 6A 66 09 43 6C 69 65 6E 74 52 65 71 7D 00 00 35 08 00 01 06 03 72 65 71 1D 00 00 29 0A 12 20 02 ED BD 26 0A 31 39 39 34 37 30 31 30 32 31 36 00 46 12 31 30 31 31 30 33 30 38 33 38 34 36 30 36 32 30 34 32 0B 8C 98 0C A8 0C + + */ +/* +00 00 00 FC +00 00 00 0B +01 // packet type? +00 01 50 DE +00 + +00 00 00 0E +31 39 39 34 37 30 31 30 32 31 + +4E 32 1B 0F 07 DC 39 FE 14 78 ED 32 60 C4 07 31 9D CD 1A E0 C4 F6 21 6B EA 52 A4 F4 C1 D2 AF FB 17 5A C4 15 BC 35 BC 45 58 B6 11 19 DA AF 12 91 B5 A0 5D E4 FD 5A 49 1A 55 71 45 89 6F 3A 09 E6 32 F4 96 4A BB B2 EE 35 B9 39 63 5B FF E3 F0 94 69 67 99 64 A2 03 23 D0 F7 74 81 D1 20 F8 20 E6 F3 5B E6 C2 A2 25 6F 90 C5 DA CB D2 08 9D 5D 83 47 F3 27 3F 41 19 E5 9A C0 F2 05 70 B2 C5 DC F9 F1 6D 2A E9 92 84 9C 8D 98 04 E8 A1 3B 40 F2 71 60 9F 2C D8 6A CD 6B F5 2B 12 68 C7 9C 6B 0E D2 F7 16 40 47 72 3D 6A AF 36 2E 43 0C 96 28 C7 A6 B1 04 3B 29 F6 8B A4 E0 47 1A 3D 51 32 C7 AF A5 7E FD F7 50 FC 81 3D 13 45 60 6B 8D F4 A6 9B E7 46 D4 1E 9B 2C 00 D0 24 2F 0E 44 29 43 A8 F6 25 + + */ +/* +00 00 01 04 +00 00 00 0B +01 +00 01 50 CE +00 + +00 00 00 0E 31 39 39 34 37 30 31 30 32 31 D2 D5 37 8A 3C 47 B1 84 E2 94 B2 AF BF 14 70 4D 73 17 BB 38 BE 82 73 DF A2 87 E0 0A 7A BA 8A 81 71 77 1D E1 71 7F B7 C1 66 1D 8C 3D 41 4F 51 09 6A B7 B7 7B 88 28 A6 5A AB 7E 40 25 9B C8 35 9C C6 E2 3A 5F 94 1D 70 0F D7 89 4D 41 6B 7A 29 A2 70 77 3D F8 1D 32 65 D7 D8 D1 6D 13 42 9C 0C 72 DB 48 95 4B 66 EF B9 E6 E4 C1 3B 2C 36 B0 D7 3F E2 85 C8 2A 8C 65 0F 0B 1C F1 A7 C7 E1 1F 0C 32 F5 08 14 AA 5A 43 CD 8E A8 82 14 24 97 63 F0 53 79 4E 33 8D 5F 1C F8 1C 89 3B 39 44 CC A7 63 5F FC BF 87 42 89 2D A5 F4 BC B2 69 49 54 DD AE E6 3F A2 A2 98 DC 3B D4 A2 27 10 F2 06 42 93 C5 30 4A D4 FA F5 BA A5 B2 4B 56 45 59 94 CA 4C 4B 17 55 C7 23 AF F0 8B E5 DC 3A 1B B6 A7 2E 10 BB 9A E7 70 54 BA F5 4B 70 91 + + */ /** * Encrypt the [body] by [ECDH.shareKey], then write encryption arguments stuff. diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt index 6b3dff8ce..594ef93da 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt @@ -64,7 +64,7 @@ fun BytePacketBuilder.t8( fun BytePacketBuilder.t18( appId: Long, - appClientVersion: Int, + appClientVersion: Int = 0, uin: Long, constant1_always_0: Int = 0 ) { @@ -81,18 +81,17 @@ fun BytePacketBuilder.t18( } fun BytePacketBuilder.t106( - appId: Long, - subAppId: Long, + appId: Long = 16L, + subAppId: Long = 537062845L, appClientVersion: Int = 0, uin: Long, - ipAddress: String, n5_always_1: Int = 1, passwordMd5: ByteArray, salt: Long, - uinAccount: ByteArray, + uinAccountString: ByteArray, tgtgtKey: ByteArray, isGuidAvailable: Boolean = true, - guid: ByteArray?, // notnull if isGuidAvailable + guid: ByteArray?, loginType: LoginType ) { writeShort(0x106) @@ -101,7 +100,7 @@ fun BytePacketBuilder.t106( guid?.requireSize(16) writeShortLVPacket { - encryptAndWrite(md5(passwordMd5 + (salt.takeIf { it != 0L } ?: uin).toInt().toByteArray())) { + encryptAndWrite(md5(passwordMd5 + ByteArray(4) + (salt.takeIf { it != 0L } ?: uin).toInt().toByteArray())) { writeShort(4)//TGTGTVer writeInt(Random.nextInt()) writeInt(5)//ssoVer @@ -115,7 +114,7 @@ fun BytePacketBuilder.t106( } writeTime() - writeIP(ipAddress) + writeFully(ByteArray(4)) // ip // no need to write actual ip writeByte(n5_always_1.toByte()) writeFully(passwordMd5) writeFully(tgtgtKey) @@ -133,7 +132,8 @@ fun BytePacketBuilder.t106( } writeInt(subAppId.toInt()) writeInt(loginType.value) - writeShortLVByteArray(uinAccount) // TODO check if should be empty byte[] + writeShortLVByteArray(uinAccountString) + writeShort(0) } } } @@ -141,13 +141,13 @@ fun BytePacketBuilder.t106( fun BytePacketBuilder.t116( miscBitmap: Int, subSigMap: Int, - appIdList: LongArray + appIdList: LongArray = longArrayOf(1600000226L) ) { writeShort(0x116) writeShortLVPacket { writeByte(0) // _ver - writeInt(miscBitmap) - writeInt(subSigMap) + writeInt(miscBitmap) // 184024956 + writeInt(subSigMap) // 66560 writeByte(appIdList.size.toByte()) appIdList.forEach { writeInt(it.toInt()) @@ -156,8 +156,8 @@ fun BytePacketBuilder.t116( } fun BytePacketBuilder.t100( - appId: Long, - subAppId: Long, + appId: Long = 16, + subAppId: Long = 537062845, appClientVersion: Int, sigMap: Int ) { @@ -168,7 +168,7 @@ fun BytePacketBuilder.t100( writeInt(appId.toInt()) writeInt(subAppId.toInt()) writeInt(appClientVersion) - writeInt(sigMap) + writeInt(34869472) // 34869472? } shouldEqualsTo 22 } @@ -190,6 +190,7 @@ fun BytePacketBuilder.t107( fun BytePacketBuilder.t108( ksid: ByteArray ) { + require(ksid.size == 16) { "ksid should length 16" } writeShort(0x108) writeShortLVPacket { writeFully(ksid) @@ -257,6 +258,7 @@ fun BytePacketBuilder.t144( writeShort(0x144) writeShortLVPacket { encryptAndWrite(tgtgtKey) { + writeShort(5) // tlv count t109(androidId) t52d(androidDevInfo) t124(osType, osVersion, networkType, simInfo, unknown, apn) @@ -299,6 +301,7 @@ fun BytePacketBuilder.t124( writeShort(networkType.value.toShort()) writeShortLVByteArrayLimitedLength(simInfo, 16) writeShortLVByteArrayLimitedLength(unknown, 32) + writeShort(0) writeShortLVByteArrayLimitedLength(apn, 16) } } @@ -350,7 +353,7 @@ fun BytePacketBuilder.t128( writeByte(isGuidFromFileNull.toByte()) writeByte(isGuidAvailable.toByte()) writeByte(isGuidChanged.toByte()) - writeInt(guidFlag.toInt()) + writeInt(guidFlag.toInt()) // 11 00 00 00 writeShortLVByteArrayLimitedLength(buildModel, 32) writeShortLVByteArrayLimitedLength(guid, 16) writeShortLVByteArrayLimitedLength(buildBrand, 16) @@ -503,7 +506,7 @@ fun BytePacketBuilder.t187( ) { writeShort(0x187) writeShortLVPacket { - writeFully(macAddress) + writeFully(md5(macAddress)) // may be md5 } } @@ -512,7 +515,7 @@ fun BytePacketBuilder.t188( ) { writeShort(0x188) writeShortLVPacket { - writeFully(androidId) + writeFully(md5(androidId)) } } @@ -526,7 +529,7 @@ fun BytePacketBuilder.t194( } fun BytePacketBuilder.t191( - K: Int = 0 + K: Int = 0x82 ) { writeShort(0x191) writeShortLVPacket { @@ -567,7 +570,7 @@ fun BytePacketBuilder.t177( writeShort(0x177) writeShortLVPacket { writeByte(1) - writeLong(unknown1) + writeInt(unknown1.toInt()) writeShortLVString(unknown2) } } diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt index 28404d5ed..47d829983 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt @@ -33,7 +33,7 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse, Log writeShort(LoginType.PASSWORD.value.toShort()) val appId = 16L - val subAppId = 2L + val subAppId = 537062845L t18(appId, client.appClientVersion, client.account.id) t1(client.account.id, client.device.ipAddress) @@ -42,7 +42,6 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse, Log subAppId /* maybe 1*/, client.appClientVersion, client.account.id, - client.device.ipAddress, 1, client.account.passwordMd5, 0, @@ -63,10 +62,11 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse, Log // defaults true if (ConfigManager.get_loginWithPicSt()) appIdList = longArrayOf(1600000226L) */ - t116(client.miscBitMap, client.subSigMap, longArrayOf(1600000226L)) + t116(client.miscBitMap, client.subSigMap) t100(appId, subAppId, client.appClientVersion, client.mainSigMap or 0xC0) t107(0) - t108(byteArrayOf()) + + // t108(byteArrayOf()) // ignored: t104() t142(client.apkId) @@ -79,7 +79,8 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse, Log osVersion = client.device.version.release, networkType = client.networkType, simInfo = client.device.simInfo, - unknown = byteArrayOf(), apn = client.device.apn, + unknown = byteArrayOf(), + apn = client.device.apn, isGuidFromFileNull = false, isGuidAvailable = true, isGuidChanged = false, @@ -103,7 +104,25 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse, Log t141(client.device.simInfo, client.networkType, client.device.apn) t8(2052) - // ignored t511 because domain is null + t511( + listOf( + "tenpay.com", + "openmobile.qq.com", + "docs.qq.com", + "connect.qq.com", + "qzone.qq.com", + "vip.qq.com", + "qun.qq.com", + "game.qq.com", + "qqweb.qq.com", + "office.qq.com", + "ti.qq.com", + "mail.qq.com", + "qzone.com", + "mma.qq.com" + ) + ) + // ignored t172 because rollbackSig is null // ignored t185 because loginType is not SMS // ignored t400 because of first login @@ -114,7 +133,9 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse, Log t194(client.device.imsiMd5) } t191() - t201(N = byteArrayOf()) + + /* + t201(N = byteArrayOf())*/ val bssid = client.device.wifiBSSID val ssid = client.device.wifiSSID diff --git a/mirai-core/src/androidTest/java/EcdhCrypt.java b/mirai-core/src/androidTest/java/EcdhCrypt.java index 01c86bf1f..db1aebd2d 100644 --- a/mirai-core/src/androidTest/java/EcdhCrypt.java +++ b/mirai-core/src/androidTest/java/EcdhCrypt.java @@ -50,13 +50,13 @@ public class EcdhCrypt { return s; } - private byte[] calShareKeyByBouncycastle(final byte[] array) { + private byte[] calShareKeyByBouncycastle(final byte[] pubKey) { String str = "3046301006072A8648CE3D020106052B8104001F03320004"; try { - if (array.length < 30) { + if (pubKey.length < 30) { str = "302E301006072A8648CE3D020106052B8104001F031A00"; } - final PublicKey constructX509PublicKey = this.constructX509PublicKey(str + buf_to_string(array)); + final PublicKey constructX509PublicKey = this.constructX509PublicKey(str + buf_to_string(pubKey)); final KeyAgreement instance = KeyAgreement.getInstance("ECDH", "BC"); instance.init(EcdhCrypt.pkcs8PrivateKey); instance.doPhase(constructX509PublicKey, true); diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/OutputUtils.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/OutputUtils.kt index 4d627233e..cd498e72b 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/OutputUtils.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/io/OutputUtils.kt @@ -44,6 +44,15 @@ fun BytePacketBuilder.writeShortLVByteArray(byteArray: ByteArray): Int { return byteArray.size } +fun BytePacketBuilder.writeIntLVPacket(tag: UByte? = null, lengthOffset: ((Long) -> Long)? = null, builder: BytePacketBuilder.() -> Unit): Int = + BytePacketBuilder().apply(builder).build().use { + if (tag != null) writeUByte(tag) + val length = (lengthOffset?.invoke(it.remaining) ?: it.remaining).coerceAtMostOrFail(0xFFFFL) + writeInt(length.toInt()) + writePacket(it) + return length.toInt() + } + fun BytePacketBuilder.writeShortLVPacket(tag: UByte? = null, lengthOffset: ((Long) -> Long)? = null, builder: BytePacketBuilder.() -> Unit): Int = BytePacketBuilder().apply(builder).build().use { if (tag != null) writeUByte(tag) diff --git a/mirai-debug/build.gradle.kts b/mirai-debug/build.gradle.kts index 3f8bebf1f..a13766129 100644 --- a/mirai-debug/build.gradle.kts +++ b/mirai-debug/build.gradle.kts @@ -45,6 +45,8 @@ dependencies { implementation(project(":mirai-core-timpc")) // runtimeOnly(files("../mirai-core/build/classes/kotlin/jvm/main")) // classpath is not added correctly by IDE + implementation("org.bouncycastle:bcprov-jdk15:1.46") + implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") implementation("org.pcap4j:pcap4j-distribution:1.8.2") diff --git a/mirai-debug/src/main/kotlin/HexDebuggerGui.kt b/mirai-debug/src/main/kotlin/HexDebuggerGui.kt index 105323265..0e9ffaa51 100644 --- a/mirai-debug/src/main/kotlin/HexDebuggerGui.kt +++ b/mirai-debug/src/main/kotlin/HexDebuggerGui.kt @@ -115,8 +115,10 @@ class HexDebuggerGui : View("Mirai Hex Debugger") { withContext(Dispatchers.Main) { input.text = current updateOutputs( - current.toString() - .replace("\n", " ") + current?.lineSequence() + ?.map { it.substringBefore("//") } + ?.joinToString(" ") + .toString() .replace("UVarInt", "", ignoreCase = true) .replace("[", "") .replace("]", "") @@ -124,6 +126,7 @@ class HexDebuggerGui : View("Mirai Hex Debugger") { .replace(")", "") .replace(" ", " ") .replace(" ", " ") + .replace(" ", " ") .replace("_", "") .replace(",", "") .replace("`", "") diff --git a/mirai-debug/src/main/kotlin/test/ProtoTest.kt b/mirai-debug/src/main/kotlin/test/ProtoTest.kt index 6b81f94ff..29b43598c 100644 --- a/mirai-debug/src/main/kotlin/test/ProtoTest.kt +++ b/mirai-debug/src/main/kotlin/test/ProtoTest.kt @@ -33,10 +33,6 @@ suspend fun deserializeTest() { val bytes = """ - 23 00 40 67 42 E8 E5 08 2D D2 87 83 DB A6 D3 56 51 6F 43 A5 DB 67 CD 31 24 DE 2D AF 5A D2 13 F6 5D 7B D1 26 55 61 DB 95 80 C6 B1 74 66 DB C2 8C EC 71 0E DA 74 D0 6D 80 BB 88 B5 12 6A 30 24 DB 65 95 1C - 02 BC 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 82 00 00 00 35 08 03 00 00 00 BA 12 C3 02 00 00 00 04 67 41 4D 41 00 00 B1 8F 0B FC 61 05 00 00 00 01 73 52 47 42 00 AE CE 1C E9 00 00 00 3C 50 4C 54 45 FF F2 EC 55 96 73 F2 EF E4 79 AD 8F EC FD EC DC FF EB 23 70 4A FC FE F3 FD F7 ED F5 FA EC 30 84 5B AC E1 C3 12 78 49 CC E4 D0 99 C3 A9 12 87 53 E2 EF DE 49 7D 5F 3A 6F 51 BF F9 DA 26 D7 2D 0B 00 00 0B 58 49 44 41 54 58 C3 8C 98 8B 82 AC AA 0E 44 45 40 44 84 46 FD FF 7F BD AB E2 A3 9D D9 E7 EC 73 ED 99 7E 22 14 49 A5 92 30 CC AF 6B B8 AE 39 85 9E C6 79 98 E7 31 DB 47 FB 32 E7 FC 1A F3 EB E2 97 C4 08 EE D4 E0 39 C4 A0 DB E7 F3 E9 EF D7 60 8F FB 0D 57 D2 73 4E 29 0B C2 90 C2 9C C6 91 E9 13 83 5E 10 E6 5F 60 00 AB 41 F3 1C 42 18 46 20 84 CC ED FC 0F 86 E2 AF 7F 0F D4 E1 B1 03 33 64 4D C1 87 31 85 C0 BE 78 EA FA 35 7F 77 35 BC 6E 98 CF DF F4 48 73 C8 4C 30 84 70 CD 3A CC FF 17 88 97 1D EC 0F 13 84 64 D6 98 53 BC AE 30 0F BF 0C 9B ED 63 96 6D 6C F1 64 96 10 04 46 8E 32 82 59 E1 3F 11 7C 5F 6E 00 5A 7A 1E D9 85 AC 91 62 F1 CE 3B E7 5B B4 99 AF 89 CF C7 F5 74 5F 27 88 31 5F 86 31 F2 CC B7 8D 6E 9B FD D3 F3 30 BC B6 AF 5D C9 03 A2 A3 FD 34 7A 37 4D DB 3E AD CB F1 86 F0 45 C0 D2 E1 04 60 5F 25 BB 66 B1 67 30 42 9C 10 86 BF 81 F8 E9 02 99 37 40 44 D8 18 C4 C0 A1 EF D3 E2 4B F1 9F 4F 0B 27 84 6B F9 EF B3 AD 6F 2C D0 C2 63 EF A3 BE 91 25 C2 13 16 7F C7 F0 F5 C2 69 E2 1C 7A 6D AD 86 30 12 8A 29 6D 8B 3B 62 28 EB EA 44 F4 1C 6E 0E DC E3 BF 1F 65 BB D4 9B F7 BA D9 BC 19 60 50 7E B3 67 78 56 FB 15 08 F9 5C 1F 47 E6 34 A6 CA 14 B5 6D 25 E4 91 38 EC 7E 5A 4A 0A 71 59 97 13 42 1A 1F 07 26 D3 8D 71 B8 A2 93 7B C7 06 91 53 DD 62 24 A2 47 63 32 D3 88 5E 63 FA 97 BD 9B 12 E4 13 D2 29 2E 39 77 1C 98 FA E6 C5 47 AC 50 96 A9 85 1C DD BA 54 8D 65 C6 D1 08 7B 5E B8 FD 8E 1C 01 1A D9 7F 08 7D 8F 11 A4 A9 BA 69 F7 85 D0 32 5D 19 7F EE FD E7 4B 1E 6E 4D CA 29 57 D8 34 A6 E4 F6 68 1B 66 FF 93 47 1C CA 34 79 AC C5 00 91 CD E4 EB 21 BB 40 49 0A D2 5C 2B 91 D4 EB 04 04 6E F5 FB B4 EF DB 56 81 A0 9B E6 F9 A7 02 BD 22 22 DF 02 23 7D 1D 5B E8 62 63 DB 0B D3 A0 33 C1 4F AE A7 1C B7 69 8B A3 06 58 00 01 00 28 AD 53 81 65 DB 7D 7B 1E F4 AC 69 28 90 35 23 F3 0F DF AF 48 66 D9 06 13 0F AE 57 3C 5D AF CB 96 6C 5C CD 95 3F 2F 50 C9 01 15 00 10 A8 5D 2B 4F 33 AF 5D 99 B1 EF 92 DA C6 E5 A9 FB - - """.trimIndent() .replace("\n", " ") .replace("UVarInt", "", ignoreCase = true)