ItzSomebody / radon

[Abandoned] Scuffed java bytecode obfuscator
GNU General Public License v3.0
361 stars 74 forks source link

Inefficiency and random unexpected exclusions in Renamer #97

Open ItzSomebody opened 3 years ago

ItzSomebody commented 3 years ago

From convo on discord (huge thanks to @MrExplode for spotting!): https://canary.discord.com/channels/495471385351553024/495481816128421899/831649568336117780

The current renamer design (both radon 2 and 3) attempts to check all subclasses of a parent class for inheritance via className + '.' + methodName + methodDesc. Radon achieves this through recursion and has a nicety of being easy to understand. Unfortunately, what this does is search potentially unrelated classes -- in fact, the entire inheritance graph is traversed. Since I am on Windows (disgusting) at the moment, here is a visual aid I whipped up in mspaint.exe:

Untitled

With the current algorithm, all classes in this graph will be traversed when checking inheritance for some virtual method in MyParentClass. This is very likely the cause of the random reports given to me about methods being excluded by renaming unintentionally.

ItzSomebody commented 3 years ago

Also, since this requires a little bit of rethinking of the renamer, perhaps this would be a good time to

  1. Fix remapping for a specific annoying case of lambdas (see: https://github.com/videogame-hacker/oof-jvm/tree/master/src/anonymous_lambda) and

  2. Add the much requested feature of remapping hardcoded reflections/methodhandles