Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

What did the disassembler do wrong? It just happens that there is no valid Java code which could produce that (valid) bytecode. What should it have outputted instead?


Output the method names as a_void and a_string instead of just a?


Then it wouldn't be true to the real structure of the program (although it would be true to the real behaviour of the program). Why is that less wrong?


> Why is that less wrong?

It compiles.


But may not run.


It's obviously not impossible to create legit Java code during disassembly. This is like an arms race; go ahead and dissemble my code, but I've made sure that you now need a better disassembler to produce valid code.

Eventually that disassembled will come along, and then more tricks will be used by the obfuscators...


This is not a proper arms race; it terminates with a victory for the disassemblers in a finite and feasible amount of work.

There is an arms race in whether the resulting output is at all human-comprehensible. The only thing preventing that from terminating with victory for the obfuscaters is that the obfuscators have a finite technical budget with which to obfuscate. Changing identifiers is nearly free, but as you go beyond that and start rewriting the source code itself they start incurring performance penalties and increasing odds that the rewrite will fail as they get more aggressive.


It would fail at runtime if this method is called by reflection.


Yes. That reflection code would have also failed the moment the obfuscator did it's thing, so that is not really a concern. The two are not really compatible.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: