Android apk安全 反编译及防反编译 简单记录

反编译及防反编译


        自己辛辛苦苦写的软件发现被别的无良程序员copy,更可恨的是还发布到市场,让自己的劳动成果及产品受到莫名的伤害,很可耻,so,我们还是先学习下反编译的原理,分析下如何才能防止别人反编译自己的软件。

一、如何反编译?


一、下载apktool,反编译资源文件,可以获得项目各个dpi图片,及媒体文件,可看到AndroidManifest.xml配置文件

        1、下载地址http://code.google.com/p/android-apktool/downloads/list,下载apktool1.5.2.tar.bz2,apktool-install-linux-r05-ibot.tar.bz2

        2、apktool1.5.2.tar.bz2存放的是apktool.jar源码,把源码放入解压后的apktool-install-linux-r05-ibot.tar.bz2中,此时该文件夹包括apktool.jar,aapt,apktool

        3、./apktool d xxx.apk,生成以下:
        AndroidManifest.xml apktool.yml assets lib res smali


二、下载dex2jar,反编译java代码

        1、下载地址:http://code.google.com/p/dex2jar/downloads/list

        2、./dex2jar.sh classes.dex(原apk中的文件),生成classes_dex2jar.jar


三、下载jd-gui  , 如何代码未保护,可以看到完完整整的java源代码

        1、下载地址:http://jd.benow.ca/
        2、./jd-gui 打开后导入classes_dex2jar.jar,然后保存源文件   

反编译工具打包下载(解压密码:android):

http://download.csdn.net/detail/chang_xing/7140825


二、如何防止别人反编译呢 ?


一、利用android官方给出的方法,代码混淆。(主要用到两个文件project.properties和proguard-project.txt

1、在项目下project.properties文件中做以下修改

    # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

2、修改后编译发布后,利用上面步骤反编译apk查看,发现项目下全面文件都被混淆了


       怎么配置项目混淆度呢?用的了proguard-project.txt在老版本中,创建项目的时候,会给出proguard.cfg,但是在的新版中创建项目则不会有任何提示。这个时候需要只要将proguard.cfg的内容加入到proguard-project.txt中,再根据自己的需要进行编辑即可)。

如下作用:

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

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


    -optimizationpasses 5  
    -dontusemixedcaseclassnames  
    -dontskipnonpubliclibraryclasses  
    -dontpreverify  
    -verbose  
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
      
    -keep public class * extends android.app.Activity  
    -keep public class * extends android.app.Application  
    -keep public class * extends android.app.Service  
    -keep public class * extends android.content.BroadcastReceiver  
    -keep public class * extends android.content.ContentProvider  
    -keep public class * extends android.app.backup.BackupAgentHelper  
    -keep public class * extends android.preference.Preference  
    -keep public class com.android.vending.licensing.ILicensingService  
      
    -keepclasseswithmembernames class * {  
        native <methods>;  
    }  
      
    -keepclasseswithmembernames class * {  
        public <init>(android.content.Context, android.util.AttributeSet);  
    }  
      
    -keepclasseswithmembernames class * {  
        public <init>(android.content.Context, android.util.AttributeSet, int);  
    }  
      
    -keepclassmembers enum * {  
        public static **[] values();  
        public static ** valueOf(java.lang.String);  
    }  
      
    -keep class * implements android.os.Parcelable {  
      public static final android.os.Parcelable$Creator *;  
    }  






  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值