Android如何防止apk程序被反编译

简介: 转自博客: http://blog.csdn.net/ithomer/article/details/6727640#     作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

转自博客:

http://blog.csdn.net/ithomer/article/details/6727640#

    作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹。proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

    下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。
(详细信息请参考/examples中的例子及注释。)

    让proguard.cfg起作用的做法很简单,就是在eclipse自

  1. -optimizationpasses 5
  2. -dontusemixedcaseclassnames
  3. -dontskipnonpubliclibraryclasses
  4. -dontpreverify
  5. -verbose
  6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

  7. -keep public class * extends android.app.Activity
  8. -keep public class * extends android.app.Application
  9. -keep public class * extends android.app.Service
  10. -keep public class * extends android.content.BroadcastReceiver
  11. -keep public class * extends android.content.ContentProvider
  12. -keep public class * extends android.app.backup.BackupAgentHelper
  13. -keep public class * extends android.preference.Preference
  14. -keep public class com.android.vending.licensing.ILicensingService

  15. -keepclasseswithmembernames class * {
  16.     native methods>;
  17. }

  18. -keepclasseswithmembernames class * {
  19.     public init>(android.content.Context, android.util.AttributeSet);
  20. }

  21. -keepclasseswithmembernames class * {
  22.     public init>(android.content.Context, android.util.AttributeSet, int);
  23. }

  24. -keepclassmembers enum * {
  25.     public static **[] values();
  26.     public static ** valueOf(java.lang.String);
  27. }

  28. -keep class * implements android.os.Parcelable {
  29.   public static final android.os.Parcelable$Creator *;
  30. }


    动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

    完整的default.properties文件应该如下:

  1. # This file is automatically generated by Android Tools.
  2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
  3. #
  4. # This file must be checked in Version Control Systems.
  5. #
  6. # To customize properties used by the Ant build system use,
  7. # "build.properties", and override values to adapt the script to your
  8. # project structure.

  9. # Project target.
  10. target=android-9
  11. proguard.config=proguard.cfg

    大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:

image


    如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可

相关文章
|
22天前
|
Java Android开发
Android反编译查看源码
Android反编译查看源码
23 0
|
2月前
|
Android开发 开发者
Android Split APK介绍
【2月更文挑战第5天】
|
3月前
|
数据安全/隐私保护 Android开发
2023安卓逆向 -- 某合伙apk登录加密分析
2023安卓逆向 -- 某合伙apk登录加密分析
26 0
|
3月前
|
安全 Java 图形学
Unity3D 导出的apk进行混淆加固、保护与优化原理(防止反编译)
Unity3D 导出的apk进行混淆加固、保护与优化原理(防止反编译)
29 0
|
6月前
|
SQL 人工智能 算法
Android性能优化之应用瘦身(APK瘦身)
Android性能优化之应用瘦身(APK瘦身)
|
2月前
|
算法 数据库 Android开发
安卓逆向 -- APK文件结构
安卓逆向 -- APK文件结构
21 0
|
2月前
|
算法 Java Android开发
安卓逆向 -- 调用其他APK的SO文件
安卓逆向 -- 调用其他APK的SO文件
17 0
|
2月前
|
Java 开发工具 Android开发
cordova打包android apk
cordova打包android apk
15 0
|
2月前
|
Android开发 数据安全/隐私保护
打包 android apk签名
打包 android apk签名
19 0
|
3月前
|
IDE 开发工具 Android开发
Android Studio 下发布项目成APK文件
Android Studio 下发布项目成APK文件
117 1