编译镜像时给apk加混淆

安卓APK反编译实战指南:从工具链到混淆加固对抗 反编译是将已编译程序还原为可读代码的核心逆向工程技术,其原理基于对二进制文件格式(如APK的ZIP结构、Dex字节码)的解析与转换。这项技术在软件安全审计、漏洞挖掘、竞品分析和疑难问题排查等领域具有重要价值,尤其在移动应用生态中,能帮助开发者理解实现逻辑、定位隐蔽Bug。面对常见的代码混淆(ProGuard/R8)和商业加固方案,需要结合静态分析(如资源解码、控制流跟踪)与动态调试(如Frida内存注入)进行突破。本文通过【线上崩溃排查】和【资源解码】等实际场景,系统介绍了Apktool、JADX、enja 阅读详情

打开混淆开关

Android.mk中经常会看到

LOCAL_PROGUARD_ENABLED := full

这一句,从字面上理解,是开启混淆。如果你以为这样编译出来的apk就已经被混淆了,结果会让你很困惑。将apk里的classes.dex反编译,会看到代码仍然是混淆之前的状态,甚至连文件大小都没有变化。这行语句加不加,效果是一样的。
事实上,系统编译时,如果LOCAL_PROGUARD_ENABLED没有设置,除非环境变量中显式地定义了DISABLE_PROGUARD为true,LOCAL_PROGUARD_ENABLED默认值就是full。
参见:build/core/package_internal.mk

LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifndef LOCAL_PROGUARD_ENABLED
ifneq ($(DISABLE_PROGUARD),true)
    LOCAL_PROGUARD_ENABLED :=full
endif
endif

那为什么混淆不起作用呢?

ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常用于Android开发用于混淆最终的项目,增加项目被反编译的难度。

默认情况下,系统关闭了ProGuard的混淆功能,将其仅用于压缩。
参考build/core/java.mk

ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# By default no obfuscation
proguard_flags += -dontobfuscate
endif  # No obfuscation
ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),)
# By default no optimization
proguard_flags += -dontoptimize
endif  # No optimization

要想将混淆开关打开,需要在Android.mk中增加:

LOCAL_PROGUARD_ENABLED := full obfuscation

这时候再编译,就会看到类和方法大部分变成了a,b,c之类无意义的短变量,完成了混淆的功能。同时带来的好处是,apk的体积大约有20%的减小。

解决混淆带来的问题

问题:Warning: can’t find referenced

如果应用中有引用的第三方jar库,在编译时会有可能碰到类似
“Warning: can’t find referenced class”
之类的编译警告,导致编译失败,解决方案是要通过混淆配置文件来保留某些第三方的库不要被混淆。
首先在Android.mk中增加一行来指定混淆配置文件:

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

混淆配置文件依惯例命名为proguard.flags,在Android.mk同目录下建立proguard.flags,将要保持不被混淆的类或成员加进来。示例:

-dontwarn com.google.zxing.**       # 消除针对com.google.zxing的所有警告
-keep class com.google.zxing.** {   # 保留com.google.zxing所有类的命名
    *;                              # 保留com.google.zxing的所有类的成员的命名
}
-verbose

-dontwarn是消除警告,-keep是保留指定类和成员的命名,具体语法请参考ProGuard的语法说明,这里就不介绍了。

json序列化一个类时的要注意保留类的成员变量不被混淆

json的序列化函数会直接使用类的变量的命名,如果这个类被混淆了,会导致序列化出来的文件可读性比较差,需要在proguard.flags中将这个类的成员变量设置为保留。

Android逆向分析入门:使用dex2jar与反编译器从APK提取Java源码 在Android应用开发与安全研究领域,反编译是一项基础且关键的技术,它允许开发者或研究人员将已编译的APK文件还原为可读的Java源代码。其核心原理在于解析Android特有的Dalvik Executable(.dex)字节码格式,并将其转换为标准的Java字节码(.class)文件。这项技术的价值不仅在于代码审计、安全漏洞排查和学习优秀应用架构,更是理解应用打包、混淆与加固机制的重要途径。通过工具链(如dex2jar配合JD-GUI或FernFlower)将.dex文件转换为.jar文件,再经反编译器 阅读详情

相关推荐

安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程

哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=1 Android 逆向工程师系统培训‹第九期›( 课程目录 ):https://ke.yijincc.com/course-21.htm 安卓逆向工程师:https://ke.yijincc.com/profession/1.htm 打造年轻人的...

墨鱼菜鸡 2792

Android APK反编译与重打包实战:从工具链到完整工作流

反编译技术是软件逆向工程的核心环节,其原理是将已编译的二进制代码或字节码,通过静态分析工具还原为可读性更高的中间表示或近似源代码。这项技术的价值在于帮助开发者理解程序逻辑、进行安全评估、学习优秀实现,以及恢复丢失的源码。在移动安全、软件分析和应用定制等场景中,反编译与重打包(回编译)结合,形成了从分析到修改验证的完整闭环。本文聚焦Android APK,深入解析以Apktool、JADX为核心的静态分析工具链,并详解如何通过修改smali代码实现功能定制,最终完成重打包与签名。针对代码混淆、签名校验等进阶挑

weixin_30247781的博客 354

APK逆向与手机取证实战:从“数证杯”赛题到移动安全分析

在移动安全与电子数据取证领域,理解应用内部逻辑与提取设备数据是两大核心技术支柱。APK逆向工程通过反编译、静态与动态分析,深入剖析Android应用的运行机制与核心算法,尤其擅长应对代码混淆与加密保护。手机取证则聚焦于从设备镜像或物理存储中系统性地提取、解析与关联各类数据,如数据库记录、日志文件和系统痕迹,以构建完整、可信的证据链。这两项技术的结合,在技术价值上实现了从“知其然”到“知其所以然”的跨越,不仅能用于破解赛题中的隐藏信息,更能直接应用于恶意软件分析、应用安全审计与司法取证等真实场景。本文以典型的

weixin_29323493的博客 923

Android知识点 002 —— Android.mk 文件 LOCAL_PROGUARD_ENABLE

在我们编译Android系统的user版本的时候,有时候会出现proguard的错误,在解决这个错误之着,我们需要了解一些知识: 1,proguard是用来干什么的? 简单点说,他就是用来做JAVA代码混淆的一个工具。 2,这个东西在哪里实现的?   我们一般会在Android.mk文件中对其进行支持,比如: 1)指定不需要混淆的native方法和变量的pro...

编程到管理、技术到产品 2905

避坑指南:Github Action打包Android APK时常见的5个问题及解决方案

本文深度解析GitHub Action打包Android APK时常见的5个典型问题及解决方案,包括环境配置、权限管理、依赖管理、构建过程和产物处理。针对编译和发布过程中的常见错误,提供实用的代码示例和优化建议,帮助开发者高效避坑,提升自动化构建流程的可靠性。

white的博客 408

【网络协议】TCP的拥塞控制机制

前言 计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。 所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的区别,拥塞控制是一个全局性的过程,涉及到所有的额主机、路由器,以及与降低网 拥塞控制的算法有:慢开始、拥塞避免、快重传、快恢复四种。 慢开始和拥塞避免 发送方维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞程度

兰亭风雨的专栏 1万+

Android系统源码代码混淆

前言 刚好有个项目需要提供apk给客户,所以需要对该apk进行代码混淆。在此将遇到的坑记录下来,避免后续再踩。 代码混淆 代码混淆主要是增加“不法分子“对apk进行反编译后,阅读代码的难度。代码混淆并不是所有的代码都可以混淆,有些代码则是不能混淆的,如一些反射应用。 开启混淆 这里记录遇到的第一个坑,在apk的Android.mk文件中,增加如下语句: LOCAL_PROGUARD_ENABLED...

u010456460的博客 1913

Ansys Lumerical | 薄膜铌酸锂电光调制器的仿真与优化

本文详细介绍了使用Ansys Lumerical进行薄膜铌酸锂电光调制器仿真与优化的全流程。从基础原理到电学仿真、光学模拟技巧,再到设计优化实战经验,帮助工程师掌握这一先进光电器件的仿真方法。重点解析了薄膜铌酸锂的Pockels效应和Mach-Zehnder结构设计,并提供了常见问题排查指南和最新发展动态。

vulkan6gpu的博客 1199

Android源码编译环境中混淆编译指定app

Android源码编译环境中混淆编译指定app

IT熊的专栏 1090

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2552

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法

全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法

ccjjjjdff的博客 1万+

Android编译优化之混淆配置

即在编译阶段将在语法层面一些底层字节码不支持的特性转换为基础的字节码结构,(比如 List 上的泛型脱糖后在字节码层面实际为 Object);Android 工具链对 Java8 语法特性脱糖的过程可谓丰富多彩,当然他们的最终目的是一致的:使新的语法可以在所有的设备上运行。

虎哥LoveDroid 4032

特征选择/筛选方法总结

作者:jliang https://blog.youkuaiyun.com/jliang3 1.特征选择介绍 1)特征分类 相关特征:对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果; 无关特征:对于我们的算法没有任何帮助,不会给算法的效果带来任何提升; 冗余特征:不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出; 2)特征选择的目的 对于一个特定的学习算法...

jliang3的博客 8万+

android代码混淆恢复,Android代码混淆

什么是代码混淆代码混淆就是将代码中的各种元素,如变量,方法,类和包的名字改写成无意义的名字,增加项目反编译后被读懂的难度。Android代码混淆使用ProGuard工具,ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。以下是官网对ProGuard的说明:ProGuard是一个对Java类文件进行压缩,优化,混淆和校验的工具。压缩过程查找并...

weixin_42415681的博客 696

中国农业银行——轻量式云原生应用平台(轻云平台)

2021年10月,中国人民银行等联合发布了《关于规范金融业开源技术应用与发展的意见》(银办发〔2021〕146 号),规范金融机构合理应用开源技术,提高应用水平和自主可控能力,促进开源技术健康可持续发展。前期,为助力成员单位做好开源技术应用与发展工作,北京金融科技产业联盟开源专委会组织了金融业开源技术应用、创新等方面的案例征集,现对部分优秀案例进行宣传,发挥先进典型示范引领作用。申报单位:中国农业银行股份有限公司技术领域:云原生、无服务器架构(Serverless)、DevOps。

银行信息系统应用架构详解 2394

拉曼光谱入门:10.显微拉曼与共聚焦技术

本文系统阐述了显微拉曼光谱技术与共聚焦原理的融合机制,详细解析了从激光激发、针孔空间滤波到光谱采集的完整光路架构,阐明了共聚焦设计在提升三维空间分辨率、抑制荧光背景及实现微区无损层析方面的核心优势,并探讨了关键光学器件的性能边界与系统技术局限。

qq_53529450的博客 168

obfuscapk对apk进行代码混淆

obfuscapk是一个对apk进行混淆的工具。代码混淆,Android,apk逆向,知识产权,ubuntu下进行Android逆向,docker使用

qq_52380836的博客 1698

2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)

2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)

王老师青少年编程 992

android 混淆工具下载,Obfuscapk:一款针对Android应用程序的黑盒混淆工具

Obfuscapk是一款模块化的Python工具,它可以帮助研究人员在无需应用程序源代码的情况下对Android App进行混淆处理。Obfuscapk使用了apktool来对原始APK文件进行反编译,并构建出一个新的应用程序,最后再对反编译的smali代码、资源文件和Manifest文件应用混淆处理技术。混淆后的应用回保留原有的函数功能,但不同之处就在于,混淆后的应用源码会跟初始的应用源码有很大...

weixin_32537985的博客 1164

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Unity3D】导出Android项目以及Java混淆

只有上面的这种成功信息,不要只看CONFIGURE SUCCESSFUl,而是其他相关的警告也没有才正常,正常后就能看到Build Apk,否则是无法看到的。利用镜像地址加速下载gradle-6.7.1-all gradle压缩包,下载到C:\Users\用户名\.gradle\wrapper\dists下。可通过观察这些文件后缀版本名看自己的对应多少版本或网上查询,这些版本不对应上就会出很多编译问题,即使你是空工程!gradle plugin 4.2.0版本对应gradle 6.7.1版本。

两水先木示的博客 1396

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[RK3288][Android6.0] Ubuntu下反编译apk得到源码和xml文件

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: 需要了解RK的OTA机制,但sdk只提供了apk 因此需要反编译解包,要注意的是,如果apk在编译的时候经过了代码混淆,那么反编译出来的是乱码而无法查看的。 工具: apktool: 反编译后可以查看res下的资源和布局文件,以及apk的AndroidManife...

Kris Fei's blog 1171

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TLint项目完整部署指南:从代码编译到APK打包发布全流程

想要快速掌握**TLint项目**的完整部署流程吗?这篇终极指南将带你从零开始,一步步完成这个基于Dagger2+RxJava+Retrofit开发的虎扑体育客户端应用的编译、打包和发布全过程。无论你是Android开发新手还是经验丰富的开发者,都能通过本教程轻松上手!🚀 ## 项目概述与环境准备 **TLint项目**是一个功能完整的虎扑体育客户端应用,采用现代化的Android开发技术栈

gitblog_01189的博客 760

APK反编译与修改实战:从工具链到会员验证逻辑分析

在移动应用开发与安全领域,逆向工程是一项基础且重要的技术,它涉及将已编译的二进制应用(如APK)还原为可读代码,以分析其内部逻辑与实现原理。这一过程通常借助反编译工具链实现,例如Apktool用于解码资源与生成Smali汇编代码,而JADX则能将DEX文件转换为近似Java源码,极大提升代码可读性。从技术价值看,掌握逆向工程不仅有助于开发者加固自身应用、理解潜在漏洞,还能为安全研究人员提供分析应用行为的手段。在实际应用场景中,常需定位并修改关键验证逻辑,例如会员权限检查。通过分析典型验证模式(如本地标志位、

weixin_30363981的博客 381

APK反编译工具链全解析:从基础拆解到动态调试的完整实践指南

在移动应用安全分析和开发学习领域,APK反编译是一项基础且关键的技术。其核心原理是通过逆向工程手段,将Android应用安装包(APK)中的编译后字节码和资源文件,还原为可读的源代码与资源,以理解应用内部逻辑、排查问题或进行安全评估。这项技术的价值在于,它使开发者能够学习优秀实现、分析第三方库,并帮助安全研究人员识别潜在漏洞。典型的应用场景包括竞品技术调研、恶意软件分析和遗留代码维护。本文聚焦于构建一套高效的APK反编译工作流,详细解析以Apktool和jadx为核心的静态分析工具链,并结合Frida等动态

weixin_26804345的博客 262

Kivy开发者私藏技巧:高效打包APK的6种优化策略(附脚本)

掌握Kivy跨平台APP打包成APK的高效优化策略,解决编译慢、包体大难题。涵盖构建配置、资源压缩、架构适配等6种实战技巧,附自动化脚本提升发布效率。开发必备,值得收藏

PoliSeed的博客 1191

Android逆向之dex2jar+jd-gui反编译apk(二十一)

本篇目的:Android逆向之dex2jar+jd-gui反编译apkdex2jar 是一款开源的 Android 反编译工具套装,核心作用是把 APK 中提取的 classes.dex 文件转换成传统 Java 工程师熟悉的 .jar 格式。转换后,开发者即可使用 JD-GUI、FernFlower 等 Java 反编译器直接阅读近似源码的 Java 语法,从而进行漏洞审计、竞品分析、学习研究或错误定位。项目由 pxb1988 维护,托管在 GitHub,采用 Apache 2.0 协议,完全免费。

Android系统攻城狮 1832
上一篇: Android编译小结
fire_up
博客等级 码龄26年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值