diff --git a/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java b/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java
index 386357336..6f2e5225b 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java
+++ b/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java
@@ -95,7 +95,7 @@ public class MiraiServer {
         });
         */
 
-        Robot robot = new Robot(1994701021);
+        Robot robot = new Robot(1994701021, "xiaoqqq");
         try {
             robot.connect(Protocol.Companion.getSERVER_IP().get(2), 8000);
         } catch (InterruptedException e) {
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 4a63cc215..20544c564 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
@@ -35,7 +35,10 @@ class Robot(val number: Int, private val password: String) {
         if (packet is ServerTouchResponsePacket) {
             if (packet.serverIP != null) {//redirection
                 connect(packet.serverIP!!)
-                sendPacket(ClientServerRedirectionPacket(packet.serverIP!!, number))
+                sendPacket(ClientServerRedirectionPacket(
+                        serverIP = packet.serverIP!!,
+                        qq = number
+                ))
             } else {//password submission
                 sendPacket(ClientPasswordSubmissionPacket(
                         qq = this.number,
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt
index dc2d7f3b7..ce0c13c3d 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientPasswordSubmissionPacket.kt
@@ -3,10 +3,7 @@ package net.mamoe.mirai.network.packet.client.login
 import net.mamoe.mirai.network.Protocol
 import net.mamoe.mirai.network.packet.PacketId
 import net.mamoe.mirai.network.packet.client.*
-import net.mamoe.mirai.util.TEACryptor
-import net.mamoe.mirai.util.getCrc32
-import net.mamoe.mirai.util.getRandomKey
-import net.mamoe.mirai.util.hexToBytes
+import net.mamoe.mirai.util.*
 import java.io.IOException
 import java.net.InetAddress
 
@@ -15,6 +12,21 @@ import java.net.InetAddress
  *
  * @author Him188moe @ Mirai Project
  */
+
+@ExperimentalUnsignedTypes
+fun main() {
+    val pk = ClientPasswordSubmissionPacket(
+            qq = 1994701021,
+            password = "D1 A5 C8 BB E1 Q3 CC DD",//其实这个就是普通的密码, 不是HEX
+            loginTime = 131513,
+            loginIP = "123.123.123.123",
+            token0825 = byteArrayOf(),
+            tgtgtKey = "AA BB CC DD EE FF AA BB CC".hexToBytes()
+    )
+
+    println(pk.encodeToByteArray().toHexString())
+}
+
 @PacketId("08 36 31 03")//may be 08 36, 31 03 has another meaning
 @ExperimentalUnsignedTypes
 class ClientPasswordSubmissionPacket(private val qq: Int, private val password: String, private val loginTime: Int, private val loginIP: String, private val tgtgtKey: ByteArray, private val token0825: ByteArray) : ClientPacket() {
@@ -27,12 +39,12 @@ class ClientPasswordSubmissionPacket(private val qq: Int, private val password:
         this.writeHex(Protocol._0836key1)
 
         //TEA 加密
-        this.write(TEACryptor.encrypt(object : ClientPacket() {
+        this.write(TEACryptor.encrypt(object : ByteArrayDataOutputStream() {
             @Throws(IOException::class)
-            override fun encode() {
+            override fun toByteArray(): ByteArray {
                 val hostName: String = InetAddress.getLocalHost().hostName.let { it.substring(0, it.length - 3) };
 
-                this.writeQQ(System.currentTimeMillis().toInt())//that's correct
+                this.writeInt(System.currentTimeMillis().toInt())
                 this.writeHex("01 12");//tag
                 this.writeHex("00 38");//length
                 this.write(token0825);//length
@@ -94,9 +106,9 @@ class ClientPasswordSubmissionPacket(private val qq: Int, private val password:
                     write(it)//key
                     writeLong(getCrc32(it))//todo may be int? check that.
                 }
+
+                return super.toByteArray();
             }
-        }.encodeToByteArray(), Protocol.shareKey.hexToBytes()))
+        }.toByteArray(), Protocol.shareKey.hexToBytes()))
     }
-
-
 }
\ No newline at end of file