diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
index 0950f2c09..f201a92fc 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
@@ -219,7 +219,7 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable {
 
                 val data = packet.toByteArray()
                 socket!!.send(DatagramPacket(data, data.size))
-                robot purple "Packet sent:     $packet"
+                robot cyanL "Packet sent:     $packet"
 
                 PacketSentEvent(robot, packet).broadcast()
             } catch (e: Throwable) {
@@ -279,7 +279,9 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable {
      */
     inner class DebugHandler : PacketHandler() {
         override fun onPacketReceived(packet: ServerPacket) {
-            robot notice "Packet received: $packet"
+            if (!packet.javaClass.name.endsWith("Encrypted")) {
+                robot notice "Packet received: $packet"
+            }
             if (packet is ServerEventPacket) {
                 sendPacket(ClientMessageResponsePacket(robot.account.qqNumber, packet.packetId, sessionKey, packet.eventIdentity))
             }
@@ -354,10 +356,6 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable {
                     }
                 }
 
-                is ServerVerificationCodeUnknownPacket -> {
-                    sendPacket(ClientVerificationCodeRefreshPacket(88, robot.account.qqNumber, token0825))
-                }
-
                 is ServerVerificationCodeTransmissionPacket -> {
                     if (packet is ServerVerificationCodeWrongPacket) {
                         robot error "验证码错误, 请重新输入"
@@ -377,6 +375,7 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable {
                         val code = Scanner(System.`in`).nextLine()
                         if (code.isEmpty() || code.length != 4) {
                             this.captchaCache = byteArrayOf()
+                            this.captchaSectionId = 1
                             sendPacket(ClientVerificationCodeRefreshPacket(packet.packetIdLast + 1, robot.account.qqNumber, token0825))
                         } else {
                             sendPacket(ClientVerificationCodeSubmitPacket(packet.packetIdLast + 1, robot.account.qqNumber, token0825, code, packet.verificationToken))
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt
index 23ab2b2cd..e958d43d3 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt
@@ -2,6 +2,7 @@ package net.mamoe.mirai.network.packet
 
 import lombok.Getter
 import net.mamoe.mirai.network.Protocol
+import net.mamoe.mirai.network.packet.PacketNameFormatter.adjustName
 import net.mamoe.mirai.utils.*
 import java.io.DataOutputStream
 import java.io.IOException
@@ -62,14 +63,15 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
 
     open fun getFixedId(): String = when (this.idHex.length) {
         0 -> "__ __ __ __"
-        2 -> this.idHex + " __ __"
-        5 -> this.idHex + " __"
+        2 -> this.idHex + " __ __ __"
+        5 -> this.idHex + " __ __"
+        7 -> this.idHex + " __"
         else -> this.idHex
     }
 
 
     override fun toString(): String {
-        return this.javaClass.simpleName + "(${this.getFixedId()})" + this.getAllDeclaredFields().joinToString(", ", "{", "}") {
+        return adjustName(this.javaClass.simpleName + "(${this.getFixedId()})") + this.getAllDeclaredFields().filterNot { it.name == "idHex" || it.name == "encoded" }.joinToString(", ", "{", "}") {
             it.trySetAccessible(); it.name + "=" + it.get(this).let { value ->
             when (value) {
                 null -> null
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Packet.java b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Packet.java
deleted file mode 100644
index e225f0c2d..000000000
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Packet.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package net.mamoe.mirai.network.packet;
-
-/**
- * @author Him188moe
- */
-public interface Packet {
-
-}
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Packet.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Packet.kt
new file mode 100644
index 000000000..309d313f6
--- /dev/null
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Packet.kt
@@ -0,0 +1,28 @@
+package net.mamoe.mirai.network.packet
+
+/**
+ * @author Him188moe
+ */
+interface Packet {
+
+}
+
+
+object PacketNameFormatter {
+    @JvmSynthetic
+    private var longestNameLength: Int = 43
+
+    @JvmSynthetic
+    fun adjustName(name: String): String {
+        if (name.length > longestNameLength) {
+            longestNameLength = name.length
+            return name
+        }
+
+        return StringBuilder().apply {
+            repeat(longestNameLength - name.length) {
+                this.append(" ")
+            }
+        }.toString() + name
+    }
+}
\ No newline at end of file
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerEvent.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerEvent.kt
index d7e4769d9..bbaa1d796 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerEvent.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerEvent.kt
@@ -223,6 +223,10 @@ class ClientMessageResponsePacket(
             it.write(eventIdentity)
         }
     }
+
+    override fun getFixedId(): String {
+        return packetIdFromServer.toUHexString()
+    }
 }
 
 /*
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerPacket.kt
index 397fa86dc..20c092e92 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerPacket.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerPacket.kt
@@ -1,6 +1,7 @@
 package net.mamoe.mirai.network.packet
 
 import lombok.Getter
+import net.mamoe.mirai.network.packet.PacketNameFormatter.adjustName
 import net.mamoe.mirai.network.packet.action.ServerSendFriendMessageResponsePacket
 import net.mamoe.mirai.network.packet.action.ServerSendGroupMessageResponsePacket
 import net.mamoe.mirai.network.packet.login.*
@@ -109,7 +110,7 @@ abstract class ServerPacket(val input: DataInputStream) : Packet {
 
     @ExperimentalUnsignedTypes
     override fun toString(): String {
-        return this.javaClass.simpleName + "(${this.getFixedId()})" + this.getAllDeclaredFields().joinToString(", ", "{", "}") {
+        return adjustName(this.javaClass.simpleName + "(${this.getFixedId()})") + this.getAllDeclaredFields().filterNot { it.name == "idHex" || it.name == "encoded" }.joinToString(", ", "{", "}") {
             it.trySetAccessible(); it.name + "=" + it.get(this).let { value ->
             when (value) {
                 is ByteArray -> value.toUHexString()
@@ -124,8 +125,9 @@ abstract class ServerPacket(val input: DataInputStream) : Packet {
 
     fun getFixedId(id: String): String = when (id.length) {
         0 -> "__ __ __ __"
-        2 -> "$id __ __"
-        5 -> "$id __"
+        2 -> "$id __ __ __"
+        5 -> "$id __ __"
+        7 -> "$id __"
         else -> id
     }
 
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/VerificationCode.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/VerificationCode.kt
index 008e3a76e..25c73b822 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/VerificationCode.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/VerificationCode.kt
@@ -210,12 +210,6 @@ class ServerVerificationCodeCorrectPacket(input: DataInputStream) : ServerVerifi
     }
 }
 
-class ServerVerificationCodeUnknownPacket(input: DataInputStream) : ServerVerificationCodePacket(input) {
-    override fun decode() {
-        MiraiLogger.debug(this.input.goto(0).readAllBytes())
-    }
-}
-
 abstract class ServerVerificationCodePacket(input: DataInputStream) : ServerPacket(input) {
 
     @PacketId("00 BA")
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ServerLoginResponseResendPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ServerLoginResponseResendPacket.kt
index def2bc103..94f95378e 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ServerLoginResponseResendPacket.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ServerLoginResponseResendPacket.kt
@@ -44,6 +44,6 @@ class ServerLoginResponseResendPacket(input: DataInputStream, val flag: Flag) :
 
     class Encrypted(input: DataInputStream, private val flag: Flag) : ServerPacket(input) {
         @TestedSuccessfully
-        fun decrypt(tgtgtKey: ByteArray): ServerLoginResponseResendPacket = ServerLoginResponseResendPacket(decryptBy(tgtgtKey), flag).setId(this.idHex)
+        fun decrypt(tgtgtKey: ByteArray): ServerLoginResponseResendPacket = ServerLoginResponseResendPacket(this.decryptBy(tgtgtKey), flag).setId(this.idHex)
     }
 }
diff --git a/mirai-core/src/main/java/net/mamoe/mirai/utils/MiraiLogger.kt b/mirai-core/src/main/java/net/mamoe/mirai/utils/MiraiLogger.kt
index 53ce7f0c8..118012401 100644
--- a/mirai-core/src/main/java/net/mamoe/mirai/utils/MiraiLogger.kt
+++ b/mirai-core/src/main/java/net/mamoe/mirai/utils/MiraiLogger.kt
@@ -45,6 +45,8 @@ infix fun Robot.notice(o: Any?) = print(this, o.toString(), LoggerTextFormat.LIG
 
 infix fun Robot.purple(o: Any?) = print(this, o.toString(), LoggerTextFormat.PURPLE)
 
+infix fun Robot.cyanL(o: Any?) = print(this, o.toString(), LoggerTextFormat.LIGHT_CYAN)
+
 infix fun Robot.success(o: Any?) = print(this, o.toString(), LoggerTextFormat.GREEN)
 
 infix fun Robot.debug(o: Any?) = print(this, o.toString(), LoggerTextFormat.YELLOW)