前言

包括以下内容

要反编译apk需要下面3个工具

反编译资源文件

反编译类文件

代码混淆

要反编译apk需要下面3个工具

apktool(资源文件获取)

作用:资源文件获取,可以提取图片文件和布局文件进行使用查看

dex2jar(源文件获取)

作用:将APK反编译成java源码(classes.dex转化成jar文件)

jd-gui

作用:查看APK中classes.dex转化成的jar文件,即源码文件

下面进行反编译资源文件和类文件:

反编译资源文件

资源文件:包括图片资源、布局资源、动画、样式等其他资源

image.png

image.png

image.png

这样资源文件都可以看得到了。

反编译类文件

方式一:反编译得到Java类

1.下载并解压dex2jar-2.0,得到dex2jar-2.0文件夹,里面包含dex2jar.bat及其文件

2.将apk文件改为xx.zip文件,并解压得到classes.dex文件,并将其复制到dex2jar-2.0文件夹中

3

image.png

生成一个classes-dex2jar.jar文件,使用jd-gui.exe打开生成的classes-dex2jar.jar文件

方式二:直接使用smali2java工具

什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称之为Android字节码的反汇编语言。

代码混淆

只能混淆java类,不能混淆资源文件。系统定义的组件不能混淆。必须是导出的apk。

如何实现代码混淆

混淆类文件

修改module:app下的build.gradle

buildTypes {

release {

//是否需要混淆,默认false代表不混淆,true代表混淆

minifyEnabled true

//混淆需要用到的一个工具:proguard,对应的一个文件是:proguard-android.txt(这个文件在android-sdk \tools\proguard目录下)

//proguard是一个压缩、优化和混淆Java字节码文件的免费工具

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

在proguard-rules.pro中添加:

image.png

把下面代码,放入proguard-rules.pro文末:

#指定代码的压缩级别

-optimizationpasses 5

#包明不混合大小写

-dontusemixedcaseclassnames

#不去忽略非公共的库类

-dontskipnonpubliclibraryclasses

#优化 不优化输入的类文件

-dontoptimize

#预校验

-dontpreverify

#混淆时是否记录日志

-verbose

# 混淆时所采用的算法

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

#保护注解

-keepattributes *Annotation*

# 保持哪些类不被混淆

-keep public class * extends android.app.Fragment

-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

#如果有引用v4包可以添加下面这行

-keep public class * extends android.support.v4.app.Fragment

#忽略警告

-ignorewarning

##记录生成的日志数据,gradle build时在本项目根目录输出##

#apk 包内所有 class 的内部结构

-dump class_files.txt

#未混淆的类和成员

-printseeds seeds.txt

#列出从 apk 中删除的代码

-printusage unused.txt

#混淆前后的映射

-printmapping mapping.txt

########记录生成的日志数据,gradle build时 在本项目根目录输出-end######

#####混淆保护自己项目的部分代码以及引用的第三方jar包library#######

#-libraryjars libs/umeng-analytics-v5.2.4.jar

#三星应用市场需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar

#-libraryjars libs/sdk-v1.0.0.jar

#-libraryjars libs/look-v1.0.1.jar

#如果不想混淆 keep 掉

-keep class com.lippi.recorder.iirfilterdesigner.** {*; }

#友盟

-keep class com.umeng.**{*;}

#项目特殊处理代码

#忽略警告

-dontwarn com.lippi.recorder.utils**

#保留一个完整的包

-keep class com.lippi.recorder.utils.** {

*;

}

-keep class com.lippi.recorder.utils.AudioRecorder{*;}

#如果引用了v4或者v7包

-dontwarn android.support.**

####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####

-keep public class * extends android.view.View {

public (android.content.Context);

public (android.content.Context, android.util.AttributeSet);

public (android.content.Context, android.util.AttributeSet, int);

public void set*(...);

}

#保持 native 方法不被混淆

-keepclasseswithmembernames class * {

native ;

}

#保持自定义控件类不被混淆

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet);

}

#保持自定义控件类不被混淆

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

#保持 Parcelable 不被混淆

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

#保持 Serializable 不被混淆

-keepnames class * implements java.io.Serializable

#保持 Serializable 不被混淆并且enum 类也不被混淆

-keepclassmembers class * implements java.io.Serializable {

static final long serialVersionUID;

private static final java.io.ObjectStreamField[] serialPersistentFields;

!static !transient ;

!private ;

!private ;

private void writeObject(java.io.ObjectOutputStream);

private void readObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可

#-keepclassmembers enum * {

# public static **[] values();

# public static ** valueOf(java.lang.String);

#}

-keepclassmembers class * {

public void *ButtonClicked(android.view.View);

}

#不混淆资源类

-keepclassmembers class **.R$* {

public static ;

}

#避免混淆泛型 如果混淆报错建议关掉

#–keepattributes Signature

#移除log 测试了下没有用还是建议自己定义一个开关控制是否输出日志

#-assumenosideeffects class android.util.Log {

# public static boolean isLoggable(java.lang.String, int);

# public static int v(...);

# public static int i(...);

# public static int w(...);

# public static int d(...);

# public static int e(...);

#}

#如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。

#gson

#-libraryjars libs/gson-2.2.2.jar

-keepattributes Signature

# Gson specific classes

-keep class sun.misc.Unsafe { *; }

# Application classes that will be serialized/deserialized over Gson

-keep class com.google.gson.examples.android.model.** { *; }

同步,然后再打包

以上是根据我的一些理解,做的总结分享,旨在抛砖引玉,希望有更多的志同道合的朋友一起讨论学习,共同进步!

android 代码混淆 反编译,Android的反编译和代码混淆相关推荐

  1. Android笔记:防反编译、代码混淆中,解决第三方jar包不被混淆的一些心得,及gson防混淆方法...

    为了防止代码被反编译,一般在签名导出前需要对代码进行混淆.最近发现自己的一个项目工程在代码混淆后,使用中出现了异常.以下是自己这几天在解决代码混淆以及引入第三方jar包导致混淆出现的问题处理的一些心得 ...

  2. Android反编译工具jadx详细使用方法以及混淆和加固的对比

    反编译也不是什么新鲜的东西了.但是为了保护我们自己项目的代码,我们还是要通过反编译工具来检测一下我们的代码是否安全. 本文我们来使用一个开源的工具jadx来实现对apk文件的反编译. 1.下载安装ja ...

  3. 谈谈android反编译和防止反编译的方法

    android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项目就需要知道怎样防止反编译和反编译他人的项目来学 ...

  4. java 混淆 ant_Ant编译android,并Proguard代码混淆,v4混淆配置

    忙了三四周,总算把购开心的ios版(appStore搜"购开心")成功翻译成了android版,UI效果基本保持一致,上一张UI效果图吧,很养眼的: 还不错吧,进入正题吧. 以前一 ...

  5. android反编译和防止反编译的方法和原理

    1>静态解析修改安装包 A.反编译android安装包 众所周知Android安装包apk是一个将资源和执行文件打包的压缩文件,所谓反编译就是把别人的apk的源代码给反编译出来,让程序员可读. ...

  6. 反编译Android APK详细操作指南

    早在4年前我曾发表过一篇关于<Android开发之反编译与防止反编译>的文章,在该文章中我对如何在Windows平台反编译APK做了讲解,如今用Mac系统的同学越来越多,也有很多朋友问我能 ...

  7. Android——浙理体育(飞翔的红蜻蜓)反编译分析

    基本概念 飞翔的红蜻蜓:飞翔的红蜻蜓app是一款由北京知行灵动科技有限公司开发的专门为高校阳光体育开发的手机跑步软件,输入高校阳光体育管理系统的学号和密码就可以开启跑步了,但是一定要注意连接好校内wi ...

  8. 一键反编译Android包教程

    2023.6.6更新: 因为引入了v2签名,所以工具包进行了更新,已经支持v1 v2签名,签名工具替换为apksigner.jar 功能介绍 某些时候我们想修改apk包内容,比如汉化某个游戏,这时候就 ...

  9. Android N 7 【 classes.dex】反编译失败:com.googlecode.d2j.DexException: not support version.

    Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. D:\Android反编译工具[全]\2016\ ...

  10. 反编译android 状态栏沉浸,手把手教你傻瓜式开启状态栏沉浸模式

    现在很多童鞋在使用手机的同时,不仅要考虑是否好用,而且也越来越在意是否美观,是否看起来就能给人一种很舒爽的感觉.于是乎就不少同学就希望小6有沉浸模式,但是华为荣耀6等一些本身不具备沉浸功能的手机要实现 ...

最新文章

  1. python时间函数入门_calendar在python3时间中有哪些常用函数?怎么用?
  2. 数据库字段名不统一的教训
  3. NotePad++ 相关插件
  4. 北师大c语言2019在线作业,华东石油《C语言》2019年春季学期在线作业(二)辅导答案...
  5. python的while嵌套循环_Python中嵌套的WHILE循环
  6. 修改MySQL的配置文件
  7. 使用Smart3D进行倾斜摄影实景建模详细教程
  8. 论游戏电脑CPU和GPU之搭配
  9. 社群裂变工具有哪些?裂变活动成功的4个关键点!
  10. mac 10.11 brew php71,MAC OS X 10.11.4下载-OS X 10.11正式版下载 V10.11.6-PC6苹果网
  11. 台灯有必要买AA级的吗?精选专业护眼的国AA级台灯
  12. 数据仓库系列(一)什么是维度建模以及维度建模的基本要素
  13. 错题本 (并查集) acwing 4084.号码牌
  14. RPGMAKER游戏引擎基于JavaScript的插件制作(二)——如何理解插件,以及编写代码时的注意事项
  15. 如何使用Spring Boot促进java开发?高级java架构师为您详解!
  16. Flink Sort-Shuffle 实现简介
  17. TDMS转EXCEL
  18. USB转串口芯片PL2303HX 引脚定义
  19. 大数据早报:时装设计也用上了人工智能,亚马逊研究出新算法;上海地铁趣味消费数据发布(9.12)
  20. 王者荣耀原画模型与游戏模型对比,刘禅瞬间变尔康

热门文章

  1. 大版本号跨越,AIDA64更新6.0版本:更新测试,支持Zen 2架构
  2. 谷歌邮箱登录服务器设置
  3. 技嘉 7pesh3 安装Linux,技嘉h370主板装win7系统及BIOS设置教程(完美支持usb3.1)
  4. 【PANet】《Path Aggregation Network for Instance Segmentation》
  5. 4g通信模块怎么连接sim卡_SIM卡GPRS模块知识详解 浅谈SIM卡GPRS之原理模块
  6. WIN7显示桌面图标设置到左下角
  7. C++解压KRC文件
  8. Android11 下载APK并安装
  9. 三维可视化JavaScript组件接口
  10. Flash builder 4.6 下载 破解 序列号【你懂的】