Is there no way to obfuscate code compiled for the Android platform before shipping your app?
Also, I wonder if the Flash to iPhone apps will have the same issue - decompiling Flash swfs is surprisingly effective.
Is there no way to obfuscate code compiled for the Android platform before shipping your app?
Also, I wonder if the Flash to iPhone apps will have the same issue - decompiling Flash swfs is surprisingly effective.
It will properly be faster to run as well.
Another problem for obfuscation is, the time spent on protecting the app, should have been used to improve the apps. I don't think iOS devs spent too much time on obfuscate their code...
It's always made me wary of shipping anything that I'd consider 'secret sauce' (code that solves hard problems) in Java out of concern that our competitors could so easily see exactly how we do it. Similarly, I've been afraid of a competitor or even customer decompiling our stuff and finding either sloppy code or finding security issues.
Yes, I realize all of this is somewhat possible with C/C++ and other languages, and that there are obfuscators, but it is surprisingly easy with Java.
I'm familiar with decompiling C, but in C, you're left guessing variable names. (Not that variable names 'secret-ify' the sauce at all, but it goes to time spent.) Bin-patching C programs is surprisingly 'easy' to learn these days if you're rather technically inclined.
I actually really admire those who can make sense of obfuscated native binary code without debug info.. but decompiling java code using "off-the-shelf" tools is totally different.. the difference is like playing mozart on piano v.s. ... on your ipod.....
I haven't played around with Java decompilers, but I have sat down with a hex editor before and played with Java class files, and I could see all the strings!
1: From Adobe's FAQ at http://bit.ly/cxpzFe
"Is the Flash Player runtime bundled along with the application?
No. iPhone applications built with Flash Platform tools are compiled into standard, native iPhone executable packages and there is no runtime interpreter that could be used to run Flash byte-code within the application."