> That sounds like its not just a Java issue, but a software issue? (eg, other languages aren't immune to be reverse engineered?)
No language is immune to reverse engineering.
Following on the answer from /u/knaekce, the demoscene roots go back to cracking games to remove code protection and add cheats like unlimited lifes or choosing the starting levels.
Here are two well known tools for trying to figure out what the binary code is trying to do.
https://www.hex-rays.com/products/ida/index.shtml
Signed binaries, code obfuscation, remote keys, native classloaders (in Java's case) are all obstacles, but if the attacker has access to the executable, it is only a matter of skill, determination and time.
There are only four tweaks that worked on my 8.1 Jailbreak that don't on my 8.2 Jailbreak.
Springtomize, TypeStatus, Spectral, and Springshot.
90% my ass... :P
EDIT: Springtomzie is artificially incompatible by the way, it may indeed work but functionality has been disabled by the developer on 8.2 betas. After some investigation with the lovely Hopperapp I have discovered that this is due to the method "ScheduleUnsupportedAlert". If any dev would like to disable this I'd surely appreciate it. Obviously this is done for a reason but I'm willing to try and take the risk.
IDA is a disassembler and decompiler. This means that people can use it to get source code (assembly) from a binary file along with doing some other stuff. I personally use Hopper disassembler which is cheaper and works well for Objective-C. Check it out here.
I used hopper a lot, it is pretty good (although it would be stupid to compare against IDA), its author is very nice and helpful too. Plugin architecture is also useful (not so mature)
At the end of the day it does the job, I basically reversed whole UIKit with it without problems, patched twitter app for retina before official update, modified Diablo binaries etc.
It works on both ARM and x86, ARM is getting better on every release.
Im guessing from decompiling the app but perhaps he just hooked the gps subsystem of it...I was busy trying to explain why he wouldn't be able to do that for long without getting caught...
I really didn't want to know because I didn't want to be tempted and he did it from an Iphone where I use android :P
class-dump and other tools.
Point class-dump at a framework you want to inspect and have it write out a set of headers. This will include private methods. For example, run it on a private framework in the iPhoneSimulator SDK.
Or you could use Hopper, IDA Pro, etc.
Good overview! I'll add: If you are an OS X developer, grab Hopper or otx and play with decompiling your own binary. This will give you a better view into what a potential cracker sees.
Ultimately, you can't prevent binary patches to your program (digital signing can help, but it's also possible to re-sign the binary and/or take out the signature checking code.). Nor can you prevent dynamic code injection (like mach_inject or SIMBL). If somebody is truly determined, they can crack your software. But you can make it a pain in the ass by following mojave_wasteland's advice :)
They do exist, I ran across "Hopper - The OS X and Linux Disassembler" last year. I never bought it, or cared to crack it, but I think the security was a little more than "unlocked=true" in some text file. It was a nice program, I just don't use that kind of software very often.
The site says:
>Demo limitations are:
>You cannot save documents,
>You cannot export the disassembled file in text format,
>You cannot export modified binaries,
>Debugger backend is not available,
>Sessions are time limited (30 minutes).
Hopper Disassembler is a really cool project that's on Windows, Mac and Linux. Not sure what features are available on the Linux version. I know that the Mac version has a working debugger.
Pretty awesome software so far though and it had a really reasonable price.