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 bdac9842a..df590c0cb 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 @@ -39,7 +39,7 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet { * * * Before sending the packet, an [tail][Protocol.tail] will be added. - */// TODO: 2019/8/9 添加 tail + */ @Throws(IOException::class) abstract fun encode() 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 32eb204d0..a4284dda5 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 @@ -2,6 +2,7 @@ package net.mamoe.mirai.network.packet.server import net.mamoe.mirai.network.Protocol import net.mamoe.mirai.util.TEACryptor +import net.mamoe.mirai.util.getRandomKey import java.io.DataInputStream /** @@ -22,6 +23,7 @@ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : S TYPE_08_25_31_02, } + @ExperimentalUnsignedTypes override fun decode() { input.skip(43 - 11)//todo: check val data = DataInputStream(TEACryptor.decrypt(input.readAllBytes().let { it.copyOfRange(0, it.size - 2) }, when (type) {//todo: check array range @@ -38,10 +40,10 @@ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : S token = data.readNBytes(167 - (16 - 2)) loginTime = data.readLong()//todo check loginIP = data.readIP() - - TODO("从易语言抄协议来") + tgtgtKey = getRandomKey(16); } else -> { + throw IllegalStateException() } } } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt b/mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt index f86a94d5e..3018fcfa1 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt @@ -3,6 +3,8 @@ package net.mamoe.mirai.util import net.mamoe.mirai.network.Protocol import java.io.ByteArrayOutputStream import java.io.DataOutputStream +import java.util.* +import java.util.zip.CRC32 /** * @author Him188moe @ Mirai Project @@ -32,6 +34,7 @@ fun UByteArray.toHexString(separator: String = ", "): String = Utils.toHexString fun Byte.toHexString(): String = this.toString(16) +@ExperimentalUnsignedTypes fun String.hexToBytes(): ByteArray = Protocol.hexToBytes(this) @ExperimentalUnsignedTypes fun String.hexToUBytes(): UByteArray = Protocol.hexToUBytes(this) @@ -40,4 +43,13 @@ open class ByteArrayDataOutputStream : DataOutputStream(ByteArrayOutputStream()) open fun toByteArray(): ByteArray = (out as ByteArrayOutputStream).toByteArray() @ExperimentalUnsignedTypes open fun toUByteArray(): UByteArray = (out as ByteArrayOutputStream).toByteArray().toUByteArray(); -} \ No newline at end of file +} + +@ExperimentalUnsignedTypes +fun getRandomKey(length: Int): ByteArray { + val bytes = LinkedList(); + for (i in 0..length) bytes.add((Math.random() * 255).toByte()) + return bytes.toByteArray(); +} + +fun getCrc32(key: ByteArray): Long = with(CRC32()) { update(key); return@with this.value }; \ No newline at end of file