From 50c0f27c1bc46ff742c109cc628154faac6e240e Mon Sep 17 00:00:00 2001 From: liujiahua123123 <liujiahua123123@126.com> Date: Sat, 17 Aug 2019 21:42:38 +0800 Subject: [PATCH 1/3] ?? --- .../network/packet/server/Server0825Packet.kt | 13 ++++++++----- .../mirai/network/packet/server/ServerPacket.kt | 8 ++++++-- .../src/main/java/net/mamoe/mirai/util/Utils.kt | 2 ++ mirai-core/src/test/java/NetworkTest.java | 16 ++++++++++++++++ mirai-core/src/test/java/PacketTest.kt | 15 +++++++++++++-- 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt index 875ea59dd..6e78438d5 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt @@ -11,7 +11,7 @@ import java.io.DataInputStream class Server0825Packet(private val type: Type, inputStream: DataInputStream) : ServerPacket(inputStream) { lateinit var serverIP: String; - var loginTime: Long = 0; + var loginTime: Int = 0; lateinit var loginIP: String; lateinit var token: ByteArray; lateinit var tgtgtKey: ByteArray @@ -32,15 +32,18 @@ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : S when (data.readByte().toInt()) { 0xFE -> { + System.out.println("0xfe") serverIP = data.readIP() } 0X00 -> { - data.skip(16 - 2) - token = data.readNBytes(167 - (16 - 2)) - loginTime = data.readLong()//todo check + data.skip(67) + + loginTime = data.readInt() loginIP = data.readIP() - tgtgtKey = getRandomKey(16); + token = data.readNBytes(56) + tgtgtKey = getRandomKey(16) } + else -> { throw IllegalStateException() } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt index 3bc2adb79..705e24e4b 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt @@ -1,6 +1,7 @@ package net.mamoe.mirai.network.packet.server import net.mamoe.mirai.network.packet.Packet +import net.mamoe.mirai.util.toHexString import java.io.DataInputStream @@ -45,10 +46,13 @@ fun DataInputStream.readUntil(byte: Byte): ByteArray { return buff } +@ExperimentalUnsignedTypes fun DataInputStream.readIP(): String { var buff = "" - for (i in 0..12) {//todo: check that - buff += readByte().toInt() + for (i in 0..3) {//todo: check t// hat + val b = readByte() + buff += (b.toInt() + (128)).toString() + if(i !=3)buff+="." } return buff } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt b/mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt index 3018fcfa1..554f6f538 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt @@ -34,6 +34,8 @@ fun UByteArray.toHexString(separator: String = ", "): String = Utils.toHexString fun Byte.toHexString(): String = this.toString(16) + + @ExperimentalUnsignedTypes fun String.hexToBytes(): ByteArray = Protocol.hexToBytes(this) @ExperimentalUnsignedTypes diff --git a/mirai-core/src/test/java/NetworkTest.java b/mirai-core/src/test/java/NetworkTest.java index dc6e255c6..d2a6055ea 100644 --- a/mirai-core/src/test/java/NetworkTest.java +++ b/mirai-core/src/test/java/NetworkTest.java @@ -19,4 +19,20 @@ public class NetworkTest { } + + + public static String bytesToHex(byte[] bytes) { + StringBuffer sb = new StringBuffer(); + for(int i = 0; i < bytes.length; i++) { + String hex = Integer.toHexString(bytes[i] & 0xFF); + if(hex.length() < 2){ + sb.append(0); + } + sb.append(hex); + } + return sb.toString(); + } + + + } diff --git a/mirai-core/src/test/java/PacketTest.kt b/mirai-core/src/test/java/PacketTest.kt index 297cbf413..3dd9f02a3 100644 --- a/mirai-core/src/test/java/PacketTest.kt +++ b/mirai-core/src/test/java/PacketTest.kt @@ -1,6 +1,17 @@ +import net.mamoe.mirai.network.packet.client.Client0825ResponsePacket import net.mamoe.mirai.network.packet.server.Server0825Packet +import net.mamoe.mirai.util.TEACryptor +import net.mamoe.mirai.util.hexToBytes +import net.mamoe.mirai.util.hexToUBytes +import net.mamoe.mirai.util.toHexString +import java.io.DataInputStream +@ExperimentalUnsignedTypes fun main(){ - val v = "00 37 13 08 25 31 01 76 E4 B8 DD 03 00 00 00 01 2E 01 00 00 68 52 00 00 00 00 A4 F1 91 88 C9 82 14 99 0C 9E 56 55 91 23 C8 3D C3 47 F0 25 A1 8E 74 EF 1E 0B 32 5B 20 8A FA 3B 0B 52 8F 86 E6 04 F1 D6 F8 63 75 60 8C 0C 7D 06 D1 E0 22 F8 49 EF AF 61 EE 7E 69 72 EB 10 08 30 69 50 1C 84 A9 C2 16 D7 52 B9 1C 79 CA 5A CF FD BC AE D8 A6 BB DC 21 6E 79 26 E1 A2 23 11 AA B0 9A 49 39 72 ED 61 12 B6 88 4D A2 56 23 E9 92 11 92 27 4A 70 00 C9 01 7B 03"; - v.split(" ") + val data = "00 37 13 08 25 31 01 76 E4 B8 DD 03 00 00 00 01 2E 01 00 00 68 52 00 00 00 00 A4 F1 91 88 C9 82 14 99 0C 9E 56 55 91 23 C8 3D C3 47 F0 25 A1 8E 74 EF 1E 0B 32 5B 20 8A FA 3B 0B 52 8F 86 E6 04 F1 D6 F8 63 75 60 8C 0C 7D 06 D1 E0 22 F8 49 EF AF 61 EE 7E 69 72 EB 10 08 30 69 50 1C 84 A9 C2 16 D7 52 B9 1C 79 CA 5A CF FD BC AE D8 A6 BB DC 21 6E 79 26 E1 A2 23 11 AA B0 9A 49 39 72 ED 61 12 B6 88 4D A2 56 23 E9 92 11 92 27 4A 70 00 C9 01 7B 03" + val s = DataInputStream(data.hexToBytes().inputStream()) + val packet = Server0825Packet(Server0825Packet.Type.TYPE_08_25_31_01,s) + packet.decode() + System.out.println(packet.loginTime) + System.out.println(packet.loginIP) } \ No newline at end of file From 13b436152beb59837d1c505b409275b832cffe24 Mon Sep 17 00:00:00 2001 From: liujiahua123123 <liujiahua123123@126.com> Date: Sat, 17 Aug 2019 21:51:03 +0800 Subject: [PATCH 2/3] ?? --- .../mirai/network/packet/client/Client0836_622Packet.kt | 2 +- .../mamoe/mirai/network/packet/server/Server0825Packet.kt | 5 +++-- .../net/mamoe/mirai/network/packet/server/ServerPacket.kt | 3 +-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/Client0836_622Packet.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/Client0836_622Packet.kt index 095b9ccba..06ef7c89f 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/Client0836_622Packet.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/Client0836_622Packet.kt @@ -37,7 +37,7 @@ class Client0836_622Packet(private val qq: Int, private val password: String, pr this.writeQQ(qq) this.writeHex("00 06")//tag this.writeHex("00 78")//length - this.writeTLV0006(qq, password) + this.writeTLV0006(qq, password,) //fix this.writeHex(Protocol._0836_622_fix2) this.writeHex("00 1A")//tag diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt index 6e78438d5..b54f0a922 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt @@ -36,11 +36,12 @@ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : S serverIP = data.readIP() } 0X00 -> { - data.skip(67) + data.skip(5) + token = data.readNBytes(56) + data.skip(28) loginTime = data.readInt() loginIP = data.readIP() - token = data.readNBytes(56) tgtgtKey = getRandomKey(16) } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt index 705e24e4b..7cb413827 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt @@ -50,8 +50,7 @@ fun DataInputStream.readUntil(byte: Byte): ByteArray { fun DataInputStream.readIP(): String { var buff = "" for (i in 0..3) {//todo: check t// hat - val b = readByte() - buff += (b.toInt() + (128)).toString() + buff += (readByte().toInt()).toString() if(i !=3)buff+="." } return buff From 3f5fdfb3a4386242281c99b52983ec3b99d207f4 Mon Sep 17 00:00:00 2001 From: liujiahua123123 <liujiahua123123@126.com> Date: Sat, 17 Aug 2019 21:57:48 +0800 Subject: [PATCH 3/3] ?? --- .../mamoe/mirai/network/packet/server/Server0825Packet.kt | 8 ++++---- mirai-core/src/test/java/PacketTest.kt | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt index b54f0a922..ce364b602 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt @@ -11,9 +11,9 @@ import java.io.DataInputStream class Server0825Packet(private val type: Type, inputStream: DataInputStream) : ServerPacket(inputStream) { lateinit var serverIP: String; - var loginTime: Int = 0; - lateinit var loginIP: String; - lateinit var token: ByteArray; + var loginTime: Int = 0 + lateinit var loginIP: String + lateinit var token: ByteArray lateinit var tgtgtKey: ByteArray enum class Type { @@ -36,7 +36,7 @@ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : S serverIP = data.readIP() } 0X00 -> { - data.skip(5) + data.skip(4) token = data.readNBytes(56) data.skip(28) diff --git a/mirai-core/src/test/java/PacketTest.kt b/mirai-core/src/test/java/PacketTest.kt index 3dd9f02a3..31321c903 100644 --- a/mirai-core/src/test/java/PacketTest.kt +++ b/mirai-core/src/test/java/PacketTest.kt @@ -12,6 +12,7 @@ fun main(){ val s = DataInputStream(data.hexToBytes().inputStream()) val packet = Server0825Packet(Server0825Packet.Type.TYPE_08_25_31_01,s) packet.decode() + System.out.println(packet.token.toUByteArray().toHexString(" ")) System.out.println(packet.loginTime) System.out.println(packet.loginIP) } \ No newline at end of file