Commit c429a7cf authored by Him188's avatar Him188

Fix decrypt

parent e2dd51e0
......@@ -68,10 +68,12 @@ internal val t163 = "2C 7A 7B 23 4E 24 3F 24 24 47 62 6B 69 2E 47 50".hexToBytes
var ecdhPrivateKeyS = "97a52992cb7a2110413629af94a3c249c68a3b731510caa8"
internal val shareKeyCalculatedByConstPubKey
get() = ECDH.calculateShareKey(
by lazy {
ECDH.calculateShareKey(
loadPrivateKey(ecdhPrivateKeyS),
initialPublicKey
)
}
var passwordMd5: ByteArray = byteArrayOf()
var uin: Long = 0L
......@@ -137,7 +139,14 @@ fun ByteReadPacket.analysisOneFullPacket(): ByteReadPacket = debugIfFail("Failed
println("uin=" + readString(readInt() - 4))
println("// 解密 body")
readRemainingBytes().tryDecrypt().toReadPacket().debugPrintThis("outer body decrypted").apply {
val encrypted = readRemainingBytes()
val decrypted = encrypted.tryDecryptOrNull()
if (decrypted == null) {
println("cannot decrypt: ${encrypted.toUHexString()}")
error("cannot decrypt: ${encrypted.toUHexString()}")
} else {
decrypted.toReadPacket().debugPrintThis("outer body decrypted").apply {
when (flag1) {
0x0A -> decodeSso()
0x0B -> decodeUni()
......@@ -263,6 +272,8 @@ fun ByteReadPacket.analysisOneFullPacket(): ByteReadPacket = debugIfFail("Failed
}
}
}
}
}
fun ByteReadPacket.decodeUni() {
......@@ -355,7 +366,7 @@ val keys: Map<String, ByteArray>
"t108" to t108,
"t10c" to t10c,
"t163" to t163
)
)
fun ByteArray.tryDecrypt(): ByteArray {
return this.tryDecryptOrNull() ?: error("Cannot decrypt. Encrypted data=" + this.toUHexString())
......
package net.mamoe.mirai.utils.cryptor
import net.mamoe.mirai.utils.io.chunkedHexToBytes
import net.mamoe.mirai.utils.io.toUHexString
expect interface ECDHPrivateKey {
fun getEncoded(): ByteArray
......@@ -65,8 +64,11 @@ private val commonHeadForNot02 = "3046301006072A8648CE3D020106052B8104001F033200
private const val constantHead = "3046301006072A8648CE3D020106052B8104001F03320004"
private val byteArray_04 = byteArrayOf(0x04)
private val head1 = "302E301006072A8648CE3D020106052B8104001F031A00".chunkedHexToBytes()
private val head2 = "3046301006072A8648CE3D020106052B8104001F03320004".chunkedHexToBytes()
fun ByteArray.adjustToPublicKey(): ECDHPublicKey {
val head = if(this.size<30) "302E301006072A8648CE3D020106052B8104001F031A00" else "3046301006072A8648CE3D020106052B8104001F03320004"
val head = if (this.size < 30) head1 else head2
return ECDH.constructPublicKey((head + this.toUHexString("")).chunkedHexToBytes())
return ECDH.constructPublicKey(head + this)
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment