Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
16d70c9f
Commit
16d70c9f
authored
Aug 31, 2019
by
Him188moe
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Login finished. Now working on Session
parent
4b889141
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
67 additions
and
154 deletions
+67
-154
document/protocol/Login Flow.md
document/protocol/Login Flow.md
+2
-2
mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java
mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java
+5
-2
mirai-core/src/main/java/net/mamoe/mirai/Robot.java
mirai-core/src/main/java/net/mamoe/mirai/Robot.java
+1
-11
mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
.../main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
+16
-4
mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPacket.kt
...ava/net/mamoe/mirai/network/packet/client/ClientPacket.kt
+11
-4
mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientLoginPacket.kt
...oe/mirai/network/packet/client/login/ClientLoginPacket.kt
+11
-7
mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/touch/ClientTouchPacket.kt
...oe/mirai/network/packet/client/touch/ClientTouchPacket.kt
+1
-1
mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt
...ava/net/mamoe/mirai/network/packet/server/ServerPacket.kt
+4
-107
mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseResendPacket.kt
...rk/packet/server/login/ServerLoginResponseResendPacket.kt
+5
-5
mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseSuccessPacket.kt
...k/packet/server/login/ServerLoginResponseSuccessPacket.kt
+6
-6
mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt
mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt
+5
-5
No files found.
document/protocol/Login Flow.md
View file @
16d70c9f
...
@@ -58,7 +58,7 @@ S: 发送 `08 36 31 03` 告知登录结果.
...
@@ -58,7 +58,7 @@ S: 发送 `08 36 31 03` 告知登录结果.
-
设备锁
-
设备锁
-
被回收
-
被回收
C: 回复
`08 28 04 34`
C: 回复
`08 28 04 34`
, 请求建立 Session
Sample
Sample
```
text
```
text
...
@@ -66,7 +66,7 @@ Sample
...
@@ -66,7 +66,7 @@ Sample
```
```
**Session**
**Session**
S: 发送
`08 28 04 34`
,
告知:
S: 发送
`08 28 04 34`
,
完成 session 建立, 告知:
-
g_sessionKey
-
g_sessionKey
-
g_tlv0105
-
g_tlv0105
-
g_loginStatus
-
g_loginStatus
...
...
mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java
View file @
16d70c9f
...
@@ -4,6 +4,8 @@ import lombok.Getter;
...
@@ -4,6 +4,8 @@ import lombok.Getter;
import
net.mamoe.mirai.event.MiraiEventManager
;
import
net.mamoe.mirai.event.MiraiEventManager
;
import
net.mamoe.mirai.event.events.server.ServerDisableEvent
;
import
net.mamoe.mirai.event.events.server.ServerDisableEvent
;
import
net.mamoe.mirai.event.events.server.ServerEnableEvent
;
import
net.mamoe.mirai.event.events.server.ServerEnableEvent
;
import
net.mamoe.mirai.network.RobotNetworkHandler
;
import
net.mamoe.mirai.network.packet.client.touch.ClientTouchPacket
;
import
net.mamoe.mirai.task.MiraiTaskManager
;
import
net.mamoe.mirai.task.MiraiTaskManager
;
import
net.mamoe.mirai.utils.LoggerTextFormat
;
import
net.mamoe.mirai.utils.LoggerTextFormat
;
import
net.mamoe.mirai.utils.MiraiLogger
;
import
net.mamoe.mirai.utils.MiraiLogger
;
...
@@ -15,6 +17,7 @@ import net.mamoe.mirai.utils.setting.MiraiSettingMapSection;
...
@@ -15,6 +17,7 @@ import net.mamoe.mirai.utils.setting.MiraiSettingMapSection;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.LinkedList
;
import
java.util.Scanner
;
import
java.util.Scanner
;
public
class
MiraiServer
{
public
class
MiraiServer
{
...
@@ -135,8 +138,8 @@ public class MiraiServer {
...
@@ -135,8 +138,8 @@ public class MiraiServer {
*/
*/
/*
Robot
robot
=
new
Robot
(
1994701021
,
"xiaoqqq"
,
new
LinkedList
<>());
RobotNetworkHandler robotNetworkHandler =
new RobotNetworkHandler(1994701021, "xiaoqqq"
);
RobotNetworkHandler
robotNetworkHandler
=
robot
.
getHandler
(
);
try
{
try
{
//System.out.println(Protocol.Companion.getSERVER_IP().get(3));
//System.out.println(Protocol.Companion.getSERVER_IP().get(3));
//System.out.println(Protocol.Companion.getSERVER_IP().toString());
//System.out.println(Protocol.Companion.getSERVER_IP().toString());
...
...
mirai-core/src/main/java/net/mamoe/mirai/Robot.java
View file @
16d70c9f
...
@@ -12,6 +12,7 @@ public class Robot {
...
@@ -12,6 +12,7 @@ public class Robot {
private
final
int
qq
;
private
final
int
qq
;
private
final
String
password
;
private
final
String
password
;
@Getter
private
final
RobotNetworkHandler
handler
;
private
final
RobotNetworkHandler
handler
;
/**
/**
...
@@ -40,19 +41,8 @@ public class Robot {
...
@@ -40,19 +41,8 @@ public class Robot {
this
.
password
=
password
;
this
.
password
=
password
;
this
.
owners
=
Collections
.
unmodifiableList
(
owners
);
this
.
owners
=
Collections
.
unmodifiableList
(
owners
);
this
.
handler
=
new
RobotNetworkHandler
(
this
.
qq
,
this
.
password
);
this
.
handler
=
new
RobotNetworkHandler
(
this
.
qq
,
this
.
password
);
}
public
void
connect
()
{
}
}
public
void
onPacketReceive
()
{
}
}
}
mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt
View file @
16d70c9f
...
@@ -4,6 +4,7 @@ import io.netty.channel.Channel
...
@@ -4,6 +4,7 @@ import io.netty.channel.Channel
import
net.mamoe.mirai.network.packet.client.ClientPacket
import
net.mamoe.mirai.network.packet.client.ClientPacket
import
net.mamoe.mirai.network.packet.client.login.*
import
net.mamoe.mirai.network.packet.client.login.*
import
net.mamoe.mirai.network.packet.client.writeHex
import
net.mamoe.mirai.network.packet.client.writeHex
import
net.mamoe.mirai.network.packet.client.writeRandom
import
net.mamoe.mirai.network.packet.server.ServerPacket
import
net.mamoe.mirai.network.packet.server.ServerPacket
import
net.mamoe.mirai.network.packet.server.login.*
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.ServerSessionKeyResponsePacket
...
@@ -44,7 +45,18 @@ class RobotNetworkHandler(val number: Int, private val password: String) {
...
@@ -44,7 +45,18 @@ class RobotNetworkHandler(val number: Int, private val password: String) {
/**
/**
* Kind of key, similar to sessionKey
* Kind of key, similar to sessionKey
*/
*/
private
lateinit
var
tlv0105
:
ByteArray
private
var
tlv0105
:
ByteArray
init
{
tlv0105
=
lazyEncode
{
it
.
writeHex
(
"01 05 00 30"
)
it
.
writeHex
(
"00 01 01 02 00 14 01 01 00 10"
)
it
.
writeRandom
(
16
)
it
.
writeHex
(
"00 14 01 02 00 10"
)
it
.
writeRandom
(
16
)
}
}
private
lateinit
var
sessionKey
:
ByteArray
private
lateinit
var
sessionKey
:
ByteArray
/**
/**
* Kind of key, similar to sessionKey
* Kind of key, similar to sessionKey
...
@@ -92,7 +104,7 @@ class RobotNetworkHandler(val number: Int, private val password: String) {
...
@@ -92,7 +104,7 @@ class RobotNetworkHandler(val number: Int, private val password: String) {
is
ServerLoginResponseSuccessPacket
->
{
is
ServerLoginResponseSuccessPacket
->
{
this
.
_0828_rec_decr_key
=
packet
.
_0828_rec_decr_key
this
.
_0828_rec_decr_key
=
packet
.
_0828_rec_decr_key
sendPacket
(
Client
LoginSucceedConfirmation
Packet
(
this
.
number
,
this
.
serverIP
,
this
.
loginIP
,
this
.
md5_32
,
packet
.
token38
,
packet
.
token88
,
packet
.
encryptionKey
,
this
.
tlv0105
))
sendPacket
(
Client
SessionRequest
Packet
(
this
.
number
,
this
.
serverIP
,
this
.
loginIP
,
this
.
md5_32
,
packet
.
token38
,
packet
.
token88
,
packet
.
encryptionKey
,
this
.
tlv0105
))
}
}
//是ClientPasswordSubmissionPacket之后服务器回复的
//是ClientPasswordSubmissionPacket之后服务器回复的
...
@@ -150,8 +162,8 @@ class RobotNetworkHandler(val number: Int, private val password: String) {
...
@@ -150,8 +162,8 @@ class RobotNetworkHandler(val number: Int, private val password: String) {
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
fun
sendPacket
(
packet
:
ClientPacket
)
{
fun
sendPacket
(
packet
:
ClientPacket
)
{
sendPacketDebug
(
packet
);
/*
sendPacketDebug(packet);
if
(
true
)
return
;
if (true) return;
*/
try
{
try
{
//MiraiLogger log "Encoding"
//MiraiLogger log "Encoding"
packet
.
encode
()
packet
.
encode
()
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/ClientPacket.kt
View file @
16d70c9f
...
@@ -69,7 +69,7 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
...
@@ -69,7 +69,7 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet {
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
@Throws
(
IOException
::
class
)
@Throws
(
IOException
::
class
)
fun
DataOutputStream
.
writeIP
(
ip
:
String
)
{
fun
DataOutputStream
.
writeIP
(
ip
:
String
)
{
for
(
s
in
ip
.
split
(
"\\."
.
toRegex
()).
dropLastWhile
{
it
.
isEmpty
()
}.
toTypedArray
())
{
for
(
s
in
ip
.
trim
().
split
(
"\\."
.
toRegex
()).
dropLastWhile
{
it
.
isEmpty
()
}.
toTypedArray
())
{
this
.
writeByte
(
s
.
toInt
())
this
.
writeByte
(
s
.
toInt
())
}
}
}
}
...
@@ -78,7 +78,7 @@ fun DataOutputStream.writeIP(ip: String) {
...
@@ -78,7 +78,7 @@ fun DataOutputStream.writeIP(ip: String) {
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
@Throws
(
IOException
::
class
)
@Throws
(
IOException
::
class
)
fun
DataOutputStream
.
writeHex
(
hex
:
String
)
{
fun
DataOutputStream
.
writeHex
(
hex
:
String
)
{
for
(
s
in
hex
.
split
(
" "
.
toRegex
()).
dropLastWhile
{
it
.
isEmpty
()
}.
toTypedArray
())
{
for
(
s
in
hex
.
trim
().
split
(
" "
.
toRegex
()).
dropLastWhile
{
it
.
isEmpty
()
}.
toTypedArray
())
{
if
(
s
.
isEmpty
())
{
if
(
s
.
isEmpty
())
{
continue
continue
}
}
...
@@ -128,7 +128,7 @@ fun DataOutputStream.encryptAndWrite(cryptor: TEACryptor, encoder: (ByteArrayDat
...
@@ -128,7 +128,7 @@ fun DataOutputStream.encryptAndWrite(cryptor: TEACryptor, encoder: (ByteArrayDat
@Throws
(
IOException
::
class
)
@Throws
(
IOException
::
class
)
fun
DataOutputStream
.
writeTLV0006
(
qq
:
Int
,
password
:
String
,
loginTime
:
Int
,
loginIP
:
String
,
tgtgtKey
:
ByteArray
)
{
fun
DataOutputStream
.
writeTLV0006
(
qq
:
Int
,
password
:
String
,
loginTime
:
Int
,
loginIP
:
String
,
tgtgtKey
:
ByteArray
)
{
ByteArrayDataOutputStream
().
let
{
ByteArrayDataOutputStream
().
let
{
it
.
write
Random
(
4
)
it
.
write
Hex
(
"12 12 12 12"
)
//it.writeRandom(4) todo
it
.
writeHex
(
"00 02"
)
it
.
writeHex
(
"00 02"
)
it
.
writeQQ
(
qq
)
it
.
writeQQ
(
qq
)
it
.
writeHex
(
Protocol
.
_0825data2
)
it
.
writeHex
(
Protocol
.
_0825data2
)
...
@@ -153,12 +153,18 @@ fun DataOutputStream.writeTLV0006(qq: Int, password: String, loginTime: Int, log
...
@@ -153,12 +153,18 @@ fun DataOutputStream.writeTLV0006(qq: Int, password: String, loginTime: Int, log
}
}
}
}
fun
main
()
{
}
/*
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
fun main() {
fun main() {
println(lazyEncode { it.writeTLV0006(1994701021, "D1 A5 C8 BB E1 Q3 CC DD", 131513, "123.123.123.123", "AA BB CC DD EE FF AA BB CC".hexToBytes()) }.toUByteArray().toUHexString())
println(lazyEncode { it.writeTLV0006(1994701021, "D1 A5 C8 BB E1 Q3 CC DD", 131513, "123.123.123.123", "AA BB CC DD EE FF AA BB CC".hexToBytes()) }.toUByteArray().toUHexString())
}
}
*/
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
@TestedSuccessfully
fun
DataOutputStream
.
writeCRC32
()
=
writeCRC32
(
getRandomKey
(
16
))
fun
DataOutputStream
.
writeCRC32
()
=
writeCRC32
(
getRandomKey
(
16
))
...
@@ -170,6 +176,7 @@ fun DataOutputStream.writeCRC32(key: ByteArray) {
...
@@ -170,6 +176,7 @@ fun DataOutputStream.writeCRC32(key: ByteArray) {
}
}
}
}
@TestedSuccessfully
fun
DataOutputStream
.
writeDeviceName
()
{
fun
DataOutputStream
.
writeDeviceName
()
{
val
deviceName
=
InetAddress
.
getLocalHost
().
hostName
val
deviceName
=
InetAddress
.
getLocalHost
().
hostName
this
.
writeShort
(
deviceName
.
length
+
2
)
this
.
writeShort
(
deviceName
.
length
+
2
)
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/login/ClientLoginPacket.kt
View file @
16d70c9f
...
@@ -6,6 +6,7 @@ import net.mamoe.mirai.network.packet.client.*
...
@@ -6,6 +6,7 @@ import net.mamoe.mirai.network.packet.client.*
import
net.mamoe.mirai.util.*
import
net.mamoe.mirai.util.*
import
java.io.DataOutputStream
import
java.io.DataOutputStream
import
java.net.InetAddress
import
java.net.InetAddress
import
kotlin.system.exitProcess
/**
/**
* Password submission (0836_622)
* Password submission (0836_622)
...
@@ -39,7 +40,11 @@ class ClientPasswordSubmissionPacket(
...
@@ -39,7 +40,11 @@ class ClientPasswordSubmissionPacket(
}
}
}
}
@UseExperimental
(
ExperimentalUnsignedTypes
::
class
)
fun
main
()
{
fun
main
()
{
println
(
InetAddress
.
getLocalHost
().
hostName
)
exitProcess
(
0
)
val
loginTime
=
"5D 60 F6 33"
.
hexToInt
()
val
loginTime
=
"5D 60 F6 33"
.
hexToInt
()
println
(
loginTime
)
println
(
loginTime
)
...
@@ -67,11 +72,13 @@ fun main() {
...
@@ -67,11 +72,13 @@ fun main() {
@PacketId
(
"08 36 31 04"
)
@PacketId
(
"08 36 31 04"
)
@ExperimentalUnsignedTypes
//todo 测试出来这个包长度有问题
@ExperimentalUnsignedTypes
//todo 测试出来这个包长度有问题
class
ClientLoginResendPacket3104
(
qq
:
Int
,
password
:
String
,
loginTime
:
Int
,
loginIP
:
String
,
tgtgtKey
:
ByteArray
,
token0825
:
ByteArray
,
token00BA
:
ByteArray
,
tlv_0006_encr
:
ByteArray
?
=
null
)
:
ClientLoginResendPacket
(
qq
,
password
,
loginTime
,
loginIP
,
tgtgtKey
,
token0825
,
token00BA
,
tlv_0006_encr
)
class
ClientLoginResendPacket3104
(
qq
:
Int
,
password
:
String
,
loginTime
:
Int
,
loginIP
:
String
,
tgtgtKey
:
ByteArray
,
token0825
:
ByteArray
,
token00BA
:
ByteArray
,
tlv_0006_encr
:
ByteArray
?
=
null
)
:
ClientLoginResendPacket
(
qq
,
password
,
loginTime
,
loginIP
,
tgtgtKey
,
token0825
,
token00BA
,
tlv_0006_encr
)
@PacketId
(
"08 36 31 06"
)
@PacketId
(
"08 36 31 06"
)
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
class
ClientLoginResendPacket3106
(
qq
:
Int
,
password
:
String
,
loginTime
:
Int
,
loginIP
:
String
,
tgtgtKey
:
ByteArray
,
token0825
:
ByteArray
,
token00BA
:
ByteArray
,
tlv_0006_encr
:
ByteArray
?
=
null
)
:
ClientLoginResendPacket
(
qq
,
password
,
loginTime
,
loginIP
,
tgtgtKey
,
token0825
,
token00BA
,
tlv_0006_encr
)
class
ClientLoginResendPacket3106
(
qq
:
Int
,
password
:
String
,
loginTime
:
Int
,
loginIP
:
String
,
tgtgtKey
:
ByteArray
,
token0825
:
ByteArray
,
token00BA
:
ByteArray
,
tlv_0006_encr
:
ByteArray
?
=
null
)
:
ClientLoginResendPacket
(
qq
,
password
,
loginTime
,
loginIP
,
tgtgtKey
,
token0825
,
token00BA
,
tlv_0006_encr
)
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
open
class
ClientLoginResendPacket
internal
constructor
(
open
class
ClientLoginResendPacket
internal
constructor
(
...
@@ -111,7 +118,7 @@ open class ClientLoginResendPacket internal constructor(
...
@@ -111,7 +118,7 @@ open class ClientLoginResendPacket internal constructor(
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
@PacketId
(
"08 28 04 34"
)
@PacketId
(
"08 28 04 34"
)
class
Client
LoginSucceedConfirmation
Packet
(
class
Client
SessionRequest
Packet
(
private
val
qq
:
Int
,
private
val
qq
:
Int
,
private
val
serverIp
:
String
,
private
val
serverIp
:
String
,
private
val
loginIP
:
String
,
private
val
loginIP
:
String
,
...
@@ -153,7 +160,7 @@ class ClientLoginSucceedConfirmationPacket(
...
@@ -153,7 +160,7 @@ class ClientLoginSucceedConfirmationPacket(
this
.
writeHex
(
"68"
)
this
.
writeHex
(
"68"
)
this
.
writeHex
(
"00 00 00 00 00 2D 00 06 00 01"
)
this
.
writeHex
(
"00 00 00 00 00 2D 00 06 00 01"
)
this
.
writeIP
(
InetAddress
.
getLocalHost
().
host
Name
)
//? todo 这随便扔的
this
.
writeIP
(
InetAddress
.
getLocalHost
().
host
Address
)
return
super
.
toByteArray
()
return
super
.
toByteArray
()
}
}
...
@@ -173,9 +180,6 @@ private fun DataOutputStream.writePart1(qq: Int, password: String, loginTime: In
...
@@ -173,9 +180,6 @@ private fun DataOutputStream.writePart1(qq: Int, password: String, loginTime: In
this
.
write
(
token0825
)
//length
this
.
write
(
token0825
)
//length
this
.
writeHex
(
"03 0F"
)
//tag
this
.
writeHex
(
"03 0F"
)
//tag
this
.
writeDeviceName
()
this
.
writeDeviceName
()
/*易语言源码: PCName就是HostName
PCName = BytesToStr (Ansi转Utf8 (取主机名 ()))
PCName = 取文本左边 (PCName, 取文本长度 (PCName) - 3)*/
this
.
writeHex
(
"00 05 00 06 00 02"
)
this
.
writeHex
(
"00 05 00 06 00 02"
)
this
.
writeQQ
(
qq
)
this
.
writeQQ
(
qq
)
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/client/touch/ClientTouchPacket.kt
View file @
16d70c9f
...
@@ -12,7 +12,7 @@ import net.mamoe.mirai.util.toUHexString
...
@@ -12,7 +12,7 @@ import net.mamoe.mirai.util.toUHexString
import
java.io.IOException
import
java.io.IOException
/**
/**
* The packet to touch server.
* The packet to touch server
, that is, to start the connection to the server
.
*
*
* @author Him188moe
* @author Him188moe
*/
*/
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/ServerPacket.kt
View file @
16d70c9f
This diff is collapsed.
Click to expand it.
mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseResendPacket.kt
View file @
16d70c9f
...
@@ -20,22 +20,22 @@ class ServerLoginResponseResendPacket(input: DataInputStream, val flag: Flag) :
...
@@ -20,22 +20,22 @@ class ServerLoginResponseResendPacket(input: DataInputStream, val flag: Flag) :
OTHER
,
OTHER
,
}
}
lateinit
var
_0836_tlv0006_encr
:
ByteArray
;
lateinit
var
_0836_tlv0006_encr
:
ByteArray
;
//120bytes
var
tokenUnknown
:
ByteArray
?
=
null
var
tokenUnknown
:
ByteArray
?
=
null
lateinit
var
tgtgtKey
:
ByteArray
lateinit
var
tgtgtKey
:
ByteArray
//16bytes
@TestedSuccessfully
@TestedSuccessfully
override
fun
decode
()
{
override
fun
decode
()
{
this
.
input
.
skip
(
5
)
this
.
input
.
skip
(
5
)
tgtgtKey
=
this
.
input
.
readNBytes
(
16
)
//22
tgtgtKey
=
this
.
input
.
readNBytes
(
16
)
//22
println
(
tgtgtKey
.
toUHexString
())
//this.input.skip(2)//25
this
.
input
.
skip
(
2
)
//25
this
.
input
.
goto
(
25
)
_0836_tlv0006_encr
=
this
.
input
.
readNBytes
(
120
)
_0836_tlv0006_encr
=
this
.
input
.
readNBytes
(
120
)
when
(
flag
)
{
when
(
flag
)
{
Flag
.
`
08
36
31
03
`
->
{
Flag
.
`
08
36
31
03
`
->
{
tokenUnknown
=
this
.
input
.
goto
(
153
).
readNBytes
(
56
)
tokenUnknown
=
this
.
input
.
goto
(
153
).
readNBytes
(
56
)
println
(
tokenUnknown
!!
.
toUHexString
())
//
println(tokenUnknown!!.toUHexString())
}
}
Flag
.
OTHER
->
{
Flag
.
OTHER
->
{
...
...
mirai-core/src/main/java/net/mamoe/mirai/network/packet/server/login/ServerLoginResponseSuccessPacket.kt
View file @
16d70c9f
...
@@ -6,6 +6,7 @@ import net.mamoe.mirai.network.packet.server.goto
...
@@ -6,6 +6,7 @@ import net.mamoe.mirai.network.packet.server.goto
import
net.mamoe.mirai.network.packet.server.readNBytes
import
net.mamoe.mirai.network.packet.server.readNBytes
import
net.mamoe.mirai.network.packet.server.readVarString
import
net.mamoe.mirai.network.packet.server.readVarString
import
net.mamoe.mirai.util.TEACryptor
import
net.mamoe.mirai.util.TEACryptor
import
net.mamoe.mirai.util.TestedSuccessfully
import
net.mamoe.mirai.util.hexToBytes
import
net.mamoe.mirai.util.hexToBytes
import
net.mamoe.mirai.util.toUHexString
import
net.mamoe.mirai.util.toUHexString
import
java.io.DataInputStream
import
java.io.DataInputStream
...
@@ -13,10 +14,8 @@ import java.io.DataInputStream
...
@@ -13,10 +14,8 @@ import java.io.DataInputStream
/**
/**
* @author NaturalHG
* @author NaturalHG
*/
*/
class
ServerLoginResponseSuccessPacket
(
input
:
DataInputStream
,
val
packetDataLength
:
Int
)
:
ServerPacket
(
input
)
{
class
ServerLoginResponseSuccessPacket
(
input
:
DataInputStream
)
:
ServerPacket
(
input
)
{
lateinit
var
_0828_rec_decr_key
:
ByteArray
//16 bytes|
lateinit
var
_0828_rec_decr_key
:
ByteArray
//16 bytes|
var
age
:
Short
=
0
var
gender
:
Int
=
0
//from 1byte
lateinit
var
nick
:
String
lateinit
var
nick
:
String
lateinit
var
token38
:
ByteArray
lateinit
var
token38
:
ByteArray
...
@@ -24,6 +23,7 @@ class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLen
...
@@ -24,6 +23,7 @@ class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLen
lateinit
var
encryptionKey
:
ByteArray
lateinit
var
encryptionKey
:
ByteArray
@TestedSuccessfully
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
override
fun
decode
()
{
override
fun
decode
()
{
//测试完成 @NaturalHG
//测试完成 @NaturalHG
...
@@ -113,9 +113,9 @@ class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLen
...
@@ -113,9 +113,9 @@ class ServerLoginResponseSuccessPacket(input: DataInputStream, val packetDataLen
val
nickLength
=
this
.
input
.
goto
(
624
+
msgLength
).
readByte
().
toInt
()
val
nickLength
=
this
.
input
.
goto
(
624
+
msgLength
).
readByte
().
toInt
()
this
.
nick
=
this
.
input
.
readVarString
(
nickLength
)
this
.
nick
=
this
.
input
.
readVarString
(
nickLength
)
this
.
age
=
this
.
input
.
goto
(
packetDataLength
-
28
).
readShort
()
//
this.age = this.input.goto(packetDataLength - 28).readShort()
this
.
gender
=
this
.
input
.
goto
(
packetDataLength
-
32
).
readByte
().
toInt
()
//
this.gender = this.input.goto(packetDataLength - 32).readByte().toInt()
}
}
}
}
...
@@ -131,7 +131,7 @@ class ServerLoginResponseSuccessPacketEncrypted(input: DataInputStream) : Server
...
@@ -131,7 +131,7 @@ class ServerLoginResponseSuccessPacketEncrypted(input: DataInputStream) : Server
bytes
=
bytes
.
copyOfRange
(
0
,
bytes
.
size
-
1
)
bytes
=
bytes
.
copyOfRange
(
0
,
bytes
.
size
-
1
)
println
(
bytes
.
toUByteArray
().
toUHexString
())
println
(
bytes
.
toUByteArray
().
toUHexString
())
return
ServerLoginResponseSuccessPacket
(
DataInputStream
(
TEACryptor
.
decrypt
(
TEACryptor
.
decrypt
(
bytes
,
Protocol
.
shareKey
.
hexToBytes
()),
tgtgtKey
).
inputStream
())
,
bytes
.
size
);
return
ServerLoginResponseSuccessPacket
(
DataInputStream
(
TEACryptor
.
decrypt
(
TEACryptor
.
decrypt
(
bytes
,
Protocol
.
shareKey
.
hexToBytes
()),
tgtgtKey
).
inputStream
()));
//TeaDecrypt(取文本中间(data, 43, 取文本长度(data) - 45), m_0828_rec_decr_key)
//TeaDecrypt(取文本中间(data, 43, 取文本长度(data) - 45), m_0828_rec_decr_key)
}
}
}
}
mirai-core/src/main/java/net/mamoe/mirai/util/Utils.kt
View file @
16d70c9f
...
@@ -12,7 +12,7 @@ import java.util.zip.CRC32
...
@@ -12,7 +12,7 @@ import java.util.zip.CRC32
*/
*/
object
Utils
{
object
Utils
{
fun
toHexString
(
byteArray
:
ByteArray
,
separator
:
String
=
" "
):
String
=
byteArray
.
joinToString
(
separator
)
{
fun
toHexString
(
byteArray
:
ByteArray
,
separator
:
String
=
" "
):
String
=
byteArray
.
joinToString
(
separator
)
{
var
ret
=
it
.
toString
(
16
).
toUpperCase
()
;
var
ret
=
it
.
toString
(
16
).
toUpperCase
()
if
(
ret
.
length
==
1
)
{
if
(
ret
.
length
==
1
)
{
ret
=
"0$ret"
ret
=
"0$ret"
}
}
...
@@ -21,7 +21,7 @@ object Utils {
...
@@ -21,7 +21,7 @@ object Utils {
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
fun
toHexString
(
byteArray
:
UByteArray
,
separator
:
String
=
" "
):
String
=
byteArray
.
joinToString
(
separator
)
{
fun
toHexString
(
byteArray
:
UByteArray
,
separator
:
String
=
" "
):
String
=
byteArray
.
joinToString
(
separator
)
{
var
ret
=
it
.
toString
(
16
).
toUpperCase
()
;
var
ret
=
it
.
toString
(
16
).
toUpperCase
()
if
(
ret
.
length
==
1
)
{
if
(
ret
.
length
==
1
)
{
ret
=
"0$ret"
ret
=
"0$ret"
}
}
...
@@ -67,7 +67,7 @@ fun String.hexToByte(): Byte = hexToBytes()[0]
...
@@ -67,7 +67,7 @@ fun String.hexToByte(): Byte = hexToBytes()[0]
open
class
ByteArrayDataOutputStream
:
DataOutputStream
(
ByteArrayOutputStream
())
{
open
class
ByteArrayDataOutputStream
:
DataOutputStream
(
ByteArrayOutputStream
())
{
open
fun
toByteArray
():
ByteArray
=
(
out
as
ByteArrayOutputStream
).
toByteArray
()
open
fun
toByteArray
():
ByteArray
=
(
out
as
ByteArrayOutputStream
).
toByteArray
()
@ExperimentalUnsignedTypes
@ExperimentalUnsignedTypes
open
fun
toUByteArray
():
UByteArray
=
(
out
as
ByteArrayOutputStream
).
toByteArray
().
toUByteArray
()
;
open
fun
toUByteArray
():
UByteArray
=
(
out
as
ByteArrayOutputStream
).
toByteArray
().
toUByteArray
()
}
}
fun
lazyEncode
(
t
:
(
ByteArrayDataOutputStream
)
->
Unit
):
ByteArray
=
ByteArrayDataOutputStream
().
let
{
t
(
it
);
return
it
.
toByteArray
()
}
fun
lazyEncode
(
t
:
(
ByteArrayDataOutputStream
)
->
Unit
):
ByteArray
=
ByteArrayDataOutputStream
().
let
{
t
(
it
);
return
it
.
toByteArray
()
}
...
@@ -76,7 +76,7 @@ fun lazyEncode(t: (ByteArrayDataOutputStream) -> Unit): ByteArray = ByteArrayDat
...
@@ -76,7 +76,7 @@ fun lazyEncode(t: (ByteArrayDataOutputStream) -> Unit): ByteArray = ByteArrayDat
fun
getRandomKey
(
length
:
Int
):
ByteArray
{
fun
getRandomKey
(
length
:
Int
):
ByteArray
{
val
bytes
=
LinkedList
<
Byte
>()
val
bytes
=
LinkedList
<
Byte
>()
repeat
(
length
)
{
bytes
.
add
((
Math
.
random
()
*
255
).
toByte
())
}
repeat
(
length
)
{
bytes
.
add
((
Math
.
random
()
*
255
).
toByte
())
}
return
bytes
.
toByteArray
()
;
return
bytes
.
toByteArray
()
}
}
fun
getCrc32
(
key
:
ByteArray
):
Int
=
CRC32
().
let
{
it
.
update
(
key
);
it
.
value
.
toInt
()
}
fun
getCrc32
(
key
:
ByteArray
):
Int
=
CRC32
().
let
{
it
.
update
(
key
);
it
.
value
.
toInt
()
}
...
@@ -93,7 +93,7 @@ fun getCrc32(key: ByteArray): Int = CRC32().let { it.update(key); it.value.toInt
...
@@ -93,7 +93,7 @@ fun getCrc32(key: ByteArray): Int = CRC32().let { it.update(key); it.value.toInt
*/
*/
@Throws
(
SecurityException
::
class
)
@Throws
(
SecurityException
::
class
)
fun
Any
.
getAllDeclaredFields
():
List
<
Field
>
{
fun
Any
.
getAllDeclaredFields
():
List
<
Field
>
{
var
clazz
:
Class
<
*
>
=
this
.
javaClass
;
var
clazz
:
Class
<
*
>
=
this
.
javaClass
val
list
=
LinkedList
<
Field
>()
val
list
=
LinkedList
<
Field
>()
loop
@
do
{
loop
@
do
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment