> Occurs to me that there's a nice little obfuscation technique there -- rename
> all classes to so that their names start with, say, about 10 thousand spaces,
> and there aren't too mamy bytecode tools that will be usuable with the
> resulting classfiles ;-)
Well, I think the bytecode verifier will prevent against spaces in
names, but with other char, say 'x', or simply with randomly generated
long name, why not?... ;-) Hopeless, it is very easy to rename
classes/methods/fields in class-files, so in a case, when you really
need good obfuscation, let more sophisticated tools do theirs job...
Well, I can't recommend any tool of such type, but I've heard they
exist... :) (In fact, I don't recall any need for such a tool from my
past... Of course, I see reasons for it, but I know also, what such a
tool can, and what it can't do... So I probably will never "destroy" my
classes with it, there are lot of nicer things to do with Java classes
than obfuscating... :-) ).
piotr
Piotr Kobzda - 20 Mar 2007 12:59 GMT
Me:
> Well, I think the bytecode verifier will prevent against spaces in
> names, but with other char, say 'x', or simply with randomly generated
> long name, why not?... ;-)
Checked that, and it appears to me now, that, as Chris suggested, spaces
are also allowed by recent class verifiers (even with -Xfuture option
classes with only spaces in names are accepted).
I tried to find any formal specification on verification which states
that, but I haven't found anything stating it directly, neither in JLS,
nor in JVMS, except a single non-normative fragment from the latter
concerning verifications performed by the verifier:
"• Checking that all field references and method references in the
constant pool have valid names, valid classes, and a valid type descriptor."
It is not about class names, it's on method and field references names
only, and even for them, it is not clear to me what a "valid names"
means here?...
So, it's better to assume, that on JVM level, any class name (excluding
maybe empty, and incorrectly encoded one) is allowed.
P.S.
There is also a mistake in my advice to the OP, the maximum class name
length is 65535 (not 65536) characters, sorry for that.
piotr