signature

This commit is contained in:
Bixilon 2023-01-07 17:41:03 +01:00
parent cf59097c28
commit b20367c767
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
12 changed files with 109 additions and 10 deletions

View File

@ -70,6 +70,7 @@ object PhysicsExtractor {
// MixedFluidExtractor::class.java,
// DamageExtractor::class.java,
ChatSignatureExtractor::class.java,
VelocityFlatteningExtractor::class.java,
IceWalk::class.java,
AbilitiesExtractor::class.java,

View File

@ -1,7 +1,7 @@
package de.bixilon.pixlyzer.physics
import net.minecraft.block.Blocks
import net.minecraft.tag.BlockTags
import net.minecraft.registry.tag.BlockTags
object PhysicsTags {

View File

@ -27,12 +27,12 @@ import net.minecraft.client.world.ClientWorld
import net.minecraft.entity.Entity
import net.minecraft.network.ClientConnection
import net.minecraft.network.NetworkSide
import net.minecraft.registry.entry.RegistryEntry
import net.minecraft.scoreboard.Scoreboard
import net.minecraft.stat.StatHandler
import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.ChunkPos
import net.minecraft.util.profiler.DummyProfiler
import net.minecraft.util.registry.RegistryEntry
import net.minecraft.world.Difficulty
import net.minecraft.world.Heightmap
import net.minecraft.world.biome.Biome

View File

@ -32,7 +32,6 @@ class ClientWorldImpl private constructor() : ClientWorld(null, null, null, null
override fun playSound(x: Double, y: Double, z: Double, event: SoundEvent?, category: SoundCategory?, volume: Float, pitch: Float, useDistance: Boolean, seed: Long) = Unit
override fun playSoundAtBlockCenter(pos: BlockPos?, sound: SoundEvent?, category: SoundCategory?, volume: Float, pitch: Float, useDistance: Boolean) = Unit
override fun playSoundFromEntity(except: PlayerEntity?, entity: Entity?, sound: SoundEvent?, category: SoundCategory?, volume: Float, pitch: Float) = Unit
override fun playSoundFromEntity(except: PlayerEntity?, entity: Entity?, sound: SoundEvent?, category: SoundCategory?, volume: Float, pitch: Float, seed: Long) = Unit
override fun shouldUpdatePostDeath(entity: Entity?) = true

View File

@ -1,7 +1,7 @@
package de.bixilon.pixlyzer.physics.tests
import net.minecraft.registry.entry.RegistryEntry
import net.minecraft.util.math.BlockPos
import net.minecraft.util.registry.RegistryEntry
import net.minecraft.world.biome.Biome
import net.minecraft.world.biome.source.BiomeAccess

View File

@ -0,0 +1,99 @@
package de.bixilon.pixlyzer.physics.tests
import de.bixilon.kutil.base64.Base64Util.fromBase64
import de.bixilon.kutil.base64.Base64Util.toBase64
import de.bixilon.kutil.uuid.UUIDUtil.toUUID
import net.minecraft.network.encryption.Signer
import net.minecraft.network.message.LastSeenMessageList
import net.minecraft.network.message.MessageBody
import net.minecraft.network.message.MessageChain
import net.minecraft.network.message.MessageSignatureData
import java.security.KeyFactory
import java.security.spec.PKCS8EncodedKeySpec
import java.time.Instant
import java.util.*
class ChatSignatureExtractor : AbstractExtractor() {
val stringKey = System.getenv("PRIVATE_KEY")
private val key = KeyFactory.getInstance("RSA").generatePrivate(PKCS8EncodedKeySpec(stringKey.replace("\n", "").replace("\\n", "").removePrefix("-----BEGIN RSA PRIVATE KEY-----").removeSuffix("-----END RSA PRIVATE KEY-----").fromBase64()))
private val uuid = "9e6ce7c5-40d3-483e-8e5a-b6350987d65f".toUUID()
@ExtractorMethod
fun singing1() {
val message = "bixilon began the development during lockdown"
val time = Instant.ofEpochMilli(1673102470_1234)
val sessionId = "a26b7114-36c4-4eea-acac-108f516ef72d".toUUID()
val packer = MessageChain(uuid, sessionId).getPacker(Signer.create(this.key, "SHA256withRSA"))
val signature = packer.pack(MessageBody(message, time, -4886770986649219020L, LastSeenMessageList.EMPTY))!!
result["signature"] = signature.data.toBase64()
}
@ExtractorMethod
fun singing2() {
val message = "reversing signature code is pita"
val time = Instant.ofEpochMilli(1673103191_5678)
val sessionId = "79f3da83-a6a1-4d55-9aca-39d5faf4ad8b".toUUID()
val packer = MessageChain(uuid, sessionId).getPacker(Signer.create(this.key, "SHA256withRSA"))
val signature = packer.pack(MessageBody(message, time, 1856442944183750824L, LastSeenMessageList.EMPTY))!!
result["signature"] = signature.data.toBase64()
}
@ExtractorMethod
fun singing3() {
val message = "now even with last seen messages. I don't know their purpose."
val time = Instant.ofEpochMilli(1673103854_8402)
val sessionId = "5c31705b-963c-4832-b8a5-1ee617a4b362".toUUID()
val lastSeen = LastSeenMessageList(mutableListOf(MessageSignatureData("/OmblHW9CwdAawdE7WtVurRs7umsa/my8EeTT/NY36lqg3HmtAsqyRQ4fXHelw6pOA4o8UroAlmx+inwiEFHXkDICEIVM69vHKapQvoAaeEVrQ4pn9vURTY3GcUVOgr12V3d00odEpwviXaF6kchG1b/pZsLsfpacMiiVHkxZoqolvUNifHQKXVS48Gu1AKkwRw6bkcOKYZpcZgffe6U273rEQQefwzIdT/8F1P04WhiH7SREexVOolkuoKo6gYxXELf5M0BUf0ssG3SS1k8Wr3ys9nzB6hSoEd/ftKqGVxoqeq7pd1GgKfaRWpka8ZNyDpdm8JqvrmlN/phpS5X4Q==".fromBase64()))) // uuid does not matter, bytes are random
val packer = MessageChain(uuid, sessionId).getPacker(Signer.create(this.key, "SHA256withRSA"))
val signature = packer.pack(MessageBody(message, time, 6392082609L, lastSeen))!!
result["signature"] = signature.data.toBase64()
}
@ExtractorMethod
fun singing4() {
val message = "ʞ⍧\uDB16\uDFB1іⴎO\uD85E\uDF9A!㛽J˻5&뻝\uD8B9\uDE8F\uDA0C\uDC41\uDB9B\uDD0Fi읣މ猣랒糓\uD8EF\uDFCFk\uDA1D\uDCA4썿ߛ믣Ȣ\uDA51\uDF5B4" // random utf8 chars
val time = Instant.ofEpochMilli(1739579479_6302)
val sessionId = "232170f7-ef39-4959-bf4a-354145b9483a".toUUID()
val packer = MessageChain(uuid, sessionId).getPacker(Signer.create(this.key, "SHA256withRSA"))
val signature = packer.pack(MessageBody(message, time, 6392082609L, LastSeenMessageList.EMPTY))!!
result["signature"] = signature.data.toBase64()
}
@ExtractorMethod
fun singing5() {
val messages = listOf(
Pair(
"this is the first message :)",
Instant.ofEpochMilli(1673104584_7491),
),
Pair(
"this is the second message :)",
Instant.ofEpochMilli(1673104585_7492),
),
Pair(
"this is the third and last message :)",
Instant.ofEpochMilli(1673104586_7493),
)
)
val sessionId = "de2f95c2-8730-47ba-a5aa-8db09fcec48e".toUUID()
val packer = MessageChain(uuid, sessionId).getPacker(Signer.create(this.key, "SHA256withRSA"))
val signatures: MutableList<String> = mutableListOf()
for ((message, time) in messages) {
signatures += packer.pack(MessageBody(message, time, 6392082609L, LastSeenMessageList.EMPTY))!!.data.toBase64()
}
result["signature"] = signatures
}
}

View File

@ -4,7 +4,7 @@ import de.bixilon.pixlyzer.physics.tests.AbstractExtractor
import net.minecraft.block.BlockState
import net.minecraft.block.Blocks
import net.minecraft.block.TrapdoorBlock
import net.minecraft.tag.BlockTags
import net.minecraft.registry.tag.BlockTags
abstract class ClimbingExtractor(protected val block: BlockState) : AbstractExtractor() {

View File

@ -3,7 +3,7 @@ package de.bixilon.pixlyzer.physics.tests.fluid
import net.minecraft.block.BlockState
import net.minecraft.block.FluidBlock
import net.minecraft.fluid.Fluid
import net.minecraft.tag.TagKey
import net.minecraft.registry.tag.TagKey
object FluidUtil {

View File

@ -3,7 +3,7 @@ package de.bixilon.pixlyzer.physics.tests.fluid.still
import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
import net.minecraft.block.Blocks
import net.minecraft.tag.FluidTags
import net.minecraft.registry.tag.FluidTags
class LavaStillExtractor : StillFluidExtractor(Blocks.LAVA.unsafeCast(), FluidTags.LAVA) {

View File

@ -7,7 +7,7 @@ import de.bixilon.pixlyzer.physics.tests.fluid.FluidUtil.addTags
import de.bixilon.pixlyzer.physics.tests.fluid.FluidUtil.withLevel
import net.minecraft.block.Blocks
import net.minecraft.block.FluidBlock
import net.minecraft.tag.FluidTags
import net.minecraft.registry.tag.FluidTags
class MixedFluidExtractor : AbstractExtractor() {
private val lava = Blocks.LAVA.unsafeCast<FluidBlock>()

View File

@ -6,7 +6,7 @@ import de.bixilon.pixlyzer.physics.tests.fluid.FluidUtil.withLevel
import net.minecraft.block.Blocks
import net.minecraft.block.FluidBlock
import net.minecraft.fluid.Fluid
import net.minecraft.tag.TagKey
import net.minecraft.registry.tag.TagKey
abstract class StillFluidExtractor(
protected val fluid: FluidBlock,

View File

@ -3,7 +3,7 @@ package de.bixilon.pixlyzer.physics.tests.fluid.still
import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
import net.minecraft.block.Blocks
import net.minecraft.tag.FluidTags
import net.minecraft.registry.tag.FluidTags
class WaterStillExtractor : StillFluidExtractor(Blocks.WATER.unsafeCast(), FluidTags.WATER) {