diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsExtractor.kt index 785ac23..7eb0f7e 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsExtractor.kt @@ -70,6 +70,7 @@ object PhysicsExtractor { // MixedFluidExtractor::class.java, // DamageExtractor::class.java, + ChatSignatureExtractor::class.java, VelocityFlatteningExtractor::class.java, IceWalk::class.java, AbilitiesExtractor::class.java, diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsTags.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsTags.kt index b5dbd76..8c962cf 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsTags.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsTags.kt @@ -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 { diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsUtil.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsUtil.kt index 76ab843..ec75403 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsUtil.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/PhysicsUtil.kt @@ -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 diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/impl/ClientWorldImpl.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/impl/ClientWorldImpl.kt index ae242ee..4ea795d 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/impl/ClientWorldImpl.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/impl/ClientWorldImpl.kt @@ -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 diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/BiomeNoiseExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/BiomeNoiseExtractor.kt index ea42a57..29ce9b8 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/BiomeNoiseExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/BiomeNoiseExtractor.kt @@ -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 diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/ChatSignatureExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/ChatSignatureExtractor.kt new file mode 100644 index 0000000..b149fe1 --- /dev/null +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/ChatSignatureExtractor.kt @@ -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 = mutableListOf() + for ((message, time) in messages) { + signatures += packer.pack(MessageBody(message, time, 6392082609L, LastSeenMessageList.EMPTY))!!.data.toBase64() + } + result["signature"] = signatures + } +} diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/blocks/climbing/ClimbingExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/blocks/climbing/ClimbingExtractor.kt index 1eaa5a1..8d0e0bc 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/blocks/climbing/ClimbingExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/blocks/climbing/ClimbingExtractor.kt @@ -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() { diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/FluidUtil.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/FluidUtil.kt index 7b80361..c6499e0 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/FluidUtil.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/FluidUtil.kt @@ -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 { diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/LavaStillExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/LavaStillExtractor.kt index a92e2c2..435da5c 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/LavaStillExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/LavaStillExtractor.kt @@ -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) { diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/MixedFluidExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/MixedFluidExtractor.kt index f560296..67fee39 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/MixedFluidExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/MixedFluidExtractor.kt @@ -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() diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/StillFluidExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/StillFluidExtractor.kt index d63137e..394bade 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/StillFluidExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/StillFluidExtractor.kt @@ -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, diff --git a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/WaterStillExtractor.kt b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/WaterStillExtractor.kt index 9e6ca30..8398ca4 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/WaterStillExtractor.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/physics/tests/fluid/still/WaterStillExtractor.kt @@ -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) {