From 6e5ce3a84cbef3987bfb828d876ce7c6d725aae2 Mon Sep 17 00:00:00 2001 From: Him188moe <Him188@mamoe.net> Date: Sun, 18 Aug 2019 22:03:20 +0800 Subject: [PATCH] update --- .../main/java/net/mamoe/mirai/network/Robot.kt | 9 ++++++++- .../mirai/network/packet/server/ServerPacket.kt | 9 +++------ .../login/ServerLoginResponseResendPacket.kt | 17 +++++++++++++++++ .../login/ServerLoginResponseSuccessPacket.kt | 4 +--- 4 files changed, 29 insertions(+), 10 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 81a9cdbc0..8c2020752 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 @@ -15,6 +15,7 @@ import net.mamoe.mirai.network.packet.client.login.* import net.mamoe.mirai.network.packet.client.writeHex import net.mamoe.mirai.network.packet.server.ServerPacket import net.mamoe.mirai.network.packet.server.login.* +import net.mamoe.mirai.network.packet.server.security.ServerSessionKeyResponsePacket import net.mamoe.mirai.network.packet.server.security.ServerSessionKeyResponsePacketEncrypted import net.mamoe.mirai.network.packet.server.touch.ServerTouchResponsePacket import net.mamoe.mirai.util.getRandomKey @@ -102,7 +103,13 @@ class Robot(val number: Int, private val password: String) { } } - is ServerLoginResponseSucceedPacketEncrypted -> onPacketReceived(packet.decrypt(this.tgtgtKey!!)) + is ServerSessionKeyResponsePacket -> { + this.sessionKey = packet.sessionKey + this.tlv0105 = packet.tlv0105 + } + + is ServerLoginResponseResendPacketEncrypted -> onPacketReceived(packet.decrypt(this.tgtgtKey!!)) + is ServerLoginResponseSuccessPacketEncrypted -> onPacketReceived(packet.decrypt(this.tgtgtKey!!)) is ServerSessionKeyResponsePacketEncrypted -> onPacketReceived(packet.decrypt(this._0828_rec_decr_key)) 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 db1a140a8..adba64d35 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,10 +1,7 @@ package net.mamoe.mirai.network.packet.server import net.mamoe.mirai.network.packet.Packet -import net.mamoe.mirai.network.packet.server.login.ServerLoginResponseFailedPacket -import net.mamoe.mirai.network.packet.server.login.ServerLoginResponseResendPacket -import net.mamoe.mirai.network.packet.server.login.ServerLoginResponseSucceedPacketEncrypted -import net.mamoe.mirai.network.packet.server.login.ServerLoginResponseVerificationCodePacket +import net.mamoe.mirai.network.packet.server.login.* import net.mamoe.mirai.network.packet.server.touch.ServerTouchResponsePacket import net.mamoe.mirai.util.toHexString import java.io.DataInputStream @@ -30,7 +27,7 @@ abstract class ServerPacket(val input: DataInputStream) : Packet { "08 25 31 02" -> ServerTouchResponsePacket(ServerTouchResponsePacket.Type.TYPE_08_25_31_02, stream) "08 36 31 03", "08 36 31 04", "08 36 31 05", "08 36 31 06" -> { when (bytes.size) { - 271, 207 -> return ServerLoginResponseResendPacket(stream, when (flag) { + 271, 207 -> return ServerLoginResponseResendPacketEncrypted(stream, when (flag) { "08 36 31 03" -> ServerLoginResponseResendPacket.Flag.`08 36 31 03` else -> ServerLoginResponseResendPacket.Flag.OTHER }) @@ -38,7 +35,7 @@ abstract class ServerPacket(val input: DataInputStream) : Packet { } if (bytes.size > 700) { - return ServerLoginResponseSucceedPacketEncrypted(stream, bytes.size) + return ServerLoginResponseSuccessPacketEncrypted(stream, bytes.size) } return ServerLoginResponseFailedPacket(when (bytes.size) { diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseResendPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseResendPacket.kt index 2d72644ed..eae8d994a 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseResendPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseResendPacket.kt @@ -2,6 +2,9 @@ package net.mamoe.mirai.network.packet.server.login import net.mamoe.mirai.network.packet.PacketId import net.mamoe.mirai.network.packet.server.ServerPacket +import net.mamoe.mirai.network.packet.server.dataInputStream +import net.mamoe.mirai.network.packet.server.goto +import net.mamoe.mirai.util.TEACryptor import java.io.DataInputStream /** @@ -36,4 +39,18 @@ class ServerLoginResponseResendPacket(input: DataInputStream, val flag: Flag) : } } } +} + +class ServerLoginResponseResendPacketEncrypted(input: DataInputStream, private val flag: ServerLoginResponseResendPacket.Flag) : ServerPacket(input) { + override fun decode() { + + } + + fun decrypt(tgtgtKey: ByteArray): ServerLoginResponseResendPacket { + this.input goto 14 + var data: ByteArray = this.input.readAllBytes() + data = TEACryptor.CRYPTOR_SHARE_KEY.decrypt(data.let { it.copyOfRange(0, it.size - 1) }); + data = TEACryptor.decrypt(data, tgtgtKey); + return ServerLoginResponseResendPacket(data.dataInputStream(), flag) + } } \ No newline at end of file diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseSuccessPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseSuccessPacket.kt index f9debc281..10ce36612 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseSuccessPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseSuccessPacket.kt @@ -4,12 +4,10 @@ import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.network.packet.server.* import net.mamoe.mirai.util.TEACryptor import net.mamoe.mirai.util.hexToBytes -import net.mamoe.mirai.util.hexToShort import net.mamoe.mirai.util.toHexString import java.io.DataInputStream /** - * @author Him188moe * @author NaturalHG */ class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLength: Int) : ServerPacket(input) { @@ -118,7 +116,7 @@ class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLen } } -class ServerLoginResponseSucceedPacketEncrypted(input: DataInputStream, val length: Int) : ServerPacket(input) { +class ServerLoginResponseSuccessPacketEncrypted(input: DataInputStream, val length: Int) : ServerPacket(input) { override fun decode() { }