`
andy_叶
  • 浏览: 69118 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android源码中混淆编译

 
阅读更多

1.在需要混淆的工程目录下(package/apps/下的工程)添加proguard.flags文件,该文件即为网络传说中的proguard.cfg,只是命名不一样而已,然后再Android.mk中添加如下两句:
LOCAL_PROGUARD_ENABLED := full
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
上面的full 也可以是custom,如果不写这句,那还得添加如下一句:
TARGET_BUILD_VARIANT := user或者TARGET_BUILD_VARIANT := userdebug

 

这样后在工程目录下执行mm便可以看到在out/target/common/obj/APPS/目录下生成了形如proguard.classes.jar的东东,这就说明已在编译中启动了proguard

 

但反编译一看,并未出现网络云说的abcd替代符号,其实代码并未真正混淆:

android在编译时默认关闭了混淆选项,有去研究build/core目录的同志会发现这里也有个proguard.flags文件,其实在 proguard的过程中,编译器会调用包括本地目录下和系统定义了的多个proguard.flags文件,而在这个文件中混淆的选项被禁止了,故而编 译出来的apk仍未混淆。因此将如下句子注释掉便可实现真正的混淆编译:
# Don't obfuscate. We only need dead code striping.
-dontobfuscate(将该句加个#号注释掉)

 

2.proguard.flags的源码如下:

 

-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>;    
 
 }       
 
-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 *;    
 
}

 

 

 

3 。好奇的同志还可以继续看看,为什么TARGET_BUILD_VARIANT := user和LOCAL_PROGUARD_ENABLED := full二选一即可,详见build/core/package.mk:

 

LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifndef LOCAL_PROGUARD_ENABLED
ifneq ($(filter user userdebug, $(TARGET_BUILD_VARIANT)),)
    # turn on Proguard by default for user & userdebug build
    LOCAL_PROGUARD_ENABLED :=full
endif
endif
ifeq ($(LOCAL_PROGUARD_ENABLED),disabled)
    # the package explicitly request to disable proguard.
    LOCAL_PROGUARD_ENABLED :=
endif
proguard_options_file :=
ifneq ($(LOCAL_PROGUARD_ENABLED),custom)
ifneq ($(all_resources),)
    proguard_options_file := $(package_expected_intermediates_COMMON)/proguard_options
endif # all_resources
endif # !custom
LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_PROGUARD_FLAGS)

分享到:
评论
2 楼 andy_叶 2013-04-03  
hold_on 写道
有 android proguard 语法文档吗?
google 网站不稳定

hold_on 写道
有 android proguard 语法文档吗?
google 网站不稳定



有的!网上也有很多介绍!
1 楼 hold_on 2013-03-27  
有 android proguard 语法文档吗?
google 网站不稳定
发表评论

文章已被作者锁定,不允许评论。

相关推荐

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

    dex2jar是一款常用的Android反编译工具,它能够将DEX(Dalvik Executable)文件转换为JAR文件,然后使用JD-GUI或者JD-Core等Java反编译器将JAR文件反编译回Java源码。为了防御这种情况,开发者可以采用以下方法: 1...

    android源码混淆避免反编译[参照].pdf

    android源码混淆避免反编译[参照].pdf

    android源码混淆避免反编译定义.pdf

    本文将详细解释Android源码混淆的原理和应用。 首先,我们要明确混淆的目标:阻止他人通过反编译获取到源代码的可读性。由于Java程序的字节码(.class文件)很容易通过反编译工具(如JD-GUI或FernFlower)转换回...

    android反编译源码

    在Android开发领域,反编译源码是一种常见的技术手段,用于理解APK文件的工作原理、学习第三方库的实现或者进行安全分析。本文将详细介绍“android反编译源码”这一主题,包括反编译工具、过程以及反编译后的源码...

    Android 7.0相机源码

    在Android 7.0相机源码中,JNI层可能会包含与硬件驱动交互的代码,这些代码负责与硬件直接通信,实现低级别的控制和优化,如帧率调整、曝光控制等。 四、src目录 src目录包含了所有Java源代码,包括相机服务、相机...

    ant proguard 混淆编译 之Eclipse-Idea

    在Android开发中,为了保护应用的安全性和优化代码,开发者通常会使用ProGuard工具进行混淆编译。本篇文章将聚焦于如何在Eclipse和IntelliJ IDEA(Idea)这两个不同的集成开发环境中配置并使用ProGuard,以实现对Ant...

    Android SO文件保护OLLVM混淆加固——混淆篇(二)

    在Android应用开发中,SO(Shared Object)文件是C或C++编译后的动态链接库,它们包含了应用程序的重要逻辑和敏感代码。为了提高应用的安全性,开发者常常需要对这些SO文件进行保护,防止恶意攻击者逆向工程分析,...

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

    4. **ProGuard** 的逆操作工具,如 **dexGuard** 或 **Obfuscator-IL**:ProGuard是Android开发中常用的代码混淆工具,这些逆操作工具可以帮助我们还原被混淆的代码。 5. **Smali/baksmali**:Smali是一种Dalvik...

    【android开发】混淆打包proguard模板

    在Android应用开发中,为了提高应用的安全性和优化代码体积,开发者常常会进行代码混淆和打包。ProGuard是一款强大的Java字节码混淆、优化、预校验和分析工具,它可以为我们的Android项目提供必要的保护,防止恶意...

    Android源代码反编译工具包

    首先,Android源码反编译涉及到的主要工具有: 1. **Apktool**:这是一个开源的工具,用于解包和重新打包Android应用。它能解析APK中的资源文件,包括XML布局、图片和音频等,并将其以可读的形式呈现出来。 2. **...

    android_apk反编译工具

    然而,出于安全和隐私考虑,APK文件通常被混淆和加密,使得直接查看源码变得困难。为了分析、学习或者调试APK,开发者有时需要进行反编译操作。本文将详细介绍如何使用"android_apk反编译工具",包括dex2jar和JD-GUI...

    去哪Android客户端反编译源码(仅供学习)

    "去哪Android客户端反编译源码(仅供学习)"是一个面向学习目的的资源,提供了对去哪网Android应用程序的源代码分析机会。这个资源的标签"去哪"、"去哪源码"、"去哪安卓源码"明确了我们关注的是去哪网的Android应用...

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

    由于Android应用主要使用Java语言编写,并且APK文件本质上是可被解压的ZIP文件,因此容易受到反编译工具的攻击,暴露源码,甚至可能导致敏感信息泄露。为了对抗这种威胁,开发者通常会采用代码混淆技术,其中...

    android app 反编译步骤

    * 在反编译后的代码中,可能会包含一些不可读的代码,这是因为源码经过 ProGuard 混淆后的结果。 * 在反编译 APK 的过程中,可能会遇到一些防反编译的措施,例如一些 app 会进行防反编译的保护,但这并不影响我们...

    Android一键反编译

    在Android开发领域,有时我们需要对APK文件进行反编译以了解其内部结构、源代码或进行二次开发。"Android一键反编译"是这样的一个工具,它简化了原本复杂的过程,让开发者和逆向工程师可以更高效地探索APK的内部工作...

    android反编译xml、layout

    3. **修改源码**: 在解压后的目录中,用户可以自由地修改反编译出的XML文件和其他资源。 4. **重新打包**: 修改完成后,使用`apktool b`命令可以将修改后的源码重新打包成一个新的APK。需要注意的是,重新打包的APK...

    open camera Android 源码 适配Android Studio

    描述中的"open camera Android源码"指的是Open Camera项目的原始代码,这为开发者提供了深入理解相机应用工作原理的机会。"适配Android Studio"意味着这个项目已经被更新或配置,以便在最新的Android开发环境中无缝...

    APK反编译工具(Android源码学习必备)

    在反编译过程中,可能会遇到的问题包括代码混淆,这是开发者为了保护源码不被轻易理解而进行的一种加密方式。混淆后的代码命名混乱,逻辑复杂,增加了反编译的难度。不过,有些高级的反编译工具可以尝试还原混淆的...

    Android APK反编译文件

    本文将深入探讨“Android APK反编译文件”这一主题,包括如何进行反编译,以及反编译过程中的关键知识点。 首先,让我们了解什么是APK反编译。APK反编译是将已编译的APK文件转换回其源代码形式,以便分析和理解其...

    android源码开发实战11.12.zip

    在Android源码开发实战中,第11.12章节主要涵盖了Android系统级别的开发和调试技巧,这包括但不限于深入理解Android内核、框架层以及应用层的交互机制。这一部分的知识点广泛且深入,旨在帮助开发者提升对Android...

Global site tag (gtag.js) - Google Analytics