From 011417249f0f4aaf548d6a9a6413c8addcc6a6cd Mon Sep 17 00:00:00 2001 From: Him188moe <Him188@mamoe.net> Date: Sat, 17 Aug 2019 22:09:26 +0800 Subject: [PATCH 1/4] update --- .../src/main/java/net/mamoe/mirai/network/Robot.kt | 2 +- .../packet/client/ClientSendMessagePacket.kt | 11 +++++++++++ .../client/{ => login}/ClientHeartbeatPacket.kt | 8 ++++++-- .../{ => login}/ClientPasswordSubmissionPacket.kt | 7 ++++--- .../{ => login}/ClientServerRedirectionPacket.kt | 6 +++++- .../ClientTouchPacket.kt} | 14 +++++++++++--- .../network/packet/server/Server0825Packet.kt | 3 +++ 7 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientSendMessagePacket.kt rename mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/{ => login}/ClientHeartbeatPacket.kt (66%) rename mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/{ => login}/ClientPasswordSubmissionPacket.kt (95%) rename mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/{ => login}/ClientServerRedirectionPacket.kt (82%) rename mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/{ClientLoginPacket.kt => login/ClientTouchPacket.kt} (91%) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt index 204fd8404..2b05d4da0 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt @@ -11,7 +11,7 @@ import io.netty.channel.socket.nio.NioSocketChannel import io.netty.handler.codec.bytes.ByteArrayDecoder import io.netty.handler.codec.bytes.ByteArrayEncoder import net.mamoe.mirai.network.packet.client.ClientPacket -import net.mamoe.mirai.network.packet.client.ClientServerRedirectionPacket +import net.mamoe.mirai.network.packet.client.login.ClientServerRedirectionPacket import net.mamoe.mirai.network.packet.client.writeHex import net.mamoe.mirai.network.packet.server.Server0825Packet import net.mamoe.mirai.network.packet.server.ServerPacket diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientSendMessagePacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientSendMessagePacket.kt new file mode 100644 index 000000000..85244ef9b --- /dev/null +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientSendMessagePacket.kt @@ -0,0 +1,11 @@ +package net.mamoe.mirai.network.packet.client + +/** + * @author Him188moe @ Mirai Project + */ +@ExperimentalUnsignedTypes +class ClientSendMessagePacket : ClientPacket() { + override fun encode() { + + } +} \ No newline at end of file diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientHeartbeatPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientHeartbeatPacket.kt similarity index 66% rename from mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientHeartbeatPacket.kt rename to mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientHeartbeatPacket.kt index 31904d469..ec5457c86 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientHeartbeatPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientHeartbeatPacket.kt @@ -1,7 +1,11 @@ -package net.mamoe.mirai.network.packet.client +package net.mamoe.mirai.network.packet.client.login import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.network.packet.PacketId +import net.mamoe.mirai.network.packet.client.ClientPacket +import net.mamoe.mirai.network.packet.client.writeHex +import net.mamoe.mirai.network.packet.client.writeQQ +import net.mamoe.mirai.network.packet.client.writeRandom import net.mamoe.mirai.util.TEACryptor import java.io.IOException @@ -9,7 +13,7 @@ import java.io.IOException * @author Him188moe @ Mirai Project */ @ExperimentalUnsignedTypes -@PacketId("00 58") +@PacketId("00 58")//todo check class ClientHeartbeatPacket : ClientPacket() { var qq: Int = 0 var sessionKey: ByteArray? = null//登录后获得 diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPasswordSubmissionPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt similarity index 95% rename from mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPasswordSubmissionPacket.kt rename to mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt index fb633157e..070da00f9 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPasswordSubmissionPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt @@ -1,7 +1,8 @@ -package net.mamoe.mirai.network.packet.client +package net.mamoe.mirai.network.packet.client.login import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.network.packet.PacketId +import net.mamoe.mirai.network.packet.client.* import net.mamoe.mirai.util.TEACryptor import net.mamoe.mirai.util.getCrc32 import net.mamoe.mirai.util.getRandomKey @@ -14,7 +15,7 @@ import java.net.InetAddress * * @author Him188moe @ Mirai Project */ -@PacketId("08 36 31 03") +@PacketId("08 36 31 03")//may be 08 36, 31 03 has another meaning @ExperimentalUnsignedTypes class ClientPasswordSubmissionPacket(private val qq: Int, private val password: String, private val loginTime: ByteArray, private val loginIP: ByteArray, private val tgtgtKey: ByteArray, private val token0825: ByteArray) : ClientPacket() { @ExperimentalUnsignedTypes @@ -81,7 +82,7 @@ class ClientPasswordSubmissionPacket(private val qq: Int, private val password: this.writeHex("01 02")//tag this.writeHex("00 62")//length - this.writeHex("00 01")//word? + this.writeHex("00 01")//word this.writeHex("04 EB B7 C1 86 F9 08 96 ED 56 84 AB 50 85 2E 48")//key this.writeHex("00 38")//length //value diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientServerRedirectionPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientServerRedirectionPacket.kt similarity index 82% rename from mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientServerRedirectionPacket.kt rename to mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientServerRedirectionPacket.kt index 1d044b953..63b6ced5d 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientServerRedirectionPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientServerRedirectionPacket.kt @@ -1,7 +1,11 @@ -package net.mamoe.mirai.network.packet.client +package net.mamoe.mirai.network.packet.client.login import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.network.packet.PacketId +import net.mamoe.mirai.network.packet.client.ClientPacket +import net.mamoe.mirai.network.packet.client.writeHex +import net.mamoe.mirai.network.packet.client.writeIp +import net.mamoe.mirai.network.packet.client.writeQQ import net.mamoe.mirai.util.TEACryptor import net.mamoe.mirai.util.hexToBytes import java.io.IOException diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientLoginPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt similarity index 91% rename from mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientLoginPacket.kt rename to mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt index 1f97c6adc..1e9b1de34 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientLoginPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt @@ -1,18 +1,26 @@ -package net.mamoe.mirai.network.packet.client +package net.mamoe.mirai.network.packet.client.login import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.network.packet.PacketId +import net.mamoe.mirai.network.packet.client.ClientPacket +import net.mamoe.mirai.network.packet.client.writeHex +import net.mamoe.mirai.network.packet.client.writeIp +import net.mamoe.mirai.network.packet.client.writeQQ import net.mamoe.mirai.util.ByteArrayDataOutputStream import net.mamoe.mirai.util.TEACryptor import net.mamoe.mirai.util.toHexString import java.io.IOException /** + * The packet to touch server. + * + * @see net.mamoe.mirai.network.packet.server.Server0825Packet + * * @author Him188moe @ Mirai Project */ @ExperimentalUnsignedTypes @PacketId("08 25 31 01") -class ClientLoginPacket : ClientPacket() { +class ClientTouchPacket : ClientPacket() { var qq: Int = 0 @ExperimentalUnsignedTypes @@ -49,7 +57,7 @@ class ClientLoginPacket : ClientPacket() { @ExperimentalUnsignedTypes fun main() { - val pk = ClientLoginPacket() + val pk = ClientTouchPacket() pk.qq = 1994701021 pk.encode() pk.writeHex(Protocol.tail) 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 ce364b602..996937b3c 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 @@ -6,6 +6,9 @@ import java.io.DataInputStream /** * A packet received when logging in, used to redirect server address * + * @see net.mamoe.mirai.network.packet.client.login.ClientServerRedirectionPacket + * @see net.mamoe.mirai.network.packet.client.login.ClientPasswordSubmissionPacket + * * @author Him188moe @ Mirai Project */ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : ServerPacket(inputStream) { From fdde4cae5abcef11043741731c1dd7bd4fee8974 Mon Sep 17 00:00:00 2001 From: Him188moe <Him188@mamoe.net> Date: Sat, 17 Aug 2019 22:14:05 +0800 Subject: [PATCH 2/4] update --- mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt | 4 ++-- .../mirai/network/packet/client/login/ClientTouchPacket.kt | 2 +- .../net/mamoe/mirai/network/packet/server/ServerPacket.kt | 5 ++--- .../{Server0825Packet.kt => ServerTouchResponsePacket.kt} | 2 +- mirai-core/src/test/java/NetworkTest.java | 6 ------ mirai-core/src/test/java/PacketTest.kt | 6 ++---- 6 files changed, 8 insertions(+), 17 deletions(-) rename mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/{Server0825Packet.kt => ServerTouchResponsePacket.kt} (93%) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt index 2b05d4da0..df83d8216 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt @@ -13,8 +13,8 @@ import io.netty.handler.codec.bytes.ByteArrayEncoder import net.mamoe.mirai.network.packet.client.ClientPacket import net.mamoe.mirai.network.packet.client.login.ClientServerRedirectionPacket import net.mamoe.mirai.network.packet.client.writeHex -import net.mamoe.mirai.network.packet.server.Server0825Packet import net.mamoe.mirai.network.packet.server.ServerPacket +import net.mamoe.mirai.network.packet.server.ServerTouchResponsePacket import net.mamoe.mirai.utils.MiraiLogger import java.net.DatagramPacket import java.net.InetSocketAddress @@ -31,7 +31,7 @@ class Robot(val number: Int) { @ExperimentalUnsignedTypes internal fun onPacketReceived(packet: ServerPacket) { packet.decode() - if (packet is Server0825Packet) { + if (packet is ServerTouchResponsePacket) { connect(packet.serverIP) sendPacket(ClientServerRedirectionPacket(packet.serverIP, number)) } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt index 1e9b1de34..b3afbdee2 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt @@ -14,7 +14,7 @@ import java.io.IOException /** * The packet to touch server. * - * @see net.mamoe.mirai.network.packet.server.Server0825Packet + * @see net.mamoe.mirai.network.packet.server.ServerTouchResponsePacket * * @author Him188moe @ Mirai Project */ 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 28f14998c..47bdc7a44 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,7 +1,6 @@ package net.mamoe.mirai.network.packet.server import net.mamoe.mirai.network.packet.Packet -import net.mamoe.mirai.network.packet.client.toHexString import net.mamoe.mirai.util.toHexString import java.io.DataInputStream @@ -23,8 +22,8 @@ abstract class ServerPacket(val input: DataInputStream) : Packet { val idBytes = stream.readUntil(11) return when (idBytes.joinToString("") { it.toString(16) }) { - "08 25 31 01" -> Server0825Packet(Server0825Packet.Type.TYPE_08_25_31_01, stream) - "08 25 31 02" -> Server0825Packet(Server0825Packet.Type.TYPE_08_25_31_02, stream) + "08 25 31 01" -> ServerTouchResponsePacket(ServerTouchResponsePacket.Type.TYPE_08_25_31_01, stream) + "08 25 31 02" -> ServerTouchResponsePacket(ServerTouchResponsePacket.Type.TYPE_08_25_31_02, stream) else -> throw UnsupportedOperationException() } 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/ServerTouchResponsePacket.kt similarity index 93% rename from mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/Server0825Packet.kt rename to mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerTouchResponsePacket.kt index 5aac96a7e..72cfa0b72 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/ServerTouchResponsePacket.kt @@ -11,7 +11,7 @@ import java.io.DataInputStream * * @author Him188moe @ Mirai Project */ -class Server0825Packet(private val type: Type, inputStream: DataInputStream) : ServerPacket(inputStream) { +class ServerTouchResponsePacket(private val type: Type, inputStream: DataInputStream) : ServerPacket(inputStream) { lateinit var serverIP: String; var loginTime: Int = 0 diff --git a/mirai-core/src/test/java/NetworkTest.java b/mirai-core/src/test/java/NetworkTest.java index d2a6055ea..2a05a5bfd 100644 --- a/mirai-core/src/test/java/NetworkTest.java +++ b/mirai-core/src/test/java/NetworkTest.java @@ -1,9 +1,3 @@ -import net.mamoe.mirai.network.packet.server.Server0825Packet; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.InputStream; - /** * @author Him188moe @ Mirai Project */ diff --git a/mirai-core/src/test/java/PacketTest.kt b/mirai-core/src/test/java/PacketTest.kt index 423d771d5..51775c691 100644 --- a/mirai-core/src/test/java/PacketTest.kt +++ b/mirai-core/src/test/java/PacketTest.kt @@ -1,8 +1,6 @@ import net.mamoe.mirai.network.packet.client.toHexString -import net.mamoe.mirai.network.packet.server.Server0825Packet -import net.mamoe.mirai.util.TEACryptor +import net.mamoe.mirai.network.packet.server.ServerTouchResponsePacket import net.mamoe.mirai.util.hexToBytes -import net.mamoe.mirai.util.hexToUBytes import net.mamoe.mirai.util.toHexString import java.io.DataInputStream @@ -10,7 +8,7 @@ import java.io.DataInputStream fun main(){ 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) + val packet = ServerTouchResponsePacket(ServerTouchResponsePacket.Type.TYPE_08_25_31_01, s) packet.decode() System.out.println(packet.token.toUByteArray().toHexString(" ")) System.out.println(packet.loginTime.toHexString(" ")) From 21ffb8a7f06e7b04f9fbb15e200ba7215be315a9 Mon Sep 17 00:00:00 2001 From: Him188moe <Him188@mamoe.net> Date: Sat, 17 Aug 2019 22:37:39 +0800 Subject: [PATCH 3/4] update --- .../main/java/net/mamoe/mirai/network/Robot.kt | 18 +++++++++++++++--- .../network/packet/client/ClientPacket.kt | 8 ++++---- .../login/ClientPasswordSubmissionPacket.kt | 2 +- .../login/ClientServerRedirectionPacket.kt | 4 ++-- .../packet/client/login/ClientTouchPacket.kt | 15 ++++++++------- .../network/packet/server/ServerPacket.kt | 2 +- .../packet/server/ServerTouchResponsePacket.kt | 4 ++-- 7 files changed, 33 insertions(+), 20 deletions(-) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt index df83d8216..4a63cc215 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt @@ -11,6 +11,7 @@ import io.netty.channel.socket.nio.NioSocketChannel import io.netty.handler.codec.bytes.ByteArrayDecoder import io.netty.handler.codec.bytes.ByteArrayEncoder import net.mamoe.mirai.network.packet.client.ClientPacket +import net.mamoe.mirai.network.packet.client.login.ClientPasswordSubmissionPacket import net.mamoe.mirai.network.packet.client.login.ClientServerRedirectionPacket import net.mamoe.mirai.network.packet.client.writeHex import net.mamoe.mirai.network.packet.server.ServerPacket @@ -24,7 +25,7 @@ import java.net.InetSocketAddress * * @author Him188moe @ Mirai Project */ -class Robot(val number: Int) { +class Robot(val number: Int, private val password: String) { private lateinit var channel: Channel @@ -32,8 +33,19 @@ class Robot(val number: Int) { internal fun onPacketReceived(packet: ServerPacket) { packet.decode() if (packet is ServerTouchResponsePacket) { - connect(packet.serverIP) - sendPacket(ClientServerRedirectionPacket(packet.serverIP, number)) + if (packet.serverIP != null) {//redirection + connect(packet.serverIP!!) + sendPacket(ClientServerRedirectionPacket(packet.serverIP!!, number)) + } else {//password submission + sendPacket(ClientPasswordSubmissionPacket( + qq = this.number, + password = this.password, + loginTime = packet.loginTime, + loginIP = packet.loginIP, + token0825 = packet.token, + tgtgtKey = packet.tgtgtKey + )) + } } } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPacket.kt index a39bcdb66..ede45f97b 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPacket.kt @@ -58,7 +58,7 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet { @Throws(IOException::class) -fun DataOutputStream.writeIp(ip: String) { +fun DataOutputStream.writeIP(ip: String) { for (s in ip.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()) { this.writeByte(s.toInt()) } @@ -78,7 +78,7 @@ fun DataOutputStream.writeHex(hex: String) { @ExperimentalUnsignedTypes @Throws(IOException::class) -fun DataOutputStream.writeTLV0006(qq: Int, password: String, loginTime: ByteArray, loginIP: ByteArray, tgtgtKey: ByteArray) { +fun DataOutputStream.writeTLV0006(qq: Int, password: String, loginTime: Int, loginIP: String, tgtgtKey: ByteArray) { ByteArrayDataOutputStream().let { it.writeRandom(4) it.writeHex("00 02") @@ -89,10 +89,10 @@ fun DataOutputStream.writeTLV0006(qq: Int, password: String, loginTime: ByteArra val md5_1 = md5(password); val md5_2 = md5(md5_1 + "00 00 00 00".hexToBytes() + qq.toByteArray()) it.write(md5_1) - it.write(loginTime)//todo FIXED 12(maybe 11???) bytes??? check that + it.writeInt(loginTime)//todo FIXED 12(maybe 11???) bytes??? check that it.writeByte(0); it.writeZero(4 * 3) - it.write(loginIP) + it.writeIP(loginIP) it.writeHex("00 10") it.writeHex("15 74 C4 89 85 7A 19 F5 5E A9 C9 A3 5E 8A 5A 9B") it.write(tgtgtKey) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt index 070da00f9..dc2d7f3b7 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt @@ -17,7 +17,7 @@ import java.net.InetAddress */ @PacketId("08 36 31 03")//may be 08 36, 31 03 has another meaning @ExperimentalUnsignedTypes -class ClientPasswordSubmissionPacket(private val qq: Int, private val password: String, private val loginTime: ByteArray, private val loginIP: ByteArray, private val tgtgtKey: ByteArray, private val token0825: ByteArray) : ClientPacket() { +class ClientPasswordSubmissionPacket(private val qq: Int, private val password: String, private val loginTime: Int, private val loginIP: String, private val tgtgtKey: ByteArray, private val token0825: ByteArray) : ClientPacket() { @ExperimentalUnsignedTypes override fun encode() { this.writeQQ(qq) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientServerRedirectionPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientServerRedirectionPacket.kt index 63b6ced5d..8820241f5 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientServerRedirectionPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientServerRedirectionPacket.kt @@ -4,7 +4,7 @@ import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.network.packet.PacketId import net.mamoe.mirai.network.packet.client.ClientPacket import net.mamoe.mirai.network.packet.client.writeHex -import net.mamoe.mirai.network.packet.client.writeIp +import net.mamoe.mirai.network.packet.client.writeIP import net.mamoe.mirai.network.packet.client.writeQQ import net.mamoe.mirai.util.TEACryptor import net.mamoe.mirai.util.hexToBytes @@ -32,7 +32,7 @@ class ClientServerRedirectionPacket(private val serverIP: String, private val qq this.writeHex(Protocol._0825data2) this.writeQQ(qq) this.writeHex("00 01 00 00 03 09 00 0C 00 01") - this.writeIp(serverIP) + this.writeIP(serverIP) this.writeHex("01 6F A1 58 22 01 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14 00 1D 01 03 00 19") this.writeHex(Protocol.publicKey) } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt index b3afbdee2..8c4699db8 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientTouchPacket.kt @@ -4,7 +4,7 @@ import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.network.packet.PacketId import net.mamoe.mirai.network.packet.client.ClientPacket import net.mamoe.mirai.network.packet.client.writeHex -import net.mamoe.mirai.network.packet.client.writeIp +import net.mamoe.mirai.network.packet.client.writeIP import net.mamoe.mirai.network.packet.client.writeQQ import net.mamoe.mirai.util.ByteArrayDataOutputStream import net.mamoe.mirai.util.TEACryptor @@ -21,6 +21,7 @@ import java.io.IOException @ExperimentalUnsignedTypes @PacketId("08 25 31 01") class ClientTouchPacket : ClientPacket() { + //已经完成测试 var qq: Int = 0 @ExperimentalUnsignedTypes @@ -42,9 +43,9 @@ class ClientTouchPacket : ClientPacket() { this.writeHex(Protocol._0825data2) this.writeQQ(qq) this.writeHex("00 00 00 00 03 09 00 08 00 01") - this.writeIp("192.168.1.1"); - //this.writeIp(Protocol.SERVER_IP[2]); - //this.writeIp("123456789") + this.writeIP("192.168.1.1"); + //this.writeIP(Protocol.SERVER_IP[2]); + //this.writeIP("123456789") this.writeHex("00 02 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14 00 1D 01 02 00 19") this.writeHex(Protocol.publicKey) println(this.toUByteArray().toHexString(" ")) @@ -78,13 +79,13 @@ fun main() { println(object : ByteArrayDataOutputStream() { @Throws(IOException::class) override fun toUByteArray(): UByteArray { - //this.writeIp("192.168.1.1") + //this.writeIP("192.168.1.1") this.writeHex(Protocol._0825data0) this.writeHex(Protocol._0825data2) this.writeQQ(1994701021) this.writeHex("00 00 00 00 03 09 00 08 00 01") - //this.writeIp(Protocol.SERVER_IP.get(2)); - this.writeIp("192.168.1.1") + //this.writeIP(Protocol.SERVER_IP.get(2)); + this.writeIP("192.168.1.1") this.writeHex("00 02 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14 00 1D 01 02 00 19") this.writeHex(Protocol.publicKey) return super.toUByteArray() 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 47bdc7a44..9b46c785a 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 @@ -53,7 +53,7 @@ fun DataInputStream.readIP(): String { val byte = readByte(); buff += (byte.toUByte().toString()) if(i !=3)buff+="." - System.out.println(byte.toHexString()) + println(byte.toHexString()) } return buff } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerTouchResponsePacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerTouchResponsePacket.kt index 72cfa0b72..e45caf75c 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerTouchResponsePacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerTouchResponsePacket.kt @@ -12,7 +12,7 @@ import java.io.DataInputStream * @author Him188moe @ Mirai Project */ class ServerTouchResponsePacket(private val type: Type, inputStream: DataInputStream) : ServerPacket(inputStream) { - lateinit var serverIP: String; + var serverIP: String? = null; var loginTime: Int = 0 lateinit var loginIP: String @@ -35,7 +35,7 @@ class ServerTouchResponsePacket(private val type: Type, inputStream: DataInputSt when (data.readByte().toInt()) { 0xFE -> { - System.out.println("0xfe") + println("0xfe") serverIP = data.readIP() } 0X00 -> { From 699d29c663d4c002b6a817ceeca088db5657d53f Mon Sep 17 00:00:00 2001 From: Him188moe <Him188@mamoe.net> Date: Sat, 17 Aug 2019 22:57:22 +0800 Subject: [PATCH 4/4] update --- .../java/net/mamoe/mirai/MiraiServer.java | 2 +- .../java/net/mamoe/mirai/network/Robot.kt | 5 ++- .../login/ClientPasswordSubmissionPacket.kt | 32 +++++++++++++------ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java b/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java index 386357336..6f2e5225b 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java +++ b/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java @@ -95,7 +95,7 @@ public class MiraiServer { }); */ - Robot robot = new Robot(1994701021); + Robot robot = new Robot(1994701021, "xiaoqqq"); try { robot.connect(Protocol.Companion.getSERVER_IP().get(2), 8000); } catch (InterruptedException e) { diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt index 4a63cc215..20544c564 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/Robot.kt @@ -35,7 +35,10 @@ class Robot(val number: Int, private val password: String) { if (packet is ServerTouchResponsePacket) { if (packet.serverIP != null) {//redirection connect(packet.serverIP!!) - sendPacket(ClientServerRedirectionPacket(packet.serverIP!!, number)) + sendPacket(ClientServerRedirectionPacket( + serverIP = packet.serverIP!!, + qq = number + )) } else {//password submission sendPacket(ClientPasswordSubmissionPacket( qq = this.number, diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt index dc2d7f3b7..ce0c13c3d 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt @@ -3,10 +3,7 @@ package net.mamoe.mirai.network.packet.client.login import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.network.packet.PacketId import net.mamoe.mirai.network.packet.client.* -import net.mamoe.mirai.util.TEACryptor -import net.mamoe.mirai.util.getCrc32 -import net.mamoe.mirai.util.getRandomKey -import net.mamoe.mirai.util.hexToBytes +import net.mamoe.mirai.util.* import java.io.IOException import java.net.InetAddress @@ -15,6 +12,21 @@ import java.net.InetAddress * * @author Him188moe @ Mirai Project */ + +@ExperimentalUnsignedTypes +fun main() { + val pk = ClientPasswordSubmissionPacket( + qq = 1994701021, + password = "D1 A5 C8 BB E1 Q3 CC DD",//其实这个就是普通的密码, 不是HEX + loginTime = 131513, + loginIP = "123.123.123.123", + token0825 = byteArrayOf(), + tgtgtKey = "AA BB CC DD EE FF AA BB CC".hexToBytes() + ) + + println(pk.encodeToByteArray().toHexString()) +} + @PacketId("08 36 31 03")//may be 08 36, 31 03 has another meaning @ExperimentalUnsignedTypes class ClientPasswordSubmissionPacket(private val qq: Int, private val password: String, private val loginTime: Int, private val loginIP: String, private val tgtgtKey: ByteArray, private val token0825: ByteArray) : ClientPacket() { @@ -27,12 +39,12 @@ class ClientPasswordSubmissionPacket(private val qq: Int, private val password: this.writeHex(Protocol._0836key1) //TEA 加密 - this.write(TEACryptor.encrypt(object : ClientPacket() { + this.write(TEACryptor.encrypt(object : ByteArrayDataOutputStream() { @Throws(IOException::class) - override fun encode() { + override fun toByteArray(): ByteArray { val hostName: String = InetAddress.getLocalHost().hostName.let { it.substring(0, it.length - 3) }; - this.writeQQ(System.currentTimeMillis().toInt())//that's correct + this.writeInt(System.currentTimeMillis().toInt()) this.writeHex("01 12");//tag this.writeHex("00 38");//length this.write(token0825);//length @@ -94,9 +106,9 @@ class ClientPasswordSubmissionPacket(private val qq: Int, private val password: write(it)//key writeLong(getCrc32(it))//todo may be int? check that. } + + return super.toByteArray(); } - }.encodeToByteArray(), Protocol.shareKey.hexToBytes())) + }.toByteArray(), Protocol.shareKey.hexToBytes())) } - - } \ No newline at end of file