I know there is apktool for reverse engineering, dex2jar to extract as a jar file. I also heard about proguard which optimizes the codes to make it difficult to understand. But is proguard enough to give protection against reverse engineering? As far as I understand, resource files can still be altered even after using proguard (I am not sure though). Is there any other better techniques? Is there a way so that if someone tries with apktool, the codes as well as the resources both will be corrupted?
-
Pay close attention to the actual ROI, not the one you're thinking in your head.Dave Newton– Dave Newton2013-06-09 13:36:22 +00:00Commented Jun 9, 2013 at 13:36
-
Sorry I didn't find the similar post in search. Should I delete this one now?Nafis Abdullah Khan– Nafis Abdullah Khan2013-06-09 15:12:36 +00:00Commented Jun 9, 2013 at 15:12
1 Answer
But is proguard enough to give protection against reverse engineering?
Only you can define what "enough" is.
As far as I understand, resource files can still be altered even after using proguard
Anything can be altered even after using ProGuard, including resources.
Is there any other better techniques?
It is mathematically impossible to stop reverse engineering. After all, if a CPU can read an instruction and process it, a CPU can read an instruction and decompile it.
ProGuard, DexGuard (an enhanced ProGuard that encrypts resources), putting more logic in C/C++ than Java, and such can help slow down reverse engineering, but they cannot stop it. Hence, once again, only you can define what "enough" is.
Is there a way so that if someone tries with apktool, the codes as well as the resources both will be corrupted?
Well, IMHO, ProGuard doesn't "corrupt" the output of apktool for code. If, however, you think that ProGuard is "enough" for protecting your code, then DexGuard should be "enough" for protecting your resources. DexGuard is a commercial product, though, the last I looked.
If you are worried about reverse engineering, don't write client-side software.