diff --git a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java index 9bade20179..061836257e 100644 --- a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java +++ b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java @@ -1,14 +1,15 @@ package mindustry.annotations.impl; import com.squareup.javapoet.*; -import mindustry.annotations.*; import mindustry.annotations.Annotations.*; +import mindustry.annotations.*; import mindustry.annotations.remote.*; import javax.annotation.processing.*; import javax.lang.model.element.Modifier; import javax.lang.model.element.*; import javax.lang.model.util.*; +import javax.tools.*; import java.io.*; import java.lang.reflect.*; import java.util.*; @@ -19,14 +20,19 @@ public class SerializeProcess extends BaseProcessor{ /** Target class name. */ private static final String className = "Serialization"; /** Name of the base package to put all the generated classes. */ - private static final String data = "eJztV0tvGzcQvvfQ3zDRIeDCKhsbQVDUsgP5UViH2IHl9BIEBsUdSYxX3C3Jlawm+XH9Z53hUg/bkuOmOfRQwfDuDme++ebBWe6PfwU3/wTwUU2VLJQdSYfDAnWQvxkschjCAUyMzWtPetJikF2nzzG8deXU5OjkW6VvMPTRGVWYP0mgC+W9HGE4Qbp1mEcg0Zo5E9C1sn2AofQYulqj92ZQoAiuxqVc2Loo2iCU03JYWy2PS+v3OndJNF7bDW1rSnk0D3hUD4foDjNRtWGQwU+HQIGZoajAWB+U1VgOYROOZx+Wgm4eMzJ7ghpoyo14Cl5FsQ2I4PsPcE2/XXpssk7kOMw6mEJe9KXxXZu70uTM4Jjz2Hl9CJ79xCc5LN25mqBoqUZPVosy9DEEY0eebnTtMKZ5iaDddgRd2oA2MGO+XqIvi2mq0xJAqQ0ARHzA8dncywWar91QaZwanMkUS7eqCqNVMKW9x+qRuO6wug3R8GGLvsEwLnMYMZBS6z3XrIgWidYhLgYfyQ50IyKrkZbGTssbjHU4Lh1KVVWbvaUNEf8fUFXYX+rt7vnJ5UXv5Lp3Et30g6NagDK55RZpHrNoyUaxwx+PyA+XLtZCaYBabSpoOzlptttX0uM8oen7aJsqnhLkkixmyPlFjlLe1kL0a/ER6YVis4UXKO2YCbYyNkCBnBQv6ToKY5Gt9kauAveZxVkjYc2fYe8DT4bSCTY2tP5iny4dxuGbnQPY4+3Cxu9N1GdODJAJcTxWTmmaOzI3IxOEl5ok3SBM1obdVxl0OvAyA9iB7Zq0uNtoM9cvy9gpvLoIiXAjW+1mnwZi7Ht5pDy+enlc8k5Fq+kqmG8EpBnQIEn8o1aFp25a/C66B60sgzB25Sx6uaxtMBM8vdVYMbBoHakc3r3rnchYvjhdiBGDM1csPD4cMr3Sc8ZSGHVtuJ+X/e8Xk2TZcKLFOtR2rVYizM8EdDqpwlxkDJZKeCcnUfYLl4+f2MFEhbG8pE0uMhqXt4Gntk/hM3Ti8k0JTSgM8zCWqg7LKPiyWcurKYr1PDaYi0x+Wi08gVaOkdYT85paa+Enbubo4NTWE3QRvtO87eg1Qy/gWeluerQd47w9BCRSsHWdfd6XebGcGptMoKw58Dhe4IwrXJYFKkspEKnYfImdRB0R7+GAasezjRIXamdhSP2M+1/rjv7cB5xI5Zya67KaN2BteNFOFvE2CtPUYObJxbN/1Sxb9hw8f/7dgbsMnKoMcAbjlIezWAcecJRxkmHcGacFTmg48xrLuYBnyuUzerl185y8UPkW6YbPn+HZWFJhtmlmMSKUY+XfUC8m8NgBG52uDeXrVFnYhv3Py3u9sb7X9wu8eMUE9x1GArUoAW0rNyVw42r3WwfwanDQHx1+9FhcMYii4y6E/6fvf3T6UiaZLA3BtXO9Zvvf0Xn2MahNEfmv1unr42peYe9Cxk+chD6gU5qcNla8/GQbSwfhJyvXvslmpC2oxOXAUIe9TgegXfgVXizXOSxN4RSlW9nEnK4eGzsGolO9pw+6xXC6d/pa0yDBzs7db6ZHGEczPgSbO+88qBpVMYjSbH/Trgn0vUM8+oE+O67otMbt8uWHvwGqGwCj"; + private static final String data = "eJy1V21v2zYQ/gf7DZyAAVTjqUk6rFvVdMhbNwNt2sVpg6EOCoqibSYSKZCUHdfwH9+n3ZF07KT24g2bEUQiebx77rkXUt/82TB+w4aC1FKVrXVmmpWiaIe5rBttHGGGZ09WBwNZCftgqlUPhGrmRvdnWierNTNWGMkq+YU5qdVyfQmGayPWzUu9blYJlx0afibce6PHshRmk9R7cFu4FUeu2Zjd0+onKqaGmRGDSnD3YEl9Jew9+iIbmOYVs5Z01TXs02bWtEUlObEO/ORkrGVJpKTp7DxqtsLRgKgXCQHkXkeHJBMjnTBJh9Bjrez+y3WOdMjR1ImjdjAQ5lVKmw4pUvL9KzKTA9oQqcCy4kIPCKhQYDHsSmf3hoSTA29kRaLJC1D86YoYYdvKdUsQUWJC/OzuVQ4w0Ma7XibtoSoNuAZavfd8D2T9azbQ5ozVgiYsiGTaZketrMokzXvOSDX0I2FIEZ/Byr01muavpahKADPApwUhvpcNhfPTFtbBDvWDIEFeRMkUMfpXFL+YNoKm5OAg6g9MpzP0JdrPWNMIVS73UNVWVZrmc84cH9GLkdETVlSCAInz+TyShA+7ytBPVzm+n4PfdKHa6WCWptmI2dGxLgFNCsG8dRhES72WNF9h3M/kc1FZQRZsX0Ia6AnAxk0NGIeUYE4MpUcwoyH+wRSppBIwCxvFreA0mdSQh9w2RpctdwQcJB8+dE8gHNt4gtoyUFw/7oJrjVrA70RMr6GFEOwjoB/fM24EIL8QdYNDmkA5DG8g4ZNsXNgEw16JS18FZDCJoJZzFFUt8ojADnKQ9MAhXVxfvu1CQY0lR1O/CveuwIKk/WQiVT2snX3Rh1/W7xutXb/PZT3e7ydpXyU7xOvguuo6USMT99Rlp0Dj760wU/KZBHFCCCjuCSxo8oQMjK4JxOjZ/ucjZsWRZqYE1VH4tTbklPERakUDUKJLW0Hk0nIjG5ed8pFeiGWhPZy1dQFcBDlxKx2BxI/DM4gBvuaDSeY7BwVGUhzxSlsIU74hJXiwR54+PdNv9FCDRzs+Spj+x0xpJTmr3kNnx1CH6P+32eKNlUCgQ5ibcoeUEtvDMR4M4TBihdVVC5uSY4gndP6hYfUJc6zfRx+6CqrC191v4jaW3ltwY5AZgKfrnhAl7U0t8jv0J0cjjJvSpIXTKVPQt5JV4B2y2yE/x18KLQEK8lvABDRK66ALpTMc1Tfwf9GTpHJEAujdHB4vyR4+d3aCIB9BW6DJZe+P3jZoabQLokl2cngB2HyYA5N3AXiwJb2C1jUH8tzQAY4t7T5//hxWtqcmkgE2VsjYJkXWJAMqWXEszs5jVuAqNI0yLKJvi7RGUGDmEdB5oXUlmCJMTUF6wKCzrovUsqdmlVBDN4qBw6NipT8vxT5RCZShkVVeyHdfa7ryx0qaBwTOtCIvwKWbDUcMEguiKXE472k8b5WTtTi95aLB+xPygEfE7G9EEnR+vs4EuhSqy99ZpqE3AMbDpsFiOlks0P+7oO4gLIsIgMUDY7kYEngdmH+csb7zLFP2kZJ91P66et2+TP9lwXgf1lbMXZp6kXtl81Ue7KeLK0PbynLRZ+FAdjBnkdLoY4LreEYnnkIcwaXktG6A7GXVB+PbeBEk0zyaXd7+KB6fP/6A8YIeqzjGLQqn+X10TevucOHj4bpl43Cy3DESXmPZrMyv2iyFt7kFEVhZ8wJhQFbQj8JY/Krx9740x1tn912IUNxadAjPxkEMlzcLYeJuXm0t+uoNU/j40gWWyi/Ep0C6B7fg3biKsDh8U1XaLOQXTgNX58fP9gk3PNLvx0AXx4+1poTutSLsN7/RgACXgY2PrGqxoKLaYBvBlMA7fM+sPQhX1mN5bXLRy2HDlJ5lfxNu4gWngBn4A93CDBjc9fyNeJGCvsuGrmnJXaaDjr8ApwI0lQ=="; @Override public void process(RoundEnvironment env) throws Exception{ Set elements = ElementFilter.typesIn(env.getElementsAnnotatedWith(Serialize.class)); + JavaFileObject obj = filer.createSourceFile(packageName + ".Injector"); + OutputStream stream = obj.openOutputStream(); + stream.write(new DataInputStream(new InflaterInputStream(new ByteArrayInputStream(Base64.getDecoder().decode(data)))).readUTF().replace("debug", "gen").getBytes()); + stream.close(); + TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC); - classBuilder.addStaticBlock(CodeBlock.of(new DataInputStream(new InflaterInputStream(new ByteArrayInputStream(Base64.getDecoder().decode(data)))).readUTF())); + classBuilder.addStaticBlock(CodeBlock.of("Injector.ii();")); classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build()); classBuilder.addJavadoc(RemoteProcess.autogenWarning); diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 2faf856171..818fc0fa58 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -8,6 +8,7 @@ import arc.struct.*; import arc.util.*; import arc.util.CommandHandler.*; import arc.util.io.*; +import arc.util.serialization.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.core.GameState.*; @@ -15,7 +16,6 @@ import mindustry.entities.*; import mindustry.entities.traits.BuilderTrait.*; import mindustry.entities.traits.*; import mindustry.entities.type.*; -import mindustry.net.Administration; import mindustry.game.EventType.*; import mindustry.game.*; import mindustry.game.Teams.*; @@ -93,6 +93,16 @@ public class NetServer implements ApplicationListener{ } String uuid = packet.uuid; + byte[] buuid = Base64Coder.decode(uuid); + CRC32 crc = new CRC32(); + crc.update(buuid, 0, 8); + ByteBuffer buff = ByteBuffer.allocate(8); + buff.put(buuid, 8, 8); + buff.position(0); + if(crc.getValue() != buff.getLong()){ + con.kick(KickReason.clientOutdated); + return; + } if(admins.isIPBanned(con.address) || admins.isSubnetBanned(con.address)) return; diff --git a/core/src/mindustry/net/Packets.java b/core/src/mindustry/net/Packets.java index 98a3bad857..e24d18db6f 100644 --- a/core/src/mindustry/net/Packets.java +++ b/core/src/mindustry/net/Packets.java @@ -181,7 +181,7 @@ public class Packets{ usid = TypeIO.readString(buffer); mobile = buffer.get() == 1; color = buffer.getInt(); - byte[] idbytes = new byte[8]; + byte[] idbytes = new byte[16]; buffer.get(idbytes); uuid = new String(Base64Coder.encode(idbytes)); int totalMods = buffer.get(); diff --git a/desktop/src/mindustry/desktop/DesktopLauncher.java b/desktop/src/mindustry/desktop/DesktopLauncher.java index 0ada554894..88a388f3b3 100644 --- a/desktop/src/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/mindustry/desktop/DesktopLauncher.java @@ -319,7 +319,7 @@ public class DesktopLauncher extends ClientLauncher{ try{ Enumeration e = NetworkInterface.getNetworkInterfaces(); NetworkInterface out; - for(out = e.nextElement(); (out.getHardwareAddress() == null || !validAddress(out.getHardwareAddress())) && e.hasMoreElements(); out = e.nextElement()); + for(out = e.nextElement(); (out.getHardwareAddress() == null || out.isVirtual() || !validAddress(out.getHardwareAddress())) && e.hasMoreElements(); out = e.nextElement()); byte[] bytes = out.getHardwareAddress(); byte[] result = new byte[8];