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
d10b1a9e
Commit
d10b1a9e
authored
Nov 15, 2019
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove HexCache
parent
2e7af713
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
90 additions
and
85 deletions
+90
-85
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/internal/MessageDataInternal.kt
...n/net.mamoe.mirai/message/internal/MessageDataInternal.kt
+1
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/TIMProtocol.kt
...otlin/net.mamoe.mirai/network/protocol/tim/TIMProtocol.kt
+30
-28
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/OutgoingPacket.kt
...mamoe.mirai/network/protocol/tim/packet/OutgoingPacket.kt
+6
-9
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/action/Profile.kt
...mamoe.mirai/network/protocol/tim/packet/action/Profile.kt
+8
-8
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/action/SendFriendMessagePacket.kt
...ork/protocol/tim/packet/action/SendFriendMessagePacket.kt
+1
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/EventPacketFactory.kt
...i/network/protocol/tim/packet/event/EventPacketFactory.kt
+1
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/Captcha.kt
....mamoe.mirai/network/protocol/tim/packet/login/Captcha.kt
+20
-17
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/ChangeOnlineStatusPacket.kt
...ork/protocol/tim/packet/login/ChangeOnlineStatusPacket.kt
+2
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/Heartbeat.kt
...amoe.mirai/network/protocol/tim/packet/login/Heartbeat.kt
+2
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/PasswordSubmission.kt
...i/network/protocol/tim/packet/login/PasswordSubmission.kt
+8
-8
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/SKey.kt
...net.mamoe.mirai/network/protocol/tim/packet/login/SKey.kt
+2
-1
mirai-core/src/commonMain/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/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/Touch.kt
...et.mamoe.mirai/network/protocol/tim/packet/login/Touch.kt
+7
-6
No files found.
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/internal/MessageDataInternal.kt
View file @
d10b1a9e
...
@@ -225,7 +225,7 @@ fun MessageChain.toPacket(): ByteReadPacket = buildPacket {
...
@@ -225,7 +225,7 @@ fun MessageChain.toPacket(): ByteReadPacket = buildPacket {
*/
*/
writeShortLVPacket
{
writeShortLVPacket
{
writeByte
(
0
x02
)
writeByte
(
0
x02
)
//"46 52 25 46 60 30 59 4F 4A 5A 51 48 31 46 4A 53 4C 51 4C 4A 33 46 31 2E 6A 70 67".hexToBytes().
stringOfWitch
()
//"46 52 25 46 60 30 59 4F 4A 5A 51 48 31 46 4A 53 4C 51 4C 4A 33 46 31 2E 6A 70 67".hexToBytes().
encodeToString
()
// writeShortLVString(filename)//图片文件名 FR%F`0YOJZQH1FJSLQLJ3F1.jpg
// writeShortLVString(filename)//图片文件名 FR%F`0YOJZQH1FJSLQLJ3F1.jpg
writeShortLVString
(
id
.
value
.
substring
(
1
..
24
)
+
".gif"
)
// 图片文件名. 后缀不影响. 但无后缀会导致 PC QQ 无法显示这个图片
writeShortLVString
(
id
.
value
.
substring
(
1
..
24
)
+
".gif"
)
// 图片文件名. 后缀不影响. 但无后缀会导致 PC QQ 无法显示这个图片
writeHex
(
"03 00 04 00 00 02 A2 04"
)
writeHex
(
"03 00 04 00 00 02 A2 04"
)
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/TIMProtocol.kt
View file @
d10b1a9e
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
package
net.mamoe.mirai.network.protocol.tim
package
net.mamoe.mirai.network.protocol.tim
import
net.mamoe.mirai.utils.io.hexToBytes
import
net.mamoe.mirai.utils.solveIpAddress
import
net.mamoe.mirai.utils.solveIpAddress
object
TIMProtocol
{
object
TIMProtocol
{
...
@@ -21,20 +22,20 @@ object TIMProtocol {
...
@@ -21,20 +22,20 @@ object TIMProtocol {
list
.
toList
()
list
.
toList
()
}()
//不使用lazy, 在初始化时就加载.
}()
//不使用lazy, 在初始化时就加载.
const
val
head
=
"02"
val
head
=
"02"
.
hexToBytes
()
const
val
ver
=
"37 13"
// TIM 最新版中这个有时候是 38 03
val
ver
=
"37 13"
.
hexToBytes
()
// TIM 最新版中这个有时候是 38 03
const
val
fixVer
=
"03 00 00 00 01 2E 01 00 00 68 52 00 00 00 00"
val
fixVer
=
"03 00 00 00 01 2E 01 00 00 68 52 00 00 00 00"
.
hexToBytes
()
const
val
tail
=
"03"
val
tail
=
"03"
.
hexToBytes
()
/**
/**
* _fixVer
* _fixVer
*/
*/
const
val
fixVer2
=
"02 00 00 00 01 01 01 00 00 68 20"
val
fixVer2
=
"02 00 00 00 01 01 01 00 00 68 20"
.
hexToBytes
()
// 02 38 03 00 CD 48 68 3E 03 3F A2 02 00 00 00
// 02 38 03 00 CD 48 68 3E 03 3F A2 02 00 00 00
const
val
version0x02
=
"02 00 00 00 01 2E 01 00 00 69 35"
val
version0x02
=
"02 00 00 00 01 2E 01 00 00 69 35"
.
hexToBytes
()
const
val
version0x04
=
"04 00 00 00 01 2E 01 00 00 69 35 00 00 00 00 00 00 00 00"
val
version0x04
=
"04 00 00 00 01 2E 01 00 00 69 35 00 00 00 00 00 00 00 00"
.
hexToBytes
()
const
val
constantData1
=
"00 18 00 16 00 01 "
val
constantData1
=
"00 18 00 16 00 01 "
.
hexToBytes
()
const
val
constantData2
=
"00 00 04 53 00 00 00 01 00 00 15 85 "
val
constantData2
=
"00 00 04 53 00 00 00 01 00 00 15 85 "
.
hexToBytes
()
//todo 使用 byte array
//todo 使用 byte array
...
@@ -42,7 +43,7 @@ object TIMProtocol {
...
@@ -42,7 +43,7 @@ object TIMProtocol {
/**
/**
* Touch 发出时写入, 并用于加密, 接受 sendTouch response 时解密.
* Touch 发出时写入, 并用于加密, 接受 sendTouch response 时解密.
*/
*/
const
val
touchKey
=
"A4 F1 91 88 C9 82 14 99 0C 9E 56 55 91 23 C8 3D"
//16
val
touchKey
=
"A4 F1 91 88 C9 82 14 99 0C 9E 56 55 91 23 C8 3D"
.
hexToBytes
()
//16
//统一替换为了 touchKey
//统一替换为了 touchKey
...
@@ -50,37 +51,38 @@ object TIMProtocol {
...
@@ -50,37 +51,38 @@ object TIMProtocol {
// * Redirection 发出时写入, 并用于加密, 接受 Redirection response 时解密.
// * Redirection 发出时写入, 并用于加密, 接受 Redirection response 时解密.
// * 这个 key 似乎是可以任意的.
// * 这个 key 似乎是可以任意的.
// */
// */
//
const
val redirectionKey = "A8 F2 14 5F 58 12 60 AF 07 63 97 D6 76 B2 1A 3B"//16
//val redirectionKey = "A8 F2 14 5F 58 12 60 AF 07 63 97 D6 76 B2 1A 3B"//16
/**
/**
* 并非常量. 设置为常量是为了让 [shareKey] 为常量
* 并非常量. 设置为常量是为了让 [shareKey] 为常量
*/
*/
const
val
publicKey
=
"02 6D 28 41 D2 A5 6F D2 FC 3E 2A 1F 03 75 DE 6E 28 8F A8 19 3E 5F 16 49 D3"
//25
val
publicKey
=
"02 6D 28 41 D2 A5 6F D2 FC 3E 2A 1F 03 75 DE 6E 28 8F A8 19 3E 5F 16 49 D3"
.
hexToBytes
()
//25
/**
/**
* 并非常量. 设置为常量是为了让 [shareKey] 为常量
* 并非常量. 设置为常量是为了让 [shareKey] 为常量
*
*
* LoginResend 和 PasswordSubmission 时写入, 但随后都使用 shareKey 加密, 收到回复也是用的 share key
* LoginResend 和 PasswordSubmission 时写入, 但随后都使用 shareKey 加密, 收到回复也是用的 share key
*/
*/
const
val
key0836
=
"EF 4A 36 6A 16 A8 E6 3D 2E EA BD 1F 98 C1 3C DA"
//16
val
key0836
=
"EF 4A 36 6A 16 A8 E6 3D 2E EA BD 1F 98 C1 3C DA"
.
hexToBytes
()
//16
/**
/**
* 并非常量. 是 publicKey 与 key0836 的算法计算结果
* 并非常量. 是 publicKey 与 key0836 的算法计算结果
*/
*/
//
const
val shareKey = "5B 6C 91 55 D9 92 F5 A7 99 85 37 76 3D 0F 08 B7"//16
//val shareKey = "5B 6C 91 55 D9 92 F5 A7 99 85 37 76 3D 0F 08 B7"//16
const
val
shareKey
=
"1A E9 7F 7D C9 73 75 98 AC 02 E0 80 5F A9 C6 AF"
//16//original
val
shareKey
=
"1A E9 7F 7D C9 73 75 98 AC 02 E0 80 5F A9 C6 AF"
.
hexToBytes
()
//16//original
const
val
key00BA
=
"C1 9C B8 C8 7B 8C 81 BA 9E 9E 7A 89 E1 7A EC 94"
val
key00BA
=
"C1 9C B8 C8 7B 8C 81 BA 9E 9E 7A 89 E1 7A EC 94"
.
hexToBytes
()
const
val
key00BAFix
=
"69 20 D1 14 74 F5 B3 93 E4 D5 02 B3 71 1A CD 2A"
val
key00BAFix
=
"69 20 D1 14 74 F5 B3 93 E4 D5 02 B3 71 1A CD 2A"
.
hexToBytes
()
/**
/**
* 0836_622_fix2
* 0836_622_fix2
*/
*/
const
val
passwordSubmissionTLV2
=
"00 15 00 30 00 01 01 27 9B C7 F5 00 10 65 03 FD 8B 00 00 00 00 00 00 00 00 00 00 00 00 02 90 49 55 33 00 10 15 74 C4 89 85 7A 19 F5 5E A9 C9 A3 5E 8A 5A 9B"
val
passwordSubmissionTLV2
=
"00 15 00 30 00 01 01 27 9B C7 F5 00 10 65 03 FD 8B 00 00 00 00 00 00 00 00 00 00 00 00 02 90 49 55 33 00 10 15 74 C4 89 85 7A 19 F5 5E A9 C9 A3 5E 8A 5A 9B"
.
hexToBytes
()
/**
/**
* 0836_622_fix1
* 0836_622_fix1
*/
*/
const
val
passwordSubmissionTLV1
=
"03 00 00 00 01 01 01 00 00 68 20 00 00 00 00 00 01 01 03"
//19
val
passwordSubmissionTLV1
=
"03 00 00 00 01 01 01 00 00 68 20 00 00 00 00 00 01 01 03"
.
hexToBytes
()
//19
// 最新版 03 00 00 00 01 2E 01 00 00 69 35 00 00 00 00 00 02 01 03
// 最新版 03 00 00 00 01 2E 01 00 00 69 35 00 00 00 00 00 02 01 03
// 第一版 1.0.2 03 00 00 00 01 2E 01 00 00 68 13 00 00 00 00 00 02 01 03
// 第一版 1.0.2 03 00 00 00 01 2E 01 00 00 68 13 00 00 00 00 00 02 01 03
// 1.0.4 03 00 00 00 01 2E 01 00 00 68 27 00 00 00 00 00 02 01 03
// 1.0.4 03 00 00 00 01 2E 01 00 00 68 27 00 00 00 00 00 02 01 03
...
@@ -91,7 +93,7 @@ object TIMProtocol {
...
@@ -91,7 +93,7 @@ object TIMProtocol {
* 发送/接受消息中的一个const (?)
* 发送/接受消息中的一个const (?)
* length=15
* length=15
*/
*/
const
val
messageConst1
=
"00 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91"
val
messageConst1
=
"00 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91"
.
hexToBytes
()
const
val
messageConstNewest
=
"22 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91"
val
messageConstNewest
=
"22 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91"
.
hexToBytes
()
// TIM最新 22 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91
// TIM最新 22 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91
}
}
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/OutgoingPacket.kt
View file @
d10b1a9e
...
@@ -2,14 +2,10 @@
...
@@ -2,14 +2,10 @@
package
net.mamoe.mirai.network.protocol.tim.packet
package
net.mamoe.mirai.network.protocol.tim.packet
import
kotlinx.io.core.BytePacketBuilder
import
kotlinx.io.core.*
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.use
import
kotlinx.io.core.writeUShort
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.utils.io.encryptAndWrite
import
net.mamoe.mirai.utils.io.encryptAndWrite
import
net.mamoe.mirai.utils.io.writeHex
import
net.mamoe.mirai.utils.io.writeQQ
import
net.mamoe.mirai.utils.io.writeQQ
import
kotlin.jvm.JvmOverloads
import
kotlin.jvm.JvmOverloads
...
@@ -55,12 +51,12 @@ fun PacketFactory<*, *>.buildOutgoingPacket(
...
@@ -55,12 +51,12 @@ fun PacketFactory<*, *>.buildOutgoingPacket(
):
OutgoingPacket
{
):
OutgoingPacket
{
BytePacketBuilder
(
headerSizeHint
).
use
{
BytePacketBuilder
(
headerSizeHint
).
use
{
with
(
it
)
{
with
(
it
)
{
write
Hex
(
TIMProtocol
.
head
)
write
Fully
(
TIMProtocol
.
head
)
write
Hex
(
TIMProtocol
.
ver
)
write
Fully
(
TIMProtocol
.
ver
)
writeUShort
(
id
.
value
)
writeUShort
(
id
.
value
)
writeUShort
(
sequenceId
)
writeUShort
(
sequenceId
)
block
(
this
)
block
(
this
)
write
Hex
(
TIMProtocol
.
tail
)
write
Fully
(
TIMProtocol
.
tail
)
}
}
return
OutgoingPacket
(
name
,
id
,
sequenceId
,
it
.
build
())
return
OutgoingPacket
(
name
,
id
,
sequenceId
,
it
.
build
())
}
}
...
@@ -80,10 +76,11 @@ fun PacketFactory<*, *>.buildSessionPacket(
...
@@ -80,10 +76,11 @@ fun PacketFactory<*, *>.buildSessionPacket(
id
:
PacketId
=
this
.
id
,
id
:
PacketId
=
this
.
id
,
sequenceId
:
UShort
=
PacketFactory
.
atomicNextSequenceId
(),
sequenceId
:
UShort
=
PacketFactory
.
atomicNextSequenceId
(),
headerSizeHint
:
Int
=
0
,
headerSizeHint
:
Int
=
0
,
version
:
ByteArray
=
TIMProtocol
.
version0x02
,
block
:
BytePacketBuilder
.()
->
Unit
block
:
BytePacketBuilder
.()
->
Unit
):
OutgoingPacket
=
buildOutgoingPacket
(
name
,
id
,
sequenceId
,
headerSizeHint
)
{
):
OutgoingPacket
=
buildOutgoingPacket
(
name
,
id
,
sequenceId
,
headerSizeHint
)
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
version0x02
)
write
Fully
(
version
)
encryptAndWrite
(
sessionKey
)
{
encryptAndWrite
(
sessionKey
)
{
block
()
block
()
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/action/Profile.kt
View file @
d10b1a9e
...
@@ -62,9 +62,9 @@ object RequestProfileDetailsPacket : SessionPacketFactory<RequestProfileDetailsR
...
@@ -62,9 +62,9 @@ object RequestProfileDetailsPacket : SessionPacketFactory<RequestProfileDetailsR
val
map
=
readTLVMap
(
tagSize
=
2
,
expectingEOF
=
true
)
val
map
=
readTLVMap
(
tagSize
=
2
,
expectingEOF
=
true
)
val
profile
=
Profile
(
val
profile
=
Profile
(
qq
=
qq
,
qq
=
qq
,
nickname
=
map
[
0
x4E22u
]
?.
stringOfWitch
()
?:
""
,
//error("Cannot determine nickname")
nickname
=
map
[
0
x4E22u
]
?.
encodeToString
()
?:
""
,
//error("Cannot determine nickname")
zipCode
=
map
[
0
x4E25u
]
?.
stringOfWitch
(),
zipCode
=
map
[
0
x4E25u
]
?.
encodeToString
(),
phone
=
map
[
0
x4E27u
]
?.
stringOfWitch
(),
phone
=
map
[
0
x4E27u
]
?.
encodeToString
(),
gender
=
when
(
map
[
0
x4E29u
]
?.
let
{
it
[
0
]
}
?.
toUInt
())
{
gender
=
when
(
map
[
0
x4E29u
]
?.
let
{
it
[
0
]
}
?.
toUInt
())
{
null
->
Gender
.
SECRET
//error("Cannot determine gender, entry 0x4E29u not found")
null
->
Gender
.
SECRET
//error("Cannot determine gender, entry 0x4E29u not found")
0
x02u
->
Gender
.
FEMALE
0
x02u
->
Gender
.
FEMALE
...
@@ -73,11 +73,11 @@ object RequestProfileDetailsPacket : SessionPacketFactory<RequestProfileDetailsR
...
@@ -73,11 +73,11 @@ object RequestProfileDetailsPacket : SessionPacketFactory<RequestProfileDetailsR
//else -> error("Cannot determine gender, bad value of 0x4E29u: ${map[0x4729u]!![0].toUHexString()}")
//else -> error("Cannot determine gender, bad value of 0x4E29u: ${map[0x4729u]!![0].toUHexString()}")
},
},
birthday
=
map
[
0
x4E3Fu
]
?.
let
{
Date
(
it
.
toUInt
().
toInt
())
},
birthday
=
map
[
0
x4E3Fu
]
?.
let
{
Date
(
it
.
toUInt
().
toInt
())
},
personalStatus
=
map
[
0
x4E33u
]
?.
stringOfWitch
(),
personalStatus
=
map
[
0
x4E33u
]
?.
encodeToString
(),
homepage
=
map
[
0
x4E2Du
]
?.
stringOfWitch
(),
homepage
=
map
[
0
x4E2Du
]
?.
encodeToString
(),
company
=
map
[
0
x5DC8u
]
?.
stringOfWitch
(),
company
=
map
[
0
x5DC8u
]
?.
encodeToString
(),
school
=
map
[
0
x4E35u
]
?.
stringOfWitch
(),
school
=
map
[
0
x4E35u
]
?.
encodeToString
(),
email
=
map
[
0
x4E2Bu
]
?.
stringOfWitch
()
email
=
map
[
0
x4E2Bu
]
?.
encodeToString
()
)
)
map
.
clear
()
map
.
clear
()
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/action/SendFriendMessagePacket.kt
View file @
d10b1a9e
...
@@ -49,7 +49,7 @@ object SendFriendMessagePacket : SessionPacketFactory<SendFriendMessagePacket.Re
...
@@ -49,7 +49,7 @@ object SendFriendMessagePacket : SessionPacketFactory<SendFriendMessagePacket.Re
writeTime
()
writeTime
()
writeRandom
(
4
)
writeRandom
(
4
)
writeHex
(
"00 00 00 00 0C 00 86"
)
writeHex
(
"00 00 00 00 0C 00 86"
)
write
Hex
(
TIMProtocol
.
messageConstNewest
)
write
Fully
(
TIMProtocol
.
messageConstNewest
)
writeZero
(
2
)
writeZero
(
2
)
writePacket
(
message
.
toPacket
())
writePacket
(
message
.
toPacket
())
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/EventPacketFactory.kt
View file @
d10b1a9e
...
@@ -11,7 +11,6 @@ import net.mamoe.mirai.network.sessionKey
...
@@ -11,7 +11,6 @@ import net.mamoe.mirai.network.sessionKey
import
net.mamoe.mirai.qqAccount
import
net.mamoe.mirai.qqAccount
import
net.mamoe.mirai.utils.io.encryptAndWrite
import
net.mamoe.mirai.utils.io.encryptAndWrite
import
net.mamoe.mirai.utils.io.readIoBuffer
import
net.mamoe.mirai.utils.io.readIoBuffer
import
net.mamoe.mirai.utils.io.writeHex
import
net.mamoe.mirai.utils.io.writeQQ
import
net.mamoe.mirai.utils.io.writeQQ
/**
/**
...
@@ -77,7 +76,7 @@ object EventPacketFactory : PacketFactory<Packet, SessionKey>(SessionKey) {
...
@@ -77,7 +76,7 @@ object EventPacketFactory : PacketFactory<Packet, SessionKey>(SessionKey) {
identity
:
EventPacketIdentity
identity
:
EventPacketIdentity
):
OutgoingPacket
=
buildOutgoingPacket
(
name
=
"EventPacket"
,
id
=
id
,
sequenceId
=
sequenceId
)
{
):
OutgoingPacket
=
buildOutgoingPacket
(
name
=
"EventPacket"
,
id
=
id
,
sequenceId
=
sequenceId
)
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
fixVer2
)
write
Fully
(
TIMProtocol
.
fixVer2
)
encryptAndWrite
(
sessionKey
)
{
encryptAndWrite
(
sessionKey
)
{
writeEventPacketIdentity
(
identity
)
writeEventPacketIdentity
(
identity
)
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/Captcha.kt
View file @
d10b1a9e
...
@@ -6,10 +6,13 @@ import kotlinx.io.core.*
...
@@ -6,10 +6,13 @@ import kotlinx.io.core.*
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.utils.io.*
import
net.mamoe.mirai.utils.io.encryptAndWrite
import
net.mamoe.mirai.utils.io.readIoBuffer
import
net.mamoe.mirai.utils.io.writeHex
import
net.mamoe.mirai.utils.io.writeQQ
object
CaptchaKey
:
DecrypterByteArray
,
DecrypterType
<
CaptchaKey
>
{
object
CaptchaKey
:
DecrypterByteArray
,
DecrypterType
<
CaptchaKey
>
{
override
val
value
:
ByteArray
=
TIMProtocol
.
key00BA
.
hexToBytes
(
withCache
=
false
)
override
val
value
:
ByteArray
=
TIMProtocol
.
key00BA
}
}
@AnnotatedId
(
KnownPacketId
.
CAPTCHA
)
@AnnotatedId
(
KnownPacketId
.
CAPTCHA
)
...
@@ -24,21 +27,21 @@ object CaptchaPacket : PacketFactory<CaptchaPacket.CaptchaResponse, CaptchaKey>(
...
@@ -24,21 +27,21 @@ object CaptchaPacket : PacketFactory<CaptchaPacket.CaptchaResponse, CaptchaKey>(
token00BA
:
ByteArray
token00BA
:
ByteArray
):
OutgoingPacket
=
buildOutgoingPacket
{
):
OutgoingPacket
=
buildOutgoingPacket
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
fixVer
)
write
Fully
(
TIMProtocol
.
fixVer
)
write
Hex
(
TIMProtocol
.
key00BA
)
write
Fully
(
TIMProtocol
.
key00BA
)
encryptAndWrite
(
TIMProtocol
.
key00BA
)
{
encryptAndWrite
(
TIMProtocol
.
key00BA
)
{
writeHex
(
"00 02 00 00 08 04 01 E0"
)
writeHex
(
"00 02 00 00 08 04 01 E0"
)
write
Hex
(
TIMProtocol
.
constantData2
)
write
Fully
(
TIMProtocol
.
constantData2
)
writeHex
(
"00 00 38"
)
writeHex
(
"00 00 38"
)
writeFully
(
token0825
)
writeFully
(
token0825
)
writeHex
(
"01 03 00 19"
)
writeHex
(
"01 03 00 19"
)
write
Hex
(
TIMProtocol
.
publicKey
)
write
Fully
(
TIMProtocol
.
publicKey
)
writeHex
(
"13 00 05 00 00 00 00"
)
writeHex
(
"13 00 05 00 00 00 00"
)
writeUByte
(
captchaSequence
.
toUByte
())
writeUByte
(
captchaSequence
.
toUByte
())
writeHex
(
"00 28"
)
writeHex
(
"00 28"
)
writeFully
(
token00BA
)
writeFully
(
token00BA
)
writeHex
(
"00 10"
)
writeHex
(
"00 10"
)
write
Hex
(
TIMProtocol
.
key00BAFix
)
write
Fully
(
TIMProtocol
.
key00BAFix
)
}
}
}
}
...
@@ -50,17 +53,17 @@ object CaptchaPacket : PacketFactory<CaptchaPacket.CaptchaResponse, CaptchaKey>(
...
@@ -50,17 +53,17 @@ object CaptchaPacket : PacketFactory<CaptchaPacket.CaptchaResponse, CaptchaKey>(
token0825
:
ByteArray
token0825
:
ByteArray
):
OutgoingPacket
=
buildOutgoingPacket
{
):
OutgoingPacket
=
buildOutgoingPacket
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
fixVer
)
write
Fully
(
TIMProtocol
.
fixVer
)
write
Hex
(
TIMProtocol
.
key00BA
)
write
Fully
(
TIMProtocol
.
key00BA
)
encryptAndWrite
(
TIMProtocol
.
key00BA
)
{
encryptAndWrite
(
TIMProtocol
.
key00BA
)
{
writeHex
(
"00 02 00 00 08 04 01 E0"
)
writeHex
(
"00 02 00 00 08 04 01 E0"
)
write
Hex
(
TIMProtocol
.
constantData2
)
write
Fully
(
TIMProtocol
.
constantData2
)
writeHex
(
"00 00 38"
)
writeHex
(
"00 00 38"
)
writeFully
(
token0825
)
writeFully
(
token0825
)
writeHex
(
"01 03 00 19"
)
writeHex
(
"01 03 00 19"
)
write
Hex
(
TIMProtocol
.
publicKey
)
write
Fully
(
TIMProtocol
.
publicKey
)
writeHex
(
"13 00 05 00 00 00 00 00 00 00 00 10"
)
writeHex
(
"13 00 05 00 00 00 00 00 00 00 00 10"
)
write
Hex
(
TIMProtocol
.
key00BAFix
)
write
Fully
(
TIMProtocol
.
key00BAFix
)
}
}
}
}
...
@@ -75,17 +78,17 @@ object CaptchaPacket : PacketFactory<CaptchaPacket.CaptchaResponse, CaptchaKey>(
...
@@ -75,17 +78,17 @@ object CaptchaPacket : PacketFactory<CaptchaPacket.CaptchaResponse, CaptchaKey>(
):
OutgoingPacket
=
buildOutgoingPacket
{
):
OutgoingPacket
=
buildOutgoingPacket
{
require
(
captcha
.
length
==
4
)
{
"captcha.length must == 4"
}
require
(
captcha
.
length
==
4
)
{
"captcha.length must == 4"
}
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
fixVer
)
write
Fully
(
TIMProtocol
.
fixVer
)
write
Hex
(
TIMProtocol
.
key00BA
)
write
Fully
(
TIMProtocol
.
key00BA
)
encryptAndWrite
(
TIMProtocol
.
key00BA
)
{
encryptAndWrite
(
TIMProtocol
.
key00BA
)
{
writeHex
(
"00 02 00 00 08 04 01 E0"
)
writeHex
(
"00 02 00 00 08 04 01 E0"
)
write
Hex
(
TIMProtocol
.
constantData2
)
write
Fully
(
TIMProtocol
.
constantData2
)
writeHex
(
"01 00 38"
)
writeHex
(
"01 00 38"
)
writeFully
(
token0825
)
writeFully
(
token0825
)
writeHex
(
"01 03"
)
writeHex
(
"01 03"
)
writeShort
(
25
)
writeShort
(
25
)
write
Hex
(
TIMProtocol
.
publicKey
)
//25
write
Fully
(
TIMProtocol
.
publicKey
)
//25
writeHex
(
"14 00 05 00 00 00 00 00 04"
)
writeHex
(
"14 00 05 00 00 00 00 00 04"
)
writeStringUtf8
(
captcha
.
toUpperCase
())
writeStringUtf8
(
captcha
.
toUpperCase
())
...
@@ -93,7 +96,7 @@ object CaptchaPacket : PacketFactory<CaptchaPacket.CaptchaResponse, CaptchaKey>(
...
@@ -93,7 +96,7 @@ object CaptchaPacket : PacketFactory<CaptchaPacket.CaptchaResponse, CaptchaKey>(
writeFully
(
captchaToken
)
writeFully
(
captchaToken
)
writeShort
(
16
)
writeShort
(
16
)
write
Hex
(
TIMProtocol
.
key00BAFix
)
//16
write
Fully
(
TIMProtocol
.
key00BAFix
)
//16
}
}
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/ChangeOnlineStatusPacket.kt
View file @
d10b1a9e
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
package
net.mamoe.mirai.network.protocol.tim.packet.login
package
net.mamoe.mirai.network.protocol.tim.packet.login
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.writeFully
import
kotlinx.io.core.writeUByte
import
kotlinx.io.core.writeUByte
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
...
@@ -23,7 +24,7 @@ object ChangeOnlineStatusPacket : PacketFactory<ChangeOnlineStatusPacket.ChangeO
...
@@ -23,7 +24,7 @@ object ChangeOnlineStatusPacket : PacketFactory<ChangeOnlineStatusPacket.ChangeO
loginStatus
:
OnlineStatus
loginStatus
:
OnlineStatus
):
OutgoingPacket
=
buildOutgoingPacket
{
):
OutgoingPacket
=
buildOutgoingPacket
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
fixVer2
)
write
Fully
(
TIMProtocol
.
fixVer2
)
encryptAndWrite
(
sessionKey
)
{
encryptAndWrite
(
sessionKey
)
{
writeHex
(
"01 00"
)
writeHex
(
"01 00"
)
writeUByte
(
loginStatus
.
id
)
writeUByte
(
loginStatus
.
id
)
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/Heartbeat.kt
View file @
d10b1a9e
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
package
net.mamoe.mirai.network.protocol.tim.packet.login
package
net.mamoe.mirai.network.protocol.tim.packet.login
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.writeFully
import
net.mamoe.mirai.event.Subscribable
import
net.mamoe.mirai.event.Subscribable
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
...
@@ -19,7 +20,7 @@ object HeartbeatPacket : SessionPacketFactory<HeartbeatPacketResponse>() {
...
@@ -19,7 +20,7 @@ object HeartbeatPacket : SessionPacketFactory<HeartbeatPacketResponse>() {
sessionKey
:
SessionKey
sessionKey
:
SessionKey
):
OutgoingPacket
=
buildOutgoingPacket
{
):
OutgoingPacket
=
buildOutgoingPacket
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
fixVer
)
write
Fully
(
TIMProtocol
.
fixVer
)
encryptAndWrite
(
sessionKey
)
{
encryptAndWrite
(
sessionKey
)
{
writeHex
(
"00 01 00 01"
)
writeHex
(
"00 01 00 01"
)
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/PasswordSubmission.kt
View file @
d10b1a9e
...
@@ -14,7 +14,7 @@ import net.mamoe.mirai.utils.io.*
...
@@ -14,7 +14,7 @@ import net.mamoe.mirai.utils.io.*
import
net.mamoe.mirai.utils.writeCRC32
import
net.mamoe.mirai.utils.writeCRC32
object
ShareKey
:
DecrypterByteArray
,
DecrypterType
<
ShareKey
>
{
object
ShareKey
:
DecrypterByteArray
,
DecrypterType
<
ShareKey
>
{
override
val
value
:
ByteArray
=
TIMProtocol
.
shareKey
.
hexToBytes
(
withCache
=
false
)
override
val
value
:
ByteArray
=
TIMProtocol
.
shareKey
}
}
inline
class
PrivateKey
(
override
val
value
:
ByteArray
)
:
DecrypterByteArray
{
inline
class
PrivateKey
(
override
val
value
:
ByteArray
)
:
DecrypterByteArray
{
...
@@ -58,10 +58,10 @@ object SubmitPasswordPacket : PacketFactory<SubmitPasswordPacket.LoginResponse,
...
@@ -58,10 +58,10 @@ object SubmitPasswordPacket : PacketFactory<SubmitPasswordPacket.LoginResponse,
tlv0006
:
IoBuffer
?
=
null
tlv0006
:
IoBuffer
?
=
null
):
OutgoingPacket
=
buildOutgoingPacket
{
):
OutgoingPacket
=
buildOutgoingPacket
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
passwordSubmissionTLV1
)
write
Fully
(
TIMProtocol
.
passwordSubmissionTLV1
)
writeShort
(
25
);
write
Hex
(
TIMProtocol
.
publicKey
)
//=25
writeShort
(
25
);
write
Fully
(
TIMProtocol
.
publicKey
)
//=25
writeZero
(
2
)
writeZero
(
2
)
writeShort
(
16
);
write
Hex
(
TIMProtocol
.
key0836
)
//=16
writeShort
(
16
);
write
Fully
(
TIMProtocol
.
key0836
)
//=16
// shareKey 极大可能为 publicKey, key0836 计算得到
// shareKey 极大可能为 publicKey, key0836 计算得到
encryptAndWrite
(
TIMProtocol
.
shareKey
)
{
encryptAndWrite
(
TIMProtocol
.
shareKey
)
{
...
@@ -286,12 +286,12 @@ private fun BytePacketBuilder.writePart1(
...
@@ -286,12 +286,12 @@ private fun BytePacketBuilder.writePart1(
this
.
writeTLV0006
(
qq
,
password
,
loginTime
,
loginIP
,
privateKey
)
this
.
writeTLV0006
(
qq
,
password
,
loginTime
,
loginIP
,
privateKey
)
}
}
//fix
//fix
this
.
write
Hex
(
TIMProtocol
.
passwordSubmissionTLV2
)
this
.
write
Fully
(
TIMProtocol
.
passwordSubmissionTLV2
)
this
.
writeHex
(
"00 1A"
)
//tag
this
.
writeHex
(
"00 1A"
)
//tag
this
.
writeHex
(
"00 40"
)
//length
this
.
writeHex
(
"00 40"
)
//length
this
.
writeFully
(
TIMProtocol
.
passwordSubmissionTLV2
.
hexToBytes
().
encryptBy
(
privateKey
))
this
.
writeFully
(
TIMProtocol
.
passwordSubmissionTLV2
.
encryptBy
(
privateKey
))
this
.
write
Hex
(
TIMProtocol
.
constantData1
)
this
.
write
Fully
(
TIMProtocol
.
constantData1
)
this
.
write
Hex
(
TIMProtocol
.
constantData2
)
this
.
write
Fully
(
TIMProtocol
.
constantData2
)
this
.
writeQQ
(
qq
)
this
.
writeQQ
(
qq
)
this
.
writeZero
(
4
)
this
.
writeZero
(
4
)
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/SKey.kt
View file @
d10b1a9e
...
@@ -4,6 +4,7 @@ package net.mamoe.mirai.network.protocol.tim.packet.login
...
@@ -4,6 +4,7 @@ package net.mamoe.mirai.network.protocol.tim.packet.login
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.writeFully
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotSession
import
net.mamoe.mirai.network.BotSession
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
...
@@ -24,7 +25,7 @@ object RequestSKeyPacket : SessionPacketFactory<SKey>() {
...
@@ -24,7 +25,7 @@ object RequestSKeyPacket : SessionPacketFactory<SKey>() {
sessionKey
:
SessionKey
sessionKey
:
SessionKey
):
OutgoingPacket
=
buildOutgoingPacket
{
):
OutgoingPacket
=
buildOutgoingPacket
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
fixVer2
)
write
Fully
(
TIMProtocol
.
fixVer2
)
encryptAndWrite
(
sessionKey
)
{
encryptAndWrite
(
sessionKey
)
{
writeHex
(
"33 00 05 00 08 74 2E 71 71 2E 63 6F 6D 00 0A 71 75 6E 2E 71 71 2E 63 6F 6D 00 0C 71 7A 6F 6E 65 2E 71 71 2E 63 6F 6D 00 0C 6A 75 62 61 6F 2E 71 71 2E 63 6F 6D 00 09 6B 65 2E 71 71 2E 63 6F 6D"
)
writeHex
(
"33 00 05 00 08 74 2E 71 71 2E 63 6F 6D 00 0A 71 75 6E 2E 71 71 2E 63 6F 6D 00 0C 71 7A 6F 6E 65 2E 71 71 2E 63 6F 6D 00 0C 6A 75 62 61 6F 2E 71 71 2E 63 6F 6D 00 09 6B 65 2E 71 71 2E 63 6F 6D"
)
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/Session.kt
View file @
d10b1a9e
...
@@ -31,8 +31,8 @@ object RequestSessionPacket : PacketFactory<RequestSessionPacket.SessionKeyRespo
...
@@ -31,8 +31,8 @@ object RequestSessionPacket : PacketFactory<RequestSessionPacket.SessionKeyRespo
writeHex
(
"01 92 A5 D2 59 00 10 54 2D CF 9B 60 BF BB EC 0D D4 81 CE 36 87 DE 35 02 AE 6D ED DC 00 10 "
)
writeHex
(
"01 92 A5 D2 59 00 10 54 2D CF 9B 60 BF BB EC 0D D4 81 CE 36 87 DE 35 02 AE 6D ED DC 00 10 "
)
writeHex
(
"06 A9 12 97 B7 F8 76 25 AF AF D3 EA B4 C8 BC E7"
)
//fix0836
writeHex
(
"06 A9 12 97 B7 F8 76 25 AF AF D3 EA B4 C8 BC E7"
)
//fix0836
writeHex
(
"00 36 00 12 00 02 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00"
)
writeHex
(
"00 36 00 12 00 02 00 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00"
)
write
Hex
(
TIMProtocol
.
constantData1
)
write
Fully
(
TIMProtocol
.
constantData1
)
write
Hex
(
TIMProtocol
.
constantData2
)
write
Fully
(
TIMProtocol
.
constantData2
)
writeQQ
(
bot
)
writeQQ
(
bot
)
writeHex
(
"00 00 00 00 00 1F 00 22 00 01"
)
writeHex
(
"00 00 00 00 00 1F 00 22 00 01"
)
writeHex
(
"1A 68 73 66 E4 BA 79 92 CC C2 D4 EC 14 7C 8B AF 43 B0 62 FB 65 58 A9 EB 37 55 1D 26 13 A8 E5 3D"
)
//device ID
writeHex
(
"1A 68 73 66 E4 BA 79 92 CC C2 D4 EC 14 7C 8B AF 43 B0 62 FB 65 58 A9 EB 37 55 1D 26 13 A8 E5 3D"
)
//device ID
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/login/Touch.kt
View file @
d10b1a9e
...
@@ -5,13 +5,14 @@ package net.mamoe.mirai.network.protocol.tim.packet.login
...
@@ -5,13 +5,14 @@ package net.mamoe.mirai.network.protocol.tim.packet.login
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.readBytes
import
kotlinx.io.core.readBytes
import
kotlinx.io.core.writeFully
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.utils.io.*
import
net.mamoe.mirai.utils.io.*
object
TouchKey
:
DecrypterByteArray
,
DecrypterType
<
TouchKey
>
{
object
TouchKey
:
DecrypterByteArray
,
DecrypterType
<
TouchKey
>
{
override
val
value
:
ByteArray
=
TIMProtocol
.
touchKey
.
hexToBytes
(
withCache
=
false
)
override
val
value
:
ByteArray
=
TIMProtocol
.
touchKey
}
}
/**
/**
...
@@ -27,12 +28,12 @@ object TouchPacket : PacketFactory<TouchPacket.TouchResponse, TouchKey>(TouchKey
...
@@ -27,12 +28,12 @@ object TouchPacket : PacketFactory<TouchPacket.TouchResponse, TouchKey>(TouchKey
isRedirect
:
Boolean
isRedirect
:
Boolean
):
OutgoingPacket
=
buildOutgoingPacket
{
):
OutgoingPacket
=
buildOutgoingPacket
{
writeQQ
(
bot
)
writeQQ
(
bot
)
write
Hex
(
TIMProtocol
.
fixVer
)
write
Fully
(
TIMProtocol
.
fixVer
)
write
Hex
(
TIMProtocol
.
touchKey
)
write
Fully
(
TIMProtocol
.
touchKey
)
encryptAndWrite
(
TIMProtocol
.
touchKey
)
{
encryptAndWrite
(
TIMProtocol
.
touchKey
)
{
write
Hex
(
TIMProtocol
.
constantData1
)
write
Fully
(
TIMProtocol
.
constantData1
)
write
Hex
(
TIMProtocol
.
constantData2
)
write
Fully
(
TIMProtocol
.
constantData2
)
writeQQ
(
bot
)
writeQQ
(
bot
)
writeHex
(
if
(
isRedirect
)
"00 01 00 00 03 09 00 0C 00 01"
else
"00 00 00 00 03 09 00 08 00 01"
)
writeHex
(
if
(
isRedirect
)
"00 01 00 00 03 09 00 0C 00 01"
else
"00 00 00 00 03 09 00 08 00 01"
)
writeIP
(
serverIp
)
writeIP
(
serverIp
)
...
@@ -40,7 +41,7 @@ object TouchPacket : PacketFactory<TouchPacket.TouchResponse, TouchKey>(TouchKey
...
@@ -40,7 +41,7 @@ object TouchPacket : PacketFactory<TouchPacket.TouchResponse, TouchKey>(TouchKey
if
(
isRedirect
)
"01 6F A1 58 22 01 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14 00 1D 01 03 00 19"
if
(
isRedirect
)
"01 6F A1 58 22 01 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14 00 1D 01 03 00 19"
else
"00 02 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14 00 1D 01 02 00 19"
else
"00 02 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14 00 1D 01 02 00 19"
)
)
write
Hex
(
TIMProtocol
.
publicKey
)
write
Fully
(
TIMProtocol
.
publicKey
)
}
}
}
}
...
...
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