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() {
 
     }