`
fei菲飞
  • 浏览: 7879 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类

android 如何防止代码被反编译

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

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在Android-sdk-windows\tools\下面多了一个proguard文件夹

proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。



在工程的"default.properties"中添加这样一句话“proguard.config=proguard.cfg”
打包签名后的.apk就是混淆的,其实我们只要做一步就可以了就是在"default.properties"中添加这样一句话“proguard.config=proguard.cfg”就可以了。

如果想要更加复杂地混淆代码,可以详细地对该文件进行配置.

由于apk是Android虚拟机加载的,它有一定的规范,加密apk后Dalvik无法识别apk了。完全避免是不可能的,总有人能够破解你的代码。但是有几种方式来提高被反编译取代码的难度:

1 关键代码使用jni调用本地代码,用c或者c++编写,因此相对比较难于反编译

2 混淆java代码。混淆是不改变代码逻辑的情况下,增加无用代码,或者重命名,使反编译后的源代码难于看懂。

网上开源的java代码混淆工具较多,一般是用ant的方式来编译的

Android 混淆文件proguard.cfg详解:

-injars  Androidtest.jar【jar包所在地址】
-outjars  out【输出地址】

-libraryjars    'D:\Android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】

-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

-keep public abstract interface com.asqw.Android.Listener{
public protected <methods>;  【所有方法不进行混淆】
}
-keep public class com.asqw.Android{
public void Start(java.lang.String); 【对该方法不进行混淆】
}

-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】

native <methods>;
}

-keepclasseswithmembers class * { 【保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。】
public <init>(Android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
public <init>(Android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends Android.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】
public void *(Android.view.View);
}

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

-keep class * implements Android.os.Parcelable {【保护指定的类文件和类的成员】
public static final Android.os.Parcelable$Creator *;
}


欢迎安卓开发热爱着加入一线群相互交流,共同进步~~
广州群252743081
南京群220818530
上海群252742977
分享到:
评论

相关推荐

    Android反编译代码与真实源代码对比

    Android 反编译代码与真实源代码对比 Android 反编译代码是指通过反编译工具将 APK 文件或 DEX 文件转换为 Java 代码的过程。通过对反编译代码与真实源代码对比,我们可以更好地理解 Android 应用程序的实现机制,...

    代码混淆—关于android被反编译的两种解决方案

    本文将深入探讨两种防止Android应用被反编译的策略:代码混淆和使用安全工具。 首先,我们来了解一下什么是代码混淆。代码混淆是一种通过改变代码的可读性来增加其复杂性的技术,主要是通过对变量名、函数名和类名...

    Android反编译工具包(最完整的Android反编译工具包)

    标题中的“Android反编译工具包(最完整的Android反编译工具包)”表明这是一个集合了多种工具的资源包,用于帮助开发者和安全研究人员进行APK的反编译工作。 首先,让我们来了解一下反编译的基本概念。反编译是将已...

    android反编译工具

    这通常涉及到使用各种Android反编译工具。这些工具可以帮助开发者、安全研究人员或者逆向工程师理解已编译的Android应用程序的工作原理。下面我们将详细探讨一些常用的Android反编译工具及其应用。 1. **Apktool**...

    Android源代码反编译工具包

    在Android开发领域,有时我们需要对APK应用进行深入分析,比如理解其工作原理、查找漏洞或进行二次开发,这时就需要用到Android源代码反编译工具。本工具包专为这些目的而设计,包含了实现这一目标所需的一系列工具...

    防止java反编译的一些方法

    隔离Java程序适用于网络应用,加密Class文件和使用本地代码则在特定条件下有效,而代码混淆作为综合性强的保护措施,被广泛认为是防止Java反编译的基本方法之一。开发者应根据应用的具体需求和安全等级,灵活选用或...

    最新的android反编译

    最新的android反编译工具以及相关的使用方法,这个版本为最新的工具。 1、把apk文件重命名为zip或者rar文件格式 2、解压后把classes.dex复制到dex2jar-2.0目录中 3、打开cmd,定位到dex2jar-2.0目录 4、运行d2j-dex2...

    android反编译资源获取

    在Android应用开发中,"android反编译资源获取"是一个重要的技术话题,它涉及到对APK文件的逆向工程,以便获取其中的资源文件,如图片、布局文件等。APKTool是这个过程中常用的一款工具,它允许开发者解包、反编译、...

    android反编译工具及使用方法

    里面包含了一个反编译工具,一个查看反编译后的文件工具,一个详细说明文档,可以将一个android的apk文件反编译后查看作者的原代码,由于在代码打包成apk时的编译经过了处理,反编译后的代码不可能恢复到原来的代码...

    Android反编译工具

    在Android应用开发的世界里,有时候我们可能需要对APK文件进行反编译,以了解其工作原理、查看源代码或进行安全分析。标题为“Android反编译工具”的压缩包包含了一系列用于Android应用反编译的实用工具。下面将详细...

    Android系统安全和反编译实战_源代码

    6. **反编译与混淆**:Android应用通常用Java或Kotlin编写,可以被反编译成人类可读的代码。了解如何使用反编译工具(如dex2jar、JD-GUI)以及如何应用混淆技术(如ProGuard或R8)对抗逆向工程。 7. **动态分析与...

    如何混淆Android项目代码(ProGuard)防止反编译.rar

    本教程将深入探讨如何使用ProGuard来混淆Android项目代码,以防止反编译。 一、ProGuard介绍 ProGuard是一款免费的Java类文件 shrinker、optimizer、obfuscator 和 preverifier。它能够减小APK大小,优化字节码,...

    Android反编译软件 安卓反编译 Android APK反编译详解

    在Android开发领域,有时我们需要对APK文件进行反编译以了解其内部结构、源代码逻辑或进行二次开发。本文将深入探讨Android反编译的相关知识,包括为什么要进行反编译,常用工具介绍,以及反编译过程的详细步骤。 ...

    Android 反编译可视化操作工具

    总之,"Android反编译可视化操作工具"是Android开发和逆向工程领域的一款强大辅助工具,它简化了反编译流程,提高了工作效率,并且具备代码提取和重新签名等功能,对于开发者来说是一大福音。在使用过程中,注意合理...

    反编译AndroidManifest等xml文件

    首先,反编译XML文件在Android开发中并不常见,因为源代码通常是可见的。然而,在分析APK或者处理二进制XML文件时,反编译就显得尤为重要。AXMLPrinter是一个用于解析和打印Android二进制XML文件的工具,它可以将二...

    android混淆编译代码 防止反编译

    本文将详细介绍如何在Android项目中进行代码混淆,以防止反编译。 首先,我们需要在项目文件中进行配置。在Android项目中,找到`project.properties`文件,通常位于项目的根目录下。在文件的最后添加一行`proguard....

    Android反编译代码与真实源代码对比(3)

    在深入探讨《Android反编译代码与真实源代码对比(3)》这一主题时,我们首先需要理解何为“反编译”以及它在Android开发中的应用与意义。反编译,简而言之,就是将编译后的二进制代码(如.class文件或.dex文件)转换...

    Android 反编译-全部工具包

    在Android开发领域,有时我们需要对已有的APK文件进行反编译,以便了解其内部结构、查看源代码或进行二次开发。"Android反编译-全部工具包"提供了一个便捷的方式,将所有必要的反编译工具集合在一起,使得开发者无需...

    android反编译看java代码工具

    "android反编译看java代码工具"就是这样的一个实用工具,它能帮助开发者将APK中的Dalvik字节码(.dex)转换为接近原生Java代码的Smali语言,进一步甚至可以转换成可读的Java源代码。 首先,`apktool`是这个工具包中...

Global site tag (gtag.js) - Google Analytics