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, // MixedFluidExtractor::class.java,
// DamageExtractor::class.java, // DamageExtractor::class.java,
ChatSignatureExtractor::class.java,
VelocityFlatteningExtractor::class.java, VelocityFlatteningExtractor::class.java,
IceWalk::class.java, IceWalk::class.java,
AbilitiesExtractor::class.java, AbilitiesExtractor::class.java,

View File

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

View File

@ -27,12 +27,12 @@ import net.minecraft.client.world.ClientWorld
import net.minecraft.entity.Entity import net.minecraft.entity.Entity
import net.minecraft.network.ClientConnection import net.minecraft.network.ClientConnection
import net.minecraft.network.NetworkSide import net.minecraft.network.NetworkSide
import net.minecraft.registry.entry.RegistryEntry
import net.minecraft.scoreboard.Scoreboard import net.minecraft.scoreboard.Scoreboard
import net.minecraft.stat.StatHandler import net.minecraft.stat.StatHandler
import net.minecraft.util.math.BlockPos import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.ChunkPos import net.minecraft.util.math.ChunkPos
import net.minecraft.util.profiler.DummyProfiler import net.minecraft.util.profiler.DummyProfiler
import net.minecraft.util.registry.RegistryEntry
import net.minecraft.world.Difficulty import net.minecraft.world.Difficulty
import net.minecraft.world.Heightmap import net.minecraft.world.Heightmap
import net.minecraft.world.biome.Biome 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 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 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) = 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 override fun shouldUpdatePostDeath(entity: Entity?) = true

View File

@ -1,7 +1,7 @@
package de.bixilon.pixlyzer.physics.tests package de.bixilon.pixlyzer.physics.tests
import net.minecraft.registry.entry.RegistryEntry
import net.minecraft.util.math.BlockPos import net.minecraft.util.math.BlockPos
import net.minecraft.util.registry.RegistryEntry
import net.minecraft.world.biome.Biome import net.minecraft.world.biome.Biome
import net.minecraft.world.biome.source.BiomeAccess 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.BlockState
import net.minecraft.block.Blocks import net.minecraft.block.Blocks
import net.minecraft.block.TrapdoorBlock import net.minecraft.block.TrapdoorBlock
import net.minecraft.tag.BlockTags import net.minecraft.registry.tag.BlockTags
abstract class ClimbingExtractor(protected val block: BlockState) : AbstractExtractor() { 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.BlockState
import net.minecraft.block.FluidBlock import net.minecraft.block.FluidBlock
import net.minecraft.fluid.Fluid import net.minecraft.fluid.Fluid
import net.minecraft.tag.TagKey import net.minecraft.registry.tag.TagKey
object FluidUtil { 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.kutil.cast.CastUtil.unsafeCast
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
import net.minecraft.block.Blocks import net.minecraft.block.Blocks
import net.minecraft.tag.FluidTags import net.minecraft.registry.tag.FluidTags
class LavaStillExtractor : StillFluidExtractor(Blocks.LAVA.unsafeCast(), FluidTags.LAVA) { 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 de.bixilon.pixlyzer.physics.tests.fluid.FluidUtil.withLevel
import net.minecraft.block.Blocks import net.minecraft.block.Blocks
import net.minecraft.block.FluidBlock import net.minecraft.block.FluidBlock
import net.minecraft.tag.FluidTags import net.minecraft.registry.tag.FluidTags
class MixedFluidExtractor : AbstractExtractor() { class MixedFluidExtractor : AbstractExtractor() {
private val lava = Blocks.LAVA.unsafeCast<FluidBlock>() 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.Blocks
import net.minecraft.block.FluidBlock import net.minecraft.block.FluidBlock
import net.minecraft.fluid.Fluid import net.minecraft.fluid.Fluid
import net.minecraft.tag.TagKey import net.minecraft.registry.tag.TagKey
abstract class StillFluidExtractor( abstract class StillFluidExtractor(
protected val fluid: FluidBlock, 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.kutil.cast.CastUtil.unsafeCast
import de.bixilon.pixlyzer.physics.tests.ExtractorMethod import de.bixilon.pixlyzer.physics.tests.ExtractorMethod
import net.minecraft.block.Blocks import net.minecraft.block.Blocks
import net.minecraft.tag.FluidTags import net.minecraft.registry.tag.FluidTags
class WaterStillExtractor : StillFluidExtractor(Blocks.WATER.unsafeCast(), FluidTags.WATER) { class WaterStillExtractor : StillFluidExtractor(Blocks.WATER.unsafeCast(), FluidTags.WATER) {