Phantom Android Apps: they don't copy your ideas, they steal your code
anddoes.com
anddoes.com
The new Android License Server should help a bit. You embed your public key inside the app and it checks against your private key on the License Server in runtime. If someone merely changes the resources to claim an app as his own, the users running the app would still check against your private key and failed as non-paying users. Of course if the code containing the public key is reverse-engineered and replaced with a new public key, you are still screwed. Obfuscation would help in that case.
To raise the bar even higher, make the downloadable code expirable or embedding the public key to re-authenticate once downloaded.
Of course a persistent cracker can still run a sniffer to capture the runtime code, reverse engineering it, remove all the checks and stitch the code back together. It just makes it harder.
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.
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!
It will properly be faster to run as well.
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."
Providing obfuscation support in the build package or adding extra security layer in the Android platform itself is more manageable i guess..
Still, there are quite a few programs out there that use open-source in violation of the GPL. In particular, there are quite a few video-conversion or DVD apps using ffmpeg improperly on both Windows and OS X. (Use on Linux is proper, and users get needed patches) Aside from denying users the ability to make more changes with the relevant source, the apps are also generally poorly maintained. Even some with frequent GUI updates have failed to stay current with the core code. There have been several ffmpeg updates to address exploits using malformed videos, but users of many of the utilities are still vulnerable. The true open source projects are maintained very well, it's the apps where people are out to make a quick buck with a GUI on some free code and ignore the license that are the offenders. Projects such as VLC saw immediate updates.
The many utilities that hide their use of ffmpeg and related open-source generally don't get listed in the security alerts such as this. http://www.securityfocus.com/bid/15743
Even Pre OS X Mac applications had many resources that were easily modified With ResEdit and other tools. It would have been more work to alter code with security features, but changing the about box, splash screens, icons, and menu/dialog text was trivial and didn't require programming skills. Of course the sort of resources modularity used it was made international localization so easy.
I never did hear of any apps being hijacked, but those were comparatively innocent times.