From 50c0f27c1bc46ff742c109cc628154faac6e240e Mon Sep 17 00:00:00 2001
From: liujiahua123123 <liujiahua123123@126.com>
Date: Sat, 17 Aug 2019 21:42:38 +0800
Subject: [PATCH 1/3] ??

---
 .../network/packet/server/Server0825Packet.kt    | 13 ++++++++-----
 .../mirai/network/packet/server/ServerPacket.kt  |  8 ++++++--
 .../src/main/java/net/mamoe/mirai/util/Utils.kt  |  2 ++
 mirai-core/src/test/java/NetworkTest.java        | 16 ++++++++++++++++
 mirai-core/src/test/java/PacketTest.kt           | 15 +++++++++++++--
 5 files changed, 45 insertions(+), 9 deletions(-)

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 875ea59dd..6e78438d5 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
@@ -11,7 +11,7 @@ import java.io.DataInputStream
 class Server0825Packet(private val type: Type, inputStream: DataInputStream) : ServerPacket(inputStream) {
     lateinit var serverIP: String;
 
-    var loginTime: Long = 0;
+    var loginTime: Int = 0;
     lateinit var loginIP: String;
     lateinit var token: ByteArray;
     lateinit var tgtgtKey: ByteArray
@@ -32,15 +32,18 @@ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : S
 
         when (data.readByte().toInt()) {
             0xFE -> {
+                System.out.println("0xfe")
                 serverIP = data.readIP()
             }
             0X00 -> {
-                data.skip(16 - 2)
-                token = data.readNBytes(167 - (16 - 2))
-                loginTime = data.readLong()//todo check
+                data.skip(67)
+
+                loginTime = data.readInt()
                 loginIP = data.readIP()
-                tgtgtKey = getRandomKey(16);
+                token = data.readNBytes(56)
+                tgtgtKey = getRandomKey(16)
             }
+
             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 3bc2adb79..705e24e4b 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,6 +1,7 @@
 package net.mamoe.mirai.network.packet.server
 
 import net.mamoe.mirai.network.packet.Packet
+import net.mamoe.mirai.util.toHexString
 
 import java.io.DataInputStream
 
@@ -45,10 +46,13 @@ fun DataInputStream.readUntil(byte: Byte): ByteArray {
     return buff
 }
 
+@ExperimentalUnsignedTypes
 fun DataInputStream.readIP(): String {
     var buff = ""
-    for (i in 0..12) {//todo: check that
-        buff += readByte().toInt()
+    for (i in 0..3) {//todo: check t// hat
+        val b = readByte()
+        buff += (b.toInt() + (128)).toString()
+        if(i !=3)buff+="."
     }
     return buff
 }
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 3018fcfa1..554f6f538 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
@@ -34,6 +34,8 @@ fun UByteArray.toHexString(separator: String = ", "): String = Utils.toHexString
 
 fun Byte.toHexString(): String = this.toString(16)
 
+
+
 @ExperimentalUnsignedTypes
 fun String.hexToBytes(): ByteArray = Protocol.hexToBytes(this)
 @ExperimentalUnsignedTypes
diff --git a/mirai-core/src/test/java/NetworkTest.java b/mirai-core/src/test/java/NetworkTest.java
index dc6e255c6..d2a6055ea 100644
--- a/mirai-core/src/test/java/NetworkTest.java
+++ b/mirai-core/src/test/java/NetworkTest.java
@@ -19,4 +19,20 @@ public class NetworkTest {
 
 
     }
+
+
+    public static String bytesToHex(byte[] bytes) {
+        StringBuffer sb = new StringBuffer();
+        for(int i = 0; i < bytes.length; i++) {
+            String hex = Integer.toHexString(bytes[i] & 0xFF);
+            if(hex.length() < 2){
+                sb.append(0);
+            }
+            sb.append(hex);
+        }
+        return sb.toString();
+    }
+
+
+
 }
diff --git a/mirai-core/src/test/java/PacketTest.kt b/mirai-core/src/test/java/PacketTest.kt
index 297cbf413..3dd9f02a3 100644
--- a/mirai-core/src/test/java/PacketTest.kt
+++ b/mirai-core/src/test/java/PacketTest.kt
@@ -1,6 +1,17 @@
+import net.mamoe.mirai.network.packet.client.Client0825ResponsePacket
 import net.mamoe.mirai.network.packet.server.Server0825Packet
+import net.mamoe.mirai.util.TEACryptor
+import net.mamoe.mirai.util.hexToBytes
+import net.mamoe.mirai.util.hexToUBytes
+import net.mamoe.mirai.util.toHexString
+import java.io.DataInputStream
 
+@ExperimentalUnsignedTypes
 fun main(){
-    val v = "00 37 13 08 25 31 01 76 E4 B8 DD 03 00 00 00 01 2E 01 00 00 68 52 00 00 00 00 A4 F1 91 88 C9 82 14 99 0C 9E 56 55 91 23 C8 3D C3 47 F0 25 A1 8E 74 EF 1E 0B 32 5B 20 8A FA 3B 0B 52 8F 86 E6 04 F1 D6 F8 63 75 60 8C 0C 7D 06 D1 E0 22 F8 49 EF AF 61 EE 7E 69 72 EB 10 08 30 69 50 1C 84 A9 C2 16 D7 52 B9 1C 79 CA 5A CF FD BC AE D8 A6 BB DC 21 6E 79 26 E1 A2 23 11 AA B0 9A 49 39 72 ED 61 12 B6 88 4D A2 56 23 E9 92 11 92 27 4A 70 00 C9 01 7B 03";
-    v.split(" ")
+    val data = "00 37 13 08 25 31 01 76 E4 B8 DD 03 00 00 00 01 2E 01 00 00 68 52 00 00 00 00 A4 F1 91 88 C9 82 14 99 0C 9E 56 55 91 23 C8 3D C3 47 F0 25 A1 8E 74 EF 1E 0B 32 5B 20 8A FA 3B 0B 52 8F 86 E6 04 F1 D6 F8 63 75 60 8C 0C 7D 06 D1 E0 22 F8 49 EF AF 61 EE 7E 69 72 EB 10 08 30 69 50 1C 84 A9 C2 16 D7 52 B9 1C 79 CA 5A CF FD BC AE D8 A6 BB DC 21 6E 79 26 E1 A2 23 11 AA B0 9A 49 39 72 ED 61 12 B6 88 4D A2 56 23 E9 92 11 92 27 4A 70 00 C9 01 7B 03"
+    val s = DataInputStream(data.hexToBytes().inputStream())
+    val packet = Server0825Packet(Server0825Packet.Type.TYPE_08_25_31_01,s)
+    packet.decode()
+    System.out.println(packet.loginTime)
+    System.out.println(packet.loginIP)
 }
\ No newline at end of file

From 13b436152beb59837d1c505b409275b832cffe24 Mon Sep 17 00:00:00 2001
From: liujiahua123123 <liujiahua123123@126.com>
Date: Sat, 17 Aug 2019 21:51:03 +0800
Subject: [PATCH 2/3] ??

---
 .../mirai/network/packet/client/Client0836_622Packet.kt      | 2 +-
 .../mamoe/mirai/network/packet/server/Server0825Packet.kt    | 5 +++--
 .../net/mamoe/mirai/network/packet/server/ServerPacket.kt    | 3 +--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/Client0836_622Packet.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/Client0836_622Packet.kt
index 095b9ccba..06ef7c89f 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/Client0836_622Packet.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/Client0836_622Packet.kt
@@ -37,7 +37,7 @@ class Client0836_622Packet(private val qq: Int, private val password: String, pr
                 this.writeQQ(qq)
                 this.writeHex("00 06")//tag
                 this.writeHex("00 78")//length
-                this.writeTLV0006(qq, password)
+                this.writeTLV0006(qq, password,)
                 //fix
                 this.writeHex(Protocol._0836_622_fix2)
                 this.writeHex("00 1A")//tag
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 6e78438d5..b54f0a922 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
@@ -36,11 +36,12 @@ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : S
                 serverIP = data.readIP()
             }
             0X00 -> {
-                data.skip(67)
+                data.skip(5)
+                token = data.readNBytes(56)
+                data.skip(28)
 
                 loginTime = data.readInt()
                 loginIP = data.readIP()
-                token = data.readNBytes(56)
                 tgtgtKey = getRandomKey(16)
             }
 
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 705e24e4b..7cb413827 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
@@ -50,8 +50,7 @@ fun DataInputStream.readUntil(byte: Byte): ByteArray {
 fun DataInputStream.readIP(): String {
     var buff = ""
     for (i in 0..3) {//todo: check t// hat
-        val b = readByte()
-        buff += (b.toInt() + (128)).toString()
+        buff += (readByte().toInt()).toString()
         if(i !=3)buff+="."
     }
     return buff

From 3f5fdfb3a4386242281c99b52983ec3b99d207f4 Mon Sep 17 00:00:00 2001
From: liujiahua123123 <liujiahua123123@126.com>
Date: Sat, 17 Aug 2019 21:57:48 +0800
Subject: [PATCH 3/3] ??

---
 .../mamoe/mirai/network/packet/server/Server0825Packet.kt | 8 ++++----
 mirai-core/src/test/java/PacketTest.kt                    | 1 +
 2 files changed, 5 insertions(+), 4 deletions(-)

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 b54f0a922..ce364b602 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
@@ -11,9 +11,9 @@ import java.io.DataInputStream
 class Server0825Packet(private val type: Type, inputStream: DataInputStream) : ServerPacket(inputStream) {
     lateinit var serverIP: String;
 
-    var loginTime: Int = 0;
-    lateinit var loginIP: String;
-    lateinit var token: ByteArray;
+    var loginTime: Int = 0
+    lateinit var loginIP: String
+    lateinit var token: ByteArray
     lateinit var tgtgtKey: ByteArray
 
     enum class Type {
@@ -36,7 +36,7 @@ class Server0825Packet(private val type: Type, inputStream: DataInputStream) : S
                 serverIP = data.readIP()
             }
             0X00 -> {
-                data.skip(5)
+                data.skip(4)
                 token = data.readNBytes(56)
                 data.skip(28)
 
diff --git a/mirai-core/src/test/java/PacketTest.kt b/mirai-core/src/test/java/PacketTest.kt
index 3dd9f02a3..31321c903 100644
--- a/mirai-core/src/test/java/PacketTest.kt
+++ b/mirai-core/src/test/java/PacketTest.kt
@@ -12,6 +12,7 @@ fun main(){
     val s = DataInputStream(data.hexToBytes().inputStream())
     val packet = Server0825Packet(Server0825Packet.Type.TYPE_08_25_31_01,s)
     packet.decode()
+    System.out.println(packet.token.toUByteArray().toHexString(" "))
     System.out.println(packet.loginTime)
     System.out.println(packet.loginIP)
 }
\ No newline at end of file