1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-03-26 07:20:09 +08:00
This commit is contained in:
Him188moe 2019-08-18 22:03:20 +08:00
parent 0b76137936
commit 6e5ce3a84c
4 changed files with 29 additions and 10 deletions
mirai-core/src/main/java/net/mamoe/mirai/network

View File

@ -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()

View File

@ -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) {

View File

@ -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)
}
}

View File

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