mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-10 02:20:14 +08:00
Testing tools
This commit is contained in:
parent
5425ea77cc
commit
e131774956
@ -60,12 +60,15 @@ internal val t108 = "BD 12 96 6C 83 53 EF DD 06 16 52 16 B8 1B 25 69".hexToBytes
|
|||||||
internal val t10c = "23 7D 2C 7A 3F 4A 41 35 7D 3B 45 51 6D 3D 2A 56".hexToBytes()
|
internal val t10c = "23 7D 2C 7A 3F 4A 41 35 7D 3B 45 51 6D 3D 2A 56".hexToBytes()
|
||||||
internal val t163 = "2C 7A 7B 23 4E 24 3F 24 24 47 62 6B 69 2E 47 50".hexToBytes()
|
internal val t163 = "2C 7A 7B 23 4E 24 3F 24 24 47 62 6B 69 2E 47 50".hexToBytes()
|
||||||
|
|
||||||
internal val shareKeyCalculatedByConstPubKey = ECDH.calculateShareKey(
|
|
||||||
loadPrivateKey("97a52992cb7a2110413629af94a3c249c68a3b731510caa8"),
|
var ecdhPrivateKeyS = "97a52992cb7a2110413629af94a3c249c68a3b731510caa8"
|
||||||
|
|
||||||
|
internal val shareKeyCalculatedByConstPubKey
|
||||||
|
get() = ECDH.calculateShareKey(
|
||||||
|
loadPrivateKey(ecdhPrivateKeyS),
|
||||||
initialPublicKey
|
initialPublicKey
|
||||||
)
|
)
|
||||||
|
|
||||||
var ecdhPrivateKeyS = "97a52992cb7a2110413629af94a3c249c68a3b731510caa8"
|
|
||||||
var passwordMd5: ByteArray = byteArrayOf()
|
var passwordMd5: ByteArray = byteArrayOf()
|
||||||
var uin: Long = 0L
|
var uin: Long = 0L
|
||||||
|
|
||||||
@ -105,8 +108,6 @@ fun ByteReadPacket.decodeMultiClientToServerPackets() {
|
|||||||
println()
|
println()
|
||||||
}
|
}
|
||||||
|
|
||||||
val firstShareKey = ECDH.calculateShareKey(loadPrivateKey(ecdhPrivateKeyS), initialPublicKey)
|
|
||||||
|
|
||||||
fun ByteReadPacket.analysisOneFullPacket(): ByteReadPacket = debugIfFail("Failed", { buildPacket { writeInt(it.size + 4); writeFully(it) } }) {
|
fun ByteReadPacket.analysisOneFullPacket(): ByteReadPacket = debugIfFail("Failed", { buildPacket { writeInt(it.size + 4); writeFully(it) } }) {
|
||||||
val flag1 = readInt()
|
val flag1 = readInt()
|
||||||
println("flag1=" + flag1.contentToString())
|
println("flag1=" + flag1.contentToString())
|
||||||
@ -119,13 +120,13 @@ fun ByteReadPacket.analysisOneFullPacket(): ByteReadPacket = debugIfFail("Failed
|
|||||||
println("extra data=" + readBytes(readInt() - 4).toUHexString())
|
println("extra data=" + readBytes(readInt() - 4).toUHexString())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (flag2 == 1) {
|
//if (flag2 == 1) {
|
||||||
val loginExtraData = readBytes(readInt() - 4)
|
val loginExtraData = readBytes(readInt() - 4)
|
||||||
loginExtraData.debugPrint("loginExtraData")
|
loginExtraData.debugPrint("loginExtraData")
|
||||||
} else {
|
// } else {
|
||||||
this.debugPrint()
|
// this.debugPrint()
|
||||||
error("未知 flag2")
|
// error("未知 flag2")
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
println("flag3=" + readByte().toUHexString())
|
println("flag3=" + readByte().toUHexString())
|
||||||
@ -159,9 +160,12 @@ fun ByteReadPacket.analysisOneFullPacket(): ByteReadPacket = debugIfFail("Failed
|
|||||||
*/
|
*/
|
||||||
discardExact(3)
|
discardExact(3)
|
||||||
readShort().toInt().takeIf { it != 8001 }?.let {
|
readShort().toInt().takeIf { it != 8001 }?.let {
|
||||||
|
println("这个包不是 oicqRequest")
|
||||||
|
return@debugIfFail this
|
||||||
println(" got new protocolVersion=$it")
|
println(" got new protocolVersion=$it")
|
||||||
}
|
}
|
||||||
println(" commandId=${readUShort()}")
|
val commandId = readUShort().toInt()
|
||||||
|
println(" commandId=${commandId}")
|
||||||
readUShort().toInt().takeIf { it != 1 }?.let {
|
readUShort().toInt().takeIf { it != 1 }?.let {
|
||||||
println(" got new const0=$it")
|
println(" got new const0=$it")
|
||||||
}
|
}
|
||||||
@ -221,16 +225,26 @@ fun ByteReadPacket.analysisOneFullPacket(): ByteReadPacket = debugIfFail("Failed
|
|||||||
firstDecrypted.decryptBy(encrypt).also { println("second by calculatedShareKey") }
|
firstDecrypted.decryptBy(encrypt).also { println("second by calculatedShareKey") }
|
||||||
}.getOrElse {
|
}.getOrElse {
|
||||||
kotlin.runCatching {
|
kotlin.runCatching {
|
||||||
firstDecrypted.decryptBy(firstShareKey)
|
firstDecrypted.decryptBy(shareKeyCalculatedByConstPubKey)
|
||||||
}.getOrDefault(firstDecrypted)
|
}.getOrDefault(firstDecrypted)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
decrypted.debugPrint("Real body").apply {
|
decrypted.debugPrint("Real body").toReadPacket().apply {
|
||||||
|
if (commandId == 0x0810) {
|
||||||
|
DebugLogger.info("发送 login!! 正在获取 tgtgtKey")
|
||||||
|
try {
|
||||||
discardExact(4)
|
discardExact(4)
|
||||||
readTLVMap()[0x106]?.decryptBy(passwordMd5 + ByteArray(4) + uin.toInt().toByteArray())?.read {
|
readTLVMap()[0x106]
|
||||||
|
?.also { DebugLogger.info("找到了 0x106") }?.decryptBy(passwordMd5 + ByteArray(4) + uin.toInt().toByteArray())?.read {
|
||||||
discardExact(2 + 4 * 4 + 8 + 4 + 4 + 1 + 16)
|
discardExact(2 + 4 * 4 + 8 + 4 + 4 + 1 + 16)
|
||||||
tgtgtKey = readBytes(16)
|
tgtgtKey = readBytes(16)
|
||||||
|
DebugLogger.info("获取 tgtgtKey=${tgtgtKey.toUHexString()}")
|
||||||
|
}
|
||||||
|
DebugLogger.info("tlv map里面没有 0x106")
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -302,22 +316,22 @@ fun ByteReadPacket.decodeSso() {
|
|||||||
println("// 尝试解 SSO")
|
println("// 尝试解 SSO")
|
||||||
println("// head")
|
println("// head")
|
||||||
discardExact(4)
|
discardExact(4)
|
||||||
println(" sequenceId=" + readUInt())
|
(" sequenceId=" + readUInt())
|
||||||
println(" subAppId=" + readUInt())
|
println(" subAppId=" + readUInt())
|
||||||
println(" subAppId2=" + readUInt())
|
println(" subAppId2=" + readUInt())
|
||||||
println(" unknownHex=" + readBytes(12).toUHexString())
|
println(" unknownHex=" + readBytes(12).toUHexString())
|
||||||
println(" extraData=" + readBytes(readInt() - 4).toUHexString())
|
println(" extraData=" + readBytes(readInt() - 4).toUHexString())
|
||||||
println(" commandName=" + readBytes(readInt() - 4).encodeToString())
|
val commandName = readBytes(readInt() - 4).encodeToString()
|
||||||
println(" unknown4Bytes=" + readBytes(readInt() - 4).toUHexString())
|
println(" commandName=" + commandName)
|
||||||
println(" imei=" + readBytes(readInt() - 4).toUHexString())
|
(" unknown4Bytes=" + readBytes(readInt() - 4).toUHexString())
|
||||||
println(" 0 bytes=" + readBytes(readInt() - 4).toUHexString())
|
(" imei=" + readBytes(readInt() - 4).toUHexString())
|
||||||
println(" ksid=" + readBytes(readShort() - 2).toUHexString())
|
(" 0 bytes=" + readBytes(readInt() - 4).toUHexString())
|
||||||
println(" 0 bytes=" + readBytes(readInt() - 4).toUHexString())
|
(" ksid=" + readBytes(readShort() - 2).toUHexString())
|
||||||
|
(" 0 bytes=" + readBytes(readInt() - 4).toUHexString())
|
||||||
|
|
||||||
println()
|
println()
|
||||||
discardExact(4)
|
discardExact(4)
|
||||||
println("// body(maybe OicqRequest)")
|
println("// body(maybe OicqRequest)")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val keys: Map<String, ByteArray>
|
val keys: Map<String, ByteArray>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package net.mamoe.mirai.qqandroid.io.serialization
|
package net.mamoe.mirai.qqandroid.io.serialization
|
||||||
|
|
||||||
import net.mamoe.mirai.qqandroid.network.protocol.jce.RequestPacket
|
import net.mamoe.mirai.qqandroid.network.protocol.packet.login.data.RequestPacket
|
||||||
import net.mamoe.mirai.utils.io.hexToBytes
|
import net.mamoe.mirai.utils.io.hexToBytes
|
||||||
|
|
||||||
class TestRequesetPacket {
|
class TestRequesetPacket {
|
||||||
|
Loading…
Reference in New Issue
Block a user