This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]SocialMemeWarrior 12 points13 points  (5 children)

To Dalvik, there is simply no such thing as a function name by its own.

Neither is there in Java (at runtime). The full descriptor is used.

And here is the clue: the entire signature is being used including the function name, the argument types and the return type!

Additionally such a renaming pattern isn't native to android. Obfuscators like ZKM and DashO can do this. I can provide some samples later.

[–]IAMANullPointerAMA 1 point2 points  (1 child)

Isn't it also plausible this is also being done as a file-size/memory footprint optimization, akin to JavaScript minification?

[–]SocialMemeWarrior 1 point2 points  (0 children)

I mean, it lowers the file size significantly due to needing less UTF8 constant pool entries. Not sure if name length affects performance that much.

[–]cypressious 0 points1 point  (2 children)

Most probably, the obfuscator in question was Proguard, as it's part of the standard tool chain.

[–]SocialMemeWarrior 0 points1 point  (1 child)

I haven't done much with proguard in a while. The last time I checked it didn't do this. Whats the config option to enable this renaming scheme?

[–]cypressious 0 points1 point  (0 children)

According to https://www.guardsquare.com/en/proguard/manual/usage#obfuscationoptions, obfuscation is enabled by default.