Oggi mi sono imbattuto in una classe offuscata (molte classi offuscate in un barattolo) e non ho idea di come questo tipo di offuscamento sia fatto.Come viene eseguita l'offuscamento in Java?
Un esempio:
protected void a(ChannelHandlerContext ☃, ByteBuf ☃, ByteBuf ☃)
throws Exception
{
int ☃ = ☃.readableBytes();
if (☃ < this.c)
{
☃.b(0);
☃.writeBytes(☃);
}
else
{
byte[] ☃ = new byte[☃];
☃.readBytes(☃);
☃.b(☃.length);
this.b.setInput(☃, 0, ☃);
this.b.finish();
while (!this.b.finished())
{
int ☃ = this.b.deflate(this.a);
☃.writeBytes(this.a, 0, ☃);
}
this.b.reset();
}
}
}
Come vedete sopra, tutte le variabili dei parametri sono una snow-man. Come può essere annullato? Inoltre come è fatto in primo luogo; in che modo la JVM è in grado di "elaborarli" ed eseguire il codice senza problemi?
Per chiarire, non ho intenzione di utilizzare questo codice, è solo per scopi didattici. Sto seguendo il corso di Informatica a scuola, quindi stiamo imparando Java e parliamo di limitazioni come le decompilazioni. Sono interessato a saperne di più, quindi ho deciso di dare un'occhiata ai progetti più grandi, in particolare i server. Questo pezzo di codice viene estratto dal server Spigot per Minecraft (un gioco) che è un fork del server Bukkit per Minecraft che doveva essere open source.
Questo è un carattere Unicode come qualsiasi altro carattere Unicode. Perché ti aspetti che non funzioni? – SLaks
Beh, vedo il tuo punto, so che lo è ed è "\ u2603" in particolare, ma non capisco come può essere fatto, e annullato ...: -) Grazie. –
È proprio come qualsiasi altro nome di variabile. Puoi nominare una variabile 'x', per esempio.Questa è solo una variabile il cui nome è '☃'. Non c'è "fatto" o "annullato", è solo che puoi scrivere un nome di variabile con qualsiasi carattere tu voglia. –