Android applications secured by Google's Library aren't as secure as they should be, with only a byte or two preventing applications being copied freely.
The bytes in question are contained within the selected application but clearly identifiable once the app has been disassembled, as demonstrated by Justin Case, whose write up on Android Police suggests that the process could easily be automated.
Android applications exist in byte-code, as do Java apps, and can thus be disassembled back to something very close to the original source with surprising ease. All the pirate has to do is disassemble the application, change how it responds when told that there isn't a valid licence, then recompile it and Bob's your pirate.
Applications protected by Google's License Verification Library (LVL) communicate with the Marketplace application on the phone, which connects to Google's Marketplace Server to confirm the application is licensed. The Marketplace application returns a "1" if the application isn't allowed to run, so on receiving a "1" the application displays some information to that effect and quits. But that decision tree can be changed so an application receiving a "1" decides instead to go ahead and run, as demonstrated in this video:
Not all developers use LVL - there are many alternatives - but LVL is easy to implement and locks applications to a Google cloud identity, allowing users to take applications with them when upgrading handsets.
Developers might also implement a less obvious decision tree - Java developers regularly use obfuscation tools to make their disassembled code hard to read (changing object and variable names, for example). That would make the task harder, but not impossible.
Occasional piracy can't be avoided - the idea is to make it sufficiently difficult to make most users opt for the paid alternative. Case reckons the process he demonstrates could easily be batched with a script, allowing a nefarious pirate to provide unlocked applications that could be installed by anyone without technical knowledge - at which point it becomes a more serious issue.
Fixing this problem won't be easy - it's up to developers to process the response from the Marketplace application, which remains secure. Android code will always be open to disassembly, thanks to its use of the Java model. A lot will depend on how effective obfuscation turns out to be, and how many developers take the time to apply it. ®