Commit 6e5ce3a8 authored by Him188moe's avatar Him188moe

update

parent 0b761379
...@@ -15,6 +15,7 @@ import net.mamoe.mirai.network.packet.client.login.* ...@@ -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.client.writeHex
import net.mamoe.mirai.network.packet.server.ServerPacket import net.mamoe.mirai.network.packet.server.ServerPacket
import net.mamoe.mirai.network.packet.server.login.* 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.security.ServerSessionKeyResponsePacketEncrypted
import net.mamoe.mirai.network.packet.server.touch.ServerTouchResponsePacket import net.mamoe.mirai.network.packet.server.touch.ServerTouchResponsePacket
import net.mamoe.mirai.util.getRandomKey import net.mamoe.mirai.util.getRandomKey
...@@ -102,7 +103,13 @@ class Robot(val number: Int, private val password: String) { ...@@ -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)) is ServerSessionKeyResponsePacketEncrypted -> onPacketReceived(packet.decrypt(this._0828_rec_decr_key))
else -> throw IllegalStateException() else -> throw IllegalStateException()
......
package net.mamoe.mirai.network.packet.server package net.mamoe.mirai.network.packet.server
import net.mamoe.mirai.network.packet.Packet import net.mamoe.mirai.network.packet.Packet
import net.mamoe.mirai.network.packet.server.login.ServerLoginResponseFailedPacket import net.mamoe.mirai.network.packet.server.login.*
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.touch.ServerTouchResponsePacket import net.mamoe.mirai.network.packet.server.touch.ServerTouchResponsePacket
import net.mamoe.mirai.util.toHexString import net.mamoe.mirai.util.toHexString
import java.io.DataInputStream import java.io.DataInputStream
...@@ -30,7 +27,7 @@ abstract class ServerPacket(val input: DataInputStream) : Packet { ...@@ -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 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" -> { "08 36 31 03", "08 36 31 04", "08 36 31 05", "08 36 31 06" -> {
when (bytes.size) { 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` "08 36 31 03" -> ServerLoginResponseResendPacket.Flag.`08 36 31 03`
else -> ServerLoginResponseResendPacket.Flag.OTHER else -> ServerLoginResponseResendPacket.Flag.OTHER
}) })
...@@ -38,7 +35,7 @@ abstract class ServerPacket(val input: DataInputStream) : Packet { ...@@ -38,7 +35,7 @@ abstract class ServerPacket(val input: DataInputStream) : Packet {
} }
if (bytes.size > 700) { if (bytes.size > 700) {
return ServerLoginResponseSucceedPacketEncrypted(stream, bytes.size) return ServerLoginResponseSuccessPacketEncrypted(stream, bytes.size)
} }
return ServerLoginResponseFailedPacket(when (bytes.size) { return ServerLoginResponseFailedPacket(when (bytes.size) {
......
...@@ -2,6 +2,9 @@ package net.mamoe.mirai.network.packet.server.login ...@@ -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.PacketId
import net.mamoe.mirai.network.packet.server.ServerPacket 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 import java.io.DataInputStream
/** /**
...@@ -36,4 +39,18 @@ class ServerLoginResponseResendPacket(input: DataInputStream, val flag: Flag) : ...@@ -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
...@@ -4,12 +4,10 @@ import net.mamoe.mirai.network.Protocol ...@@ -4,12 +4,10 @@ import net.mamoe.mirai.network.Protocol
import net.mamoe.mirai.network.packet.server.* import net.mamoe.mirai.network.packet.server.*
import net.mamoe.mirai.util.TEACryptor import net.mamoe.mirai.util.TEACryptor
import net.mamoe.mirai.util.hexToBytes import net.mamoe.mirai.util.hexToBytes
import net.mamoe.mirai.util.hexToShort
import net.mamoe.mirai.util.toHexString import net.mamoe.mirai.util.toHexString
import java.io.DataInputStream import java.io.DataInputStream
/** /**
* @author Him188moe
* @author NaturalHG * @author NaturalHG
*/ */
class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLength: Int) : ServerPacket(input) { class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLength: Int) : ServerPacket(input) {
...@@ -118,7 +116,7 @@ class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLen ...@@ -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() { override fun decode() {
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment