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
5f0220b9
Commit
5f0220b9
authored
Oct 07, 2019
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rename lazyEncode to dataEncode
parent
8ca3e657
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
59 additions
and
152 deletions
+59
-152
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/defaults/Face.kt
...c/jvmMain/kotlin/net/mamoe/mirai/message/defaults/Face.kt
+6
-6
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/defaults/Image.kt
.../jvmMain/kotlin/net/mamoe/mirai/message/defaults/Image.kt
+10
-10
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/defaults/MessageChain.kt
...n/kotlin/net/mamoe/mirai/message/defaults/MessageChain.kt
+2
-2
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/defaults/PlainText.kt
...Main/kotlin/net/mamoe/mirai/message/defaults/PlainText.kt
+5
-5
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
.../mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
+2
-1
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/ServerEvent.kt
...et/mamoe/mirai/network/protocol/tim/packet/ServerEvent.kt
+3
-3
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/action/ClientSendFriendMessagePacket.kt
...otocol/tim/packet/action/ClientSendFriendMessagePacket.kt
+2
-2
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/action/ClientSendGroupMessagePacket.kt
...rotocol/tim/packet/action/ClientSendGroupMessagePacket.kt
+2
-2
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/login/Session.kt
.../mamoe/mirai/network/protocol/tim/packet/login/Session.kt
+2
-2
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/login/VerificationCode.kt
...rai/network/protocol/tim/packet/login/VerificationCode.kt
+1
-1
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/TEA.kt
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/TEA.kt
+3
-3
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/Utils.kt
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/Utils.kt
+6
-4
mirai-debug/src/main/java/PacketDebuger.kt
mirai-debug/src/main/java/PacketDebuger.kt
+15
-111
No files found.
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/defaults/Face.kt
View file @
5f0220b9
...
...
@@ -6,8 +6,8 @@ import net.mamoe.mirai.message.MessageKey
import
net.mamoe.mirai.network.protocol.tim.packet.readLVNumber
import
net.mamoe.mirai.network.protocol.tim.packet.writeHex
import
net.mamoe.mirai.network.protocol.tim.packet.writeLVByteArray
import
net.mamoe.mirai.utils.
lazy
Decode
import
net.mamoe.mirai.utils.
lazy
Encode
import
net.mamoe.mirai.utils.
data
Decode
import
net.mamoe.mirai.utils.
data
Encode
/**
* QQ 自带表情
...
...
@@ -23,10 +23,10 @@ class Face(val id: FaceID) : Message() {
return
String
.
format
(
"[face%d]"
,
id
.
id
)
}
override
fun
toByteArray
():
ByteArray
=
lazy
Encode
{
section
->
override
fun
toByteArray
():
ByteArray
=
data
Encode
{
section
->
section
.
writeByte
(
this
.
type
.
intValue
)
section
.
writeLVByteArray
(
lazy
Encode
{
child
->
section
.
writeLVByteArray
(
data
Encode
{
child
->
child
.
writeShort
(
1
)
child
.
writeByte
(
this
.
id
.
id
)
...
...
@@ -49,7 +49,7 @@ class Face(val id: FaceID) : Message() {
override
operator
fun
contains
(
sub
:
String
):
Boolean
=
false
internal
object
PacketHelper
{
fun
ofByteArray
(
data
:
ByteArray
):
Face
=
lazy
Decode
(
data
)
{
fun
ofByteArray
(
data
:
ByteArray
):
Face
=
data
Decode
(
data
)
{
//00 01 AF 0B 00 08 00 01 00 04 52 CC F5 D0 FF 00 02 14 F0
//00 01 0C 0B 00 08 00 01 00 04 52 CC F5 D0 FF 00 02 14 4D
it
.
skip
(
1
)
...
...
@@ -57,7 +57,7 @@ class Face(val id: FaceID) : Message() {
val
id1
=
FaceID
.
ofId
(
it
.
readLVNumber
().
toInt
())
//可能这个是id, 也可能下面那个
it
.
skip
(
it
.
readByte
().
toLong
())
it
.
readLVNumber
()
//某id?
return
@
lazy
Decode
Face
(
id1
)
return
@
data
Decode
Face
(
id1
)
}
}
}
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/defaults/Image.kt
View file @
5f0220b9
...
...
@@ -3,8 +3,8 @@ package net.mamoe.mirai.message.defaults
import
net.mamoe.mirai.message.Message
import
net.mamoe.mirai.message.MessageKey
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.utils.
lazy
Decode
import
net.mamoe.mirai.utils.
lazy
Encode
import
net.mamoe.mirai.utils.
data
Decode
import
net.mamoe.mirai.utils.
data
Encode
import
net.mamoe.mirai.utils.skip
import
net.mamoe.mirai.utils.toUHexString
...
...
@@ -25,10 +25,10 @@ open class Image(val imageId: String) : Message() {
return
imageId
}
override
fun
toByteArray
():
ByteArray
=
lazy
Encode
{
section
->
override
fun
toByteArray
():
ByteArray
=
data
Encode
{
section
->
section
.
writeByte
(
intValue
)
section
.
writeLVByteArray
(
lazy
Encode
{
child
->
section
.
writeLVByteArray
(
data
Encode
{
child
->
child
.
writeByte
(
0
x02
)
child
.
writeLVString
(
this
.
imageId
)
child
.
writeHex
(
"04 00 "
+
...
...
@@ -57,7 +57,7 @@ open class Image(val imageId: String) : Message() {
internal
object
PacketHelper
{
@JvmStatic
fun
ofByteArray0x06
(
data
:
ByteArray
):
Image
=
lazy
Decode
(
data
)
{
fun
ofByteArray0x06
(
data
:
ByteArray
):
Image
=
data
Decode
(
data
)
{
it
.
skip
(
1
)
println
(
"好友的图片"
)
println
(
data
.
toUHexString
())
...
...
@@ -67,17 +67,17 @@ open class Image(val imageId: String) : Message() {
val
imageId
=
String
(
it
.
readNBytes
(
36
))
println
(
imageId
)
it
.
skip
(
1
)
//0x41
return
@
lazy
Decode
Image
(
"{$imageId}.$suffix"
)
return
@
data
Decode
Image
(
"{$imageId}.$suffix"
)
}
@JvmStatic
fun
ofByteArray0x03
(
data
:
ByteArray
):
Image
=
lazy
Decode
(
data
)
{
fun
ofByteArray0x03
(
data
:
ByteArray
):
Image
=
data
Decode
(
data
)
{
it
.
skip
(
1
)
return
@
lazy
Decode
Image
(
String
(
it
.
readLVByteArray
()))
return
@
data
Decode
Image
(
String
(
it
.
readLVByteArray
()))
/*
println(String(it.readLVByteArray()))
it.readTLVMap()
return@
lazy
Decode Image(String(it.readLVByteArray().cutTail(5).getRight(42)))
return@
data
Decode Image(String(it.readLVByteArray().cutTail(5).getRight(42)))
/
it.skip(data.size - 47)
val imageId = String(it.readNBytes(42))
...
...
@@ -86,7 +86,7 @@ open class Image(val imageId: String) : Message() {
it.skip(1)//0x43
it.skip(1)//0x41
return@
lazy
Decode Image(imageId)*/
return@
data
Decode Image(imageId)*/
}
}
}
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/defaults/MessageChain.kt
View file @
5f0220b9
...
...
@@ -2,7 +2,7 @@ package net.mamoe.mirai.message.defaults
import
net.mamoe.mirai.message.Message
import
net.mamoe.mirai.message.MessageKey
import
net.mamoe.mirai.utils.
lazy
Encode
import
net.mamoe.mirai.utils.
data
Encode
import
java.util.*
import
java.util.stream.Collectors
import
java.util.stream.Stream
...
...
@@ -77,7 +77,7 @@ class MessageChain : Message {
return
this
}
override
fun
toByteArray
():
ByteArray
=
lazy
Encode
{
override
fun
toByteArray
():
ByteArray
=
data
Encode
{
stream
().
forEach
{
message
->
it
.
write
(
message
.
toByteArray
())
}
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/defaults/PlainText.kt
View file @
5f0220b9
...
...
@@ -5,8 +5,8 @@ import net.mamoe.mirai.message.MessageKey
import
net.mamoe.mirai.network.protocol.tim.packet.readLVString
import
net.mamoe.mirai.network.protocol.tim.packet.writeLVByteArray
import
net.mamoe.mirai.network.protocol.tim.packet.writeLVString
import
net.mamoe.mirai.utils.
lazy
Decode
import
net.mamoe.mirai.utils.
lazy
Encode
import
net.mamoe.mirai.utils.
data
Decode
import
net.mamoe.mirai.utils.
data
Encode
/**
* @author Him188moe
...
...
@@ -20,10 +20,10 @@ class PlainText(private val text: String) : Message() {
return
text
}
override
fun
toByteArray
():
ByteArray
=
lazy
Encode
{
section
->
override
fun
toByteArray
():
ByteArray
=
data
Encode
{
section
->
section
.
writeByte
(
this
.
type
.
intValue
)
section
.
writeLVByteArray
(
lazy
Encode
{
child
->
section
.
writeLVByteArray
(
data
Encode
{
child
->
child
.
writeByte
(
0
x01
)
child
.
writeLVString
(
this
.
text
)
})
...
...
@@ -40,7 +40,7 @@ class PlainText(private val text: String) : Message() {
internal
object
PacketHelper
{
@JvmStatic
fun
ofByteArray
(
data
:
ByteArray
):
PlainText
=
lazy
Decode
(
data
)
{
fun
ofByteArray
(
data
:
ByteArray
):
PlainText
=
data
Decode
(
data
)
{
it
.
skip
(
1
)
PlainText
(
it
.
readLVString
())
}
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/TIMBotNetworkHandler.kt
View file @
5f0220b9
...
...
@@ -55,7 +55,8 @@ internal class TIMBotNetworkHandler(private val bot: Bot) : BotNetworkHandler {
return
loginInternal
(
LinkedList
(
TIMProtocol
.
SERVER_IP
))
}
private
suspend
fun
loginInternal
(
ipQueue
:
LinkedList
<
String
>):
LoginState
{
//嵌套进 login 会导致 kotlin internal CompilationException
suspend
fun
loginInternal
(
ipQueue
:
LinkedList
<
String
>):
LoginState
{
this
.
socket
.
close
()
val
ip
=
ipQueue
.
poll
()
?:
return
LoginState
.
UNKNOWN
//所有服务器均返回 UNKNOWN
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/ServerEvent.kt
View file @
5f0220b9
...
...
@@ -8,8 +8,8 @@ import net.mamoe.mirai.message.defaults.Image
import
net.mamoe.mirai.message.defaults.MessageChain
import
net.mamoe.mirai.message.defaults.PlainText
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.utils.dataDecode
import
net.mamoe.mirai.utils.hexToBytes
import
net.mamoe.mirai.utils.lazyDecode
import
net.mamoe.mirai.utils.toUHexString
import
net.mamoe.mirai.utils.toUInt
import
java.io.DataInputStream
...
...
@@ -139,7 +139,7 @@ class ServerGroupMessageEventPacket(input: DataInputStream, packetId: ByteArray,
val
map
=
input
.
readTLVMap
(
true
)
if
(
map
.
containsKey
(
18
))
{
this
.
senderName
=
lazy
Decode
(
map
.
getValue
(
18
))
{
this
.
senderName
=
data
Decode
(
map
.
getValue
(
18
))
{
val
tlv
=
it
.
readTLVMap
(
true
)
tlv
.
printTLVMap
()
...
...
@@ -385,7 +385,7 @@ class ServerFriendMessageEventPacket(input: DataInputStream, packetId: ByteArray
override fun decode() {
override fun d
ataD
ecode() {
//start at Sep1.0:27
qq = input.readIntAt(0)
val msgLength = input.readShortAt(22)
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/action/ClientSendFriendMessagePacket.kt
View file @
5f0220b9
...
...
@@ -3,7 +3,7 @@ package net.mamoe.mirai.network.protocol.tim.packet.action
import
net.mamoe.mirai.message.defaults.MessageChain
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.utils.
lazy
Encode
import
net.mamoe.mirai.utils.
data
Encode
import
java.io.DataInputStream
/**
...
...
@@ -29,7 +29,7 @@ class ClientSendFriendMessagePacket(
writeHex
(
"37 0F"
)
//TIM最新: 38 03
writeQQ
(
botQQ
)
writeQQ
(
targetQQ
)
write
(
md5
(
lazy
Encode
{
md5Key
->
md5Key
.
writeQQ
(
targetQQ
);
md5Key
.
write
(
sessionKey
)
}))
write
(
md5
(
data
Encode
{
md5Key
->
md5Key
.
writeQQ
(
targetQQ
);
md5Key
.
write
(
sessionKey
)
}))
writeHex
(
"00 0B"
)
writeRandom
(
2
)
writeTime
()
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/action/ClientSendGroupMessagePacket.kt
View file @
5f0220b9
...
...
@@ -3,7 +3,7 @@ package net.mamoe.mirai.network.protocol.tim.packet.action
import
net.mamoe.mirai.message.defaults.MessageChain
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.utils.
lazy
Encode
import
net.mamoe.mirai.utils.
data
Encode
import
net.mamoe.mirai.utils.toUHexString
import
java.io.DataInputStream
...
...
@@ -27,7 +27,7 @@ class ClientSendGroupMessagePacket(
writeByte
(
0
x2A
)
writeGroup
(
groupId
)
writeLVByteArray
(
lazy
Encode
{
child
->
writeLVByteArray
(
data
Encode
{
child
->
child
.
writeHex
(
"00 01 01"
)
child
.
writeHex
(
"00 00 00 00 00 00 00 4D 53 47 00 00 00 00 00"
)
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/login/Session.kt
View file @
5f0220b9
...
...
@@ -3,7 +3,7 @@ package net.mamoe.mirai.network.protocol.tim.packet.login
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.utils.TEA
import
net.mamoe.mirai.utils.
lazy
Encode
import
net.mamoe.mirai.utils.
data
Encode
import
java.io.DataInputStream
import
java.net.InetAddress
...
...
@@ -87,7 +87,7 @@ class ServerSessionKeyResponsePacket(inputStream: DataInputStream, private val d
527
->
{
input
.
goto
(
63
)
sessionKey
=
input
.
readNBytes
(
16
)
tlv0105
=
lazy
Encode
{
tlv0105
=
data
Encode
{
it
.
writeHex
(
"01 05 00 88 00 01 01 02 00 40 02 01 03 3C 01 03 00 00"
)
input
.
goto
(
dataLength
-
122
)
it
.
write
(
input
.
readNBytes
(
56
))
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/network/protocol/tim/packet/login/VerificationCode.kt
View file @
5f0220b9
...
...
@@ -165,7 +165,7 @@ open class ServerCaptchaTransmissionPacket(input: DataInputStream, private val d
fun main() {
val data = "13 00 05 01 00 00 01 23 00 38 59 32 29 5A 3E 3D 2D FC F5 22 EB 9E 2D FB 9C 4F AA 06 C8 32 3D F0 3C 2C 2B BA 8D 05 C4 9B C1 74 3B 70 F1 99 90 BB 6E 3E 6F 74 48 97 D3 61 B7 04 C0 A3 F1 DF 40 A4 DC 2B 00 A2 01 2D BB BB E8 FE B8 AF B3 6F 39 7C EA E2 5B 91 BE DB 59 38 CF 58 BC F2 88 F1 09 CF 92 E9 F7 FB 13 76 C5 68 29 23 3F 8E 43 16 2E 50 D7 FA 4D C1 F7 67 EF 27 FB C6 F1 A7 25 A4 BC 45 39 3A EA B2 A5 38 02 FF 4B C9 FF EB BD 89 E5 5D B9 4A 2A BE 5F 52 F1 EB 09 29 CB 3E 66 CF EF 97 89 47 BB 6B E0 7B 4A 3E A1 BC 3F FB F2 0A 83 CB E3 EA B9 43 E1 26 88 03 0B A7 E0 B2 AD 7F 83 CC DA 74 85 83 72 08 EC D2 F9 95 05 15 05 96 F7 1C FF 00 82 C3 90 22 A4 BA 90 D5 00 00 00 00 49 45 4E 44 AE 42 60 82 03 00 00 28 EA 32 5A 85 C8 D2 73 B3 40 39 77 85 65 98 00 FE 03 A2 A5 95 B4 2F E6 79 7A DE 5A 03 10 C8 3D BF 6D 3D 8B 51 84 C2 6D 49 00 10 92 AA 69 FB C6 3D 60 5A 7A A4 AC 7A B0 71 00 36".hexToBytes()
ServerVerificationCodeTransmissionPacket(data.dataInputStream(), data.size, "00 BA 31 01".hexToBytes()).let {
it.decode()
it.d
ataD
ecode()
println(it.toString())
}
}*/
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/TEA.kt
View file @
5f0220b9
...
...
@@ -183,7 +183,7 @@ object TEA {
if
(
mIndexPos
==
8
)
{
isFirstBlock
=
false
if
(!
decodeOneBlock
(
cipherText
,
offset
,
len
))
{
throw
RuntimeException
(
"Unable to decode"
)
throw
RuntimeException
(
"Unable to d
ataD
ecode"
)
}
}
}
...
...
@@ -201,7 +201,7 @@ object TEA {
mPreOutPos
=
mOutPos
-
8
isFirstBlock
=
false
if
(!
decodeOneBlock
(
cipherText
,
offset
,
len
))
{
throw
RuntimeException
(
"Unable to decode"
)
throw
RuntimeException
(
"Unable to d
ataD
ecode"
)
}
}
plen--
...
...
@@ -219,7 +219,7 @@ object TEA {
if
(
mIndexPos
==
8
)
{
mPreOutPos
=
mOutPos
if
(!
decodeOneBlock
(
cipherText
,
offset
,
len
))
{
throw
RuntimeException
(
"Unable to decode"
)
throw
RuntimeException
(
"Unable to d
ataD
ecode"
)
}
}
g
++
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/Utils.kt
View file @
5f0220b9
...
...
@@ -78,9 +78,11 @@ open class ByteArrayDataOutputStream : DataOutputStream(ByteArrayOutputStream())
open
fun
toUByteArray
():
UByteArray
=
(
out
as
ByteArrayOutputStream
).
toByteArray
().
toUByteArray
()
}
fun
lazy
Encode
(
t
:
(
ByteArrayDataOutputStream
)
->
Unit
):
ByteArray
=
ByteArrayDataOutputStream
().
also
(
t
).
toByteArray
()
fun
data
Encode
(
t
:
(
ByteArrayDataOutputStream
)
->
Unit
):
ByteArray
=
ByteArrayDataOutputStream
().
also
(
t
).
toByteArray
()
fun
<
T
>
lazyDecode
(
byteArray
:
ByteArray
,
t
:
(
DataInputStream
)
->
T
):
T
=
byteArray
.
dataInputStream
().
let
(
t
)
fun
<
R
>
dataDecode
(
byteArray
:
ByteArray
,
t
:
(
DataInputStream
)
->
R
):
R
=
byteArray
.
dataInputStream
().
let
(
t
)
fun
<
R
>
ByteArray
.
decode
(
t
:
(
DataInputStream
)
->
R
):
R
=
this
.
dataInputStream
().
let
(
t
)
fun
DataInputStream
.
skip
(
n
:
Number
)
{
this
.
skip
(
n
.
toLong
())
...
...
@@ -149,13 +151,13 @@ fun ByteArray.removeZeroTail(): ByteArray {
}
fun
BufferedImage
.
toByteArray
(
formatName
:
String
=
"PNG"
):
ByteArray
{
return
lazy
Encode
{
return
data
Encode
{
ImageIO
.
write
(
this
,
formatName
,
it
)
}
}
object
GZip
{
fun
uncompress
(
bytes
:
ByteArray
):
ByteArray
=
lazy
Encode
{
fun
uncompress
(
bytes
:
ByteArray
):
ByteArray
=
data
Encode
{
GZIPInputStream
(
bytes
.
inputStream
()).
transferTo
(
it
)
}
...
...
mirai-debug/src/main/java/PacketDebuger.kt
View file @
5f0220b9
...
...
@@ -4,8 +4,8 @@ import jpcap.JpcapCaptor
import
jpcap.packet.IPPacket
import
jpcap.packet.UDPPacket
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.packet.
*
import
net.mamoe.mirai.network.protocol.tim.packet.
login.*
import
net.mamoe.mirai.network.protocol.tim.packet.
ServerEventPacket
import
net.mamoe.mirai.network.protocol.tim.packet.
ServerPacket
import
net.mamoe.mirai.utils.*
import
java.io.DataInputStream
...
...
@@ -72,52 +72,21 @@ object Main {
}
}
fun
dataReceived
(
data
:
ByteArray
)
{
if
(!
debugStarted
)
{
return
}
/**
* 从 TIM 内存中读取.
*
* 方法:
* 在 Common.dll 中搜索
*/
const
val
sessionKey
:
String
=
"70 BD 1E 12 20 C1 25 12 A0 F8 4F 0D C0 A0 97 0E"
fun
dataReceived
(
data
:
ByteArray
)
{
packetReceived
(
ServerPacket
.
ofByteArray
(
data
))
}
fun
packetReceived
(
packet
:
ServerPacket
)
{
when
(
packet
)
{
is
ServerTouchResponsePacket
.
Encrypted
->
packetReceived
(
packet
.
decrypt
())
is
ServerTouchResponsePacket
->
{
if
(
packet
.
serverIP
==
null
)
{
loginTime
=
packet
.
loginTime
loginIp
=
packet
.
loginIP
token0825
=
packet
.
token0825
}
//then send 08 36 31 03
}
is
ServerLoginResponseFailedPacket
->
{
println
(
"login failed"
)
}
is
ServerLoginResponseKeyExchangePacket
.
Encrypted
->
packetReceived
(
packet
.
decrypt
(
privateKey
))
is
ServerLoginResponseVerificationCodeInitPacket
.
Encrypted
->
packetReceived
(
packet
.
decrypt
())
is
ServerLoginResponseSuccessPacket
.
Encrypted
->
packetReceived
(
packet
.
decrypt
(
privateKey
))
is
ServerLoginResponseKeyExchangePacket
->
{
privateKey
=
packet
.
privateKey
//then 31 04 or 31 06
}
is
ServerLoginResponseSuccessPacket
->
{
sessionResponseDecryptionKey
=
packet
.
sessionResponseDecryptionKey
}
is
ServerSessionKeyResponsePacket
.
Encrypted
->
packetReceived
(
packet
.
decrypt
(
sessionResponseDecryptionKey
))
is
ServerSessionKeyResponsePacket
->
{
sessionKey
=
packet
.
sessionKey
println
(
"Got sessionKey="
+
sessionKey
.
toUHexString
())
}
is
ServerEventPacket
.
Raw
.
Encrypted
->
{
val
sessionKey
=
"8B 45 10 0F 10 00 66 0F 38 00 05 20 39 18 64 0F"
.
hexToBytes
()
println
(
"! ServerEventPacket.Raw.Encrypted"
)
...
...
@@ -130,37 +99,16 @@ object Main {
}
}
@Volatile
private
var
debugStarted
=
true
private
const
val
qq
:
Int
=
1994701021
private
const
val
password
:
String
=
"xiaoqqq"
lateinit
var
token0825
:
ByteArray
//56
var
loginTime
:
Int
=
0
lateinit
var
loginIp
:
String
lateinit
var
privateKey
:
ByteArray
//16
lateinit
var
sessionKey
:
ByteArray
lateinit
var
sessionResponseDecryptionKey
:
ByteArray
fun
dataSent
(
data
:
ByteArray
)
{
//println("Sent: " + data.toUByteArray().toUHexString())
lazyDecode
(
data
.
cutTail
(
1
))
{
it
.
skip
(
3
)
val
idHex
=
it
.
readNBytes
(
4
).
toUHexString
()
data
.
cutTail
(
1
).
decode
{
base
->
base
.
skip
(
3
)
val
idHex
=
base
.
readNBytes
(
4
).
toUHexString
()
println
(
"发出包$idHex"
)
when
(
idHex
.
substring
(
0
,
5
))
{
"08 25"
->
{
debugStarted
=
true
println
(
"Detected touch, debug start!!"
)
}
"00 CD"
->
{
println
(
"好友消息发出: "
)
val
sessionKey
=
"70 BD 1E 12 20 C1 25 12 A0 F8 4F 0D C0 A0 97 0E"
.
hexToBytes
()
lazyDecode
(
data
)
{
dataDecode
(
data
)
{
//it.readShort()
//println(it.readUInt())
println
(
it
.
readNBytes
(
TIMProtocol
.
fixVer2
.
hexToBytes
().
size
+
1
+
5
-
3
+
1
).
toUHexString
())
...
...
@@ -172,41 +120,6 @@ object Main {
}
}
}
"08 36"
->
{
println
(
data
.
toUHexString
())
println
(
"tim的 passwordSubmissionKey1 = "
+
it
.
readNBytes
(
TIMProtocol
.
passwordSubmissionTLV1
.
hexToBytes
().
size
).
toUHexString
())
//it.skipHex(Protocol.passwordSubmissionKey1)
println
(
it
.
readNBytes
(
2
).
toUHexString
())
println
(
"tim的 publicKey = "
+
it
.
readNBytes
(
TIMProtocol
.
publicKey
.
hexToBytes
().
size
).
toUHexString
())
println
(
it
.
readNBytes
(
2
).
toUHexString
())
println
(
"tim的 key0836="
+
it
.
readLVByteArray
().
toUHexString
())
//it.skipHex(Protocol.key0836)
val
encrypted
=
it
.
readAllBytes
()
println
(
encrypted
.
size
)
println
(
encrypted
.
toUHexString
())
val
tlv0006data
=
lazyDecode
(
encrypted
.
decryptBy
(
TIMProtocol
.
shareKey
))
{
section
->
section
.
skip
(
2
+
2
+
56
+
2
)
section
.
skip
(
section
.
readShort
())
//device name
section
.
skip
(
6
+
4
+
2
+
2
)
//tlv0006, encrypted by pwd md5
section
.
readNBytes
(
160
).
decryptBy
(
lazyEncode
{
md5
(
md5
(
password
)
+
"00 00 00 00"
.
hexToBytes
()
+
qq
.
toUInt
().
toByteArray
())
})
}
lazyDecode
(
tlv0006data
)
{
tlv0006
->
tlv0006
.
skip
(
4
+
2
+
4
)
tlv0006
.
skipHex
(
TIMProtocol
.
constantData2
)
tlv0006
.
skip
(
3
)
tlv0006
.
skip
(
16
+
4
+
1
+
4
*
3
+
4
+
8
+
2
)
tlv0006
.
skipHex
(
"15 74 C4 89 85 7A 19 F5 5E A9 C9 A3 5E 8A 5A 9B"
)
privateKey
=
tlv0006
.
readNBytes
(
16
)
}
println
(
"Got privateKey="
+
privateKey
.
toUHexString
())
//then receive
}
else
->
{
}
}
}
}
...
...
@@ -221,15 +134,6 @@ object Main {
}
}
val
shareKeyFromCS
=
"60 42 3B 51 C3 B1 F6 0F 67 E8 9C 00 F0 A7 BD A3"
fun
main
()
{
val
data
=
"2C 3C 4A 0D 14 D3 C4 8D FA 99 58 02 87 04 47 66 F9 F9 4F DF B8 01 1E C6 2A 52 3E 83 B0 96 4C 1C 3C D0 1C A0 D6 58 3C D0 2B 6B 33 1E 37 0A 6E C3 49 CE 57 B0 70 41 88 C1 3B A3 61 72 5E 3C 65 EC B1 2E EC 25 0E 1B 66 7A C4 28 F7 1D 53 15 56 99 BB 18 90 ED E6 13 97 19 FE 42 DB D1 16 E3 21 77 6E 90 B8 E2 5A 6D C3 AE FF 5C 63 98 AE 42 B0 AB 96 0B 08 D8 DA E0 D3 BD 17 E4 7B 76 1C 16 17 DC"
.
hexToBytes
()
println
(
TEA
.
decrypt
(
data
,
"9A 45 7B D4 54 EF 7C E7 86 F5 20 EF 27 BE CF C1"
.
hexToBytes
()).
toUHexString
())
//succeed
}
/*
00 19
tim的 publicKey = 02 F4 07 37 2D F1 82 1D 45 E8 30 14 41 74 AF E3 03 AB 29 D7 82 D9 E2 E5 89
...
...
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