Android 混淆使用及其字典混淆(Proguard)

这篇具有很好参考价值的文章主要介绍了Android 混淆使用及其字典混淆(Proguard)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.使用背景

ProGuard能够通过压缩、优化、混淆、预检等操作,检测并删除未使用的类,字段,方法和属性,分析和优化字节码,使用简短无意义的名称来重命名类,字段和方法。从而使代码更小、更高效、更难进行逆向工程。

Android代码混淆,又称Android混淆,是一种Android APP保护技术,用于保护APP不被破解和逆向分析。

所以在大部分的项目里,基本都会把混淆打开。

Tips:如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分。例如Gson库,Litepal库,有些东西用到的话,就得去proguard-rules.pro文件里配置一下。

2.开启混淆

需要在app的build.gradle文件里进行配置。

android {
    ......
    defaultConfig {
         
   }
    buildTypes {
        release {
            minifyEnabled true      // 开启代码混淆(必须的哈)
            zipAlignEnabled true   
            shrinkResources true   
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    
}
  1. minifyEnabled:是否进行代码混淆(开混淆就必须要这个哈)
  2. zipAlignEnabled:是否进行Zip压缩优化(可选)
  3. shrinkResources:是否移除未被使用的资源(可选)
  4. proguardFiles:混淆规则配置文件
  5. proguard-android.txt:AndroidStudio默认自动导入的规则,这个文件位于Android SDK根目录\tools\proguard\proguard-android.txt。这里面是一些比较常规的不能被混淆的代码规则。
  6. proguard-rules.pro:针对自己的项目需要特别定义的混淆规则,它位于项目每个Module的根目录下面,里面的内容需要我们自己编写。

3.Proguard配置规则

即在proguard-rules.pro里进行编写配置。

这儿我就不细说了,因为平时我也用不了那么多,这儿贴一个比较全的链接

Android 代码混淆规则 - 掘金

Tips:

AndroidMainfest中的类不混淆,所以四大组件和Application的子类和Framework层下所有的类默认不会进行混淆。自定义的View默认也不会被混淆;所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的(我目前看来是如此的)

4.字典混淆

我的配置:

# 混淆的压缩比例,0-7
-optimizationpasses 5
# 指定不去忽略非公共的库的类的成员
-dontskipnonpubliclibraryclassmembers
# 指定混淆是采用的算法
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
# 指定外部模糊字典 proguard-chinese.txt 改为混淆文件名,下同
-obfuscationdictionary proguard-1il.txt
# 指定class模糊字典
-classobfuscationdictionary proguard-1il.txt
# 指定package模糊字典
-packageobfuscationdictionary proguard-1il.txt

其实就是指定

  • -obfuscationdictionary dictionary_path:指定外部模糊字典
  • -classobfuscationdictionary dictionary_path:指定class模糊字典
  • -packageobfuscationdictionary dictionary_path:指定package模糊字典

这三个的模糊字典。让你的代码,搞起来特别没得可读性。

这个txt文件怎么生成,你可以自己写个脚本生成,也可以用网上已经写好的。

https://github.com/WrBug/FrenziedProguard/tree/master/proguard-file

下载好文件后,放在和proguard-rules.pro同级的文件目录里面:

android 混淆字典,Android开发,android

我使用的是 proguard-1il.txt,使用后反编译查看,首先是包名:

android 混淆字典,Android开发,android

其次是内容:

android 混淆字典,Android开发,android

可以看到,里面的各种对象,方法,变量名,参数等等都被混淆了,变化非常之大。

5.是否生效

使用反编译工具Jadx查看

GitHub - skylot/jadx: Dex to Java decompiler文章来源地址https://www.toymoban.com/news/detail-776771.html

到了这里,关于Android 混淆使用及其字典混淆(Proguard)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Android】自定义Spinner控件及其使用

    在 res/values/ 文件夹下新建一个 arrays.xml 文件: activity_main.xml 文件: 2.1 dropdown模式 效果: 2.2 dialog模式 效果: 在 res/drawable/ 文件夹下新建两个文件: (1) shape_for_custom_spinner.xml 文件(用来定义下拉框的样式): (2) selector_for_custom_spinner 文件(用来定义Spinner控件本身的样

    2023年04月16日
    浏览(28)
  • android 混淆

    # 指定代码的压缩级别 0 - 7(指定代码进行迭代优化的次数,在Android里面默认是5,这条指令也只有在可以优化时起作用。) -optimizationpasses 5 # 混淆时不会产生形形色色的类名(混淆时不使用大小写混合类名) -dontusemixedcaseclassnames # 指定不去忽略非公共的库类(不跳过library中的非

    2024年02月05日
    浏览(29)
  • android 混淆配置

    android 发布正式版本都会涉及到代码加密,防止反编译,这就涉及到混淆文件的配置 1、在app模块的build.gradle中配置 然后在其中引用的proguard-rules.pro文件中配置混淆即可 注:这里的app模块是指在build.gradle中配置的是 因为有的工程中有多个模块 2、proguard-rules.pro文件中配置混淆

    2024年02月01日
    浏览(28)
  • 【学习】从零开发的Android音视频开发(13)——MediaCodec到OMX框架过程及其硬解码

    在讲NuPlayer时,NuPlayer解码部分会创建MediaCodec,并且最终到达OMX框架,先看MediaCodec的 init 函数 从init函数中可以看到,首先创建了 ACodec ,并且初始化了 ALooper 、 AMessage ,由于ACodec继承自 AHandler ,那么一套消息机制就有了。最后发送 kWhatInit 消息,收到消息的逻辑位于ACodec.

    2023年04月08日
    浏览(37)
  • Android 根据mapping文件还原混淆代码

    app发布的时候都会做混淆处理,但是当发生错误的时候,只能看到一些混淆后的代码很难看清楚哪里错了,那么如何将混淆后的代码进行还原呢? Android sdk 目录下有专门的工具可以帮助我们进行还原。 在还原混淆之前,我们需要app的混淆mapping文件,该文件路径: 混淆文件的

    2024年02月09日
    浏览(34)
  • Android 马甲包 google市场混淆技术方案

    指定 混淆字典 在app的gralde里配置混淆字典 -obfuscationdictionary dict.txt#外部字典 -classobfuscationdictionary dict.txt #类字典 -packageobfuscationdictionary dict.txt #包字典 dict.txt 文件内容类似这样的: zguqnx mvdmuyh wmws jwomtp nhmhn zvlogo pomcwh bhdnzul osxbj gojb ctvkrg srmar sgkarnqi byghdn tvebtxw uxdhno qmjac pgxa

    2024年02月09日
    浏览(28)
  • 本仓库主要用来收集一些 Android 开发中常用的第三方 UI 库及其简单 Demo

    | 第三方库 | 介绍 | Demo | 使用说明 | | — | — | — | — | | CircleImageView | 显示圆形图片 | CircleImageViewDemo | Android UI Libs 之 CircleImageView.md | | android-gif-drawable | 显示 gif 图片 | android-gif-drawabledemo | Android UI Libs 之 android-gif-drawable.md | | AndroidSwipeLayout | 滑动布局,可以实现侧滑菜单与侧

    2024年04月15日
    浏览(39)
  • 【Python编程】字典及其使用

    整理是为了方便自己学习记忆使用。 参考书籍《Python编程--从入门到实践》(第2版),[美] 埃里克·玛瑟斯。         字典是由 键和值 组成的,以成对的形式出现。   键:值 child = { \\\'age\\\' : 5,  \\\'color\\\' : \\\'red\\\' }         上述表达式,是字典的基本组成。其中age和color是键

    2024年02月08日
    浏览(28)
  • 反编译(混淆)的微信小程序使用苹果ios真机调试时报错VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM,安卓(android)一切正常

    改反编译混淆的小程序语法写错了也会报这个错误: 报错原因很可能是你哪个地方改的(或写的)有问题,语法错误、变量未定义、使用了不存在的参数。 我这里是使用了 console.table() 方法 出错原因:IOS上的Webview并不支持 console.table() 方法,因此会导致代码无法运行。

    2024年02月12日
    浏览(44)
  • Android串口开发之使用JNI实现ANDROID和串口通信

    导语:Android串口通信在物联网、智能家居等领域具有广泛的应用。本文将详细介绍如何使用JNI技术实现Android设备与串口的通信,包括串口的打开、设置参数和读写数据等过程。 在开始介绍Android串口开发之前,我们需要了解以下几个概念: JNI:JNI(Java Native Interface)是一种

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包