Android APK之代码混淆与反编译

代码混淆—android被反编译的两种解决方案 最近在做一些android的项目,对apk文件能够被反编译这一情况有点头大,就花了点时间,研究了下关于apk被反编译的一些解决方法。        Java的字节码一般是非常容易反编译的,而android采用java编写,生成的apk安装文件实际上就是一个压缩格式,后缀改为.zip,解压缩,再借用其他工具就能被反编译出来,目前android程序所谓的去广告版、汉化版都是通过反编译修改源码 阅读详情


首先示例一个Android项目 , 里面包含所需要的混淆脚本以及 一些经常使用的第三方Jar包


问题1 : 如果你创建的项目里没有自带proguard.cfg这个混淆脚本,那么说明你的SDK 小于2.3 或者 你的SDK信息不完整

解决的办法:

1) 更新SDK版本

2)在你的项目里自己建一个proguard.cfg脚本,当然你的proguard.cfg脚本里需要依据你的项目的不同情况制定一些混淆规则

(将在问题3详情描述, 如果你对Eclipse 混淆编辑项目的流程熟悉,请直接跳过)


问题2: 利用Eclipse编译混淆项目


0)project.properties里增加

proguard.config=proguard.cfg

1) 右键项目 -> Android Tools -> Export Signed Application Package -> 选择你要导出.apk的位置 

2) 接下来操作如图:

   

点击next  填写相关的具体信息


点击next 选择你要导出.apk的位置

Finish

问题3: proguard.cfg脚本的语法规则,我贴出一些代码并添加一些注释

#设置混淆的压缩比率 0 ~ 7 
-optimizationpasses 5

-dontusemixedcaseclassnames
#如果应用程序引入的有jar包,并且想混淆jar包里面的class 
-dontskipnonpubliclibraryclasses
#混淆后生产映射文件 map 类名->转化后类名的映射
-dontpreverify
-verbose
# 代码优化
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keepattributes *Annotation*
# 过滤泛型
-keepattributes Signature

# 添加第三方jar包
-libraryjars libs/android-support-v4.jar 

# 以下类过滤不混淆
-keep public class * extends android.app.Fragment  
-keep public class * extends com.umeng.**  

# 以下包 不进行过滤
-keep class com.android.vending.licensing.ILicensingService
-keep class android.support.v4.** { *; }  
-keep class org.apache.commons.net.** { *; }  
-keep class com.tencent.** { *; }  

-keep class com.umeng.** { *; }  
-keep class com.ishow.funnymap.bean.** { *; }  
# 以下包 忽略警告信息
#于 2013 4 26修改
#如非确定第三包不会被外部调用,包括其中的类被继承等等
#可以用以下语句忽略警告
#如果 编译打包输出成功后,却不能正确的运行或者安装
#请取消 忽略警告 重新打包 一般都会输出错误的console信息
-dontwarn android.support.v4.**  
-dontwarn org.apache.commons.net.** 
-dontwarn com.tencent.**  
-dontwarn com.umeng.**  

#保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
-keepclasseswithmembernames class * {
#所有native的方法不能去混淆. 
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context);
}

#保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
-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 *;
}

总结: 

然后按照 1 -> 3 -> 2 这样的步骤 , 一般你可以成功编译出.apk文件,但是可能launch时候会报形形色色的错误,基本都是混淆时一些变量或方法丢失的问题! 

我贴出的遇到的几个问题,以及解决方案:

错误信息1:

Caused by: java.lang.IllegalStateException: Could not find constructor that hast just a (Context) argument for helper class class com.ishow.funnymap.database.DatabaseHelper

错误描述: 混淆时清除掉指定的构造器 <init> (Context context) , 该问题发生在 非显示的调用构造函数的时候

我的解决方案: 保护<init>(Context context) 不被混淆

-keepclasseswithmembers class * {
    public <init>(android.content.Context);
}

错误信息2:

Log忘记保存了- - ,大概是无法找到指定表的列名

解决方案: 该bean类不被混淆

-keep class com.ishow.funnymap.bean.** { *; }  

#于 2013 4 26修改
#如非确定第三包不会被外部调用,包括其中的类被继承等等
#可以用以下语句忽略警告
#如果 编译打包输出成功后,却不能正确的运行或者安装
#请取消 忽略警告 重新打包 一般都会输出错误的console信息

#-dontwarn com.umeng.**


============================分割线===================================

混淆成功后, 反编译一下看下效果 ,顺带贴出简单的反编译方法:

下载 dex2jar.bat 按步骤执行:


一、更改apk文件的后缀名,如:LianyunHelper3.0.11.apk改成LianyunHelper3.0.11.zip 
二、用zip解压缩LianyunHelper3.0.11.zip文件 
三、从解压缩的文件夹中取出classes.dex文件并放到dex2jar.bat所在目录 
四、运行cmd命令,进入dex2jar.bat所在的目录,输入dex2jar.bat classes.dex即可生成classes.dex.dex2jar.jar文件 
五、用JD-GUI工具打开classes.dex.dex2jar.jar文件,即可看到源码 
六、将AndroidManifest.xml文件放到AXMLPrinter2.jar所在目录,运行cmd命令,进入AXMLPrinter2.jar所在目录,输入java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt。


然后使用jd-gui 工具查看jar 代码


dex2jar.bat 下载地址     jd-gui 工具下载地址  


Android代码混淆及反编译apk 序言: 经常听开发提起代码混淆引起的BUG,混淆后在测试一下有没有问题,那问题来了什么是代码混淆,怎么确认代码混淆成功了,带着问题读下文吧~~ 一、代码混淆的原理 代码混淆是将程序中的代码,等价转换为难以阅读理解的行为,提高攻击者阅读理解代码的难度,提高安全性,可以有效的提高应用被逆向破解的难度 二、代码混淆的方法 1.字符串加密:对应用程序中使用的字符串进行加密,防止获取关键词定位核心业务代码 2.类名、方法名混淆:讲代码中类名,方法名,属性名替换成无意义的符号,增加代码逆向难度,这种方式也是在jav 阅读详情

相关推荐

众灵科技24路舵机控制器二次开发实战(1)-STM32串口指令控制详解

本文详细介绍了如何通过STM32单片机对众灵科技24路舵机控制器进行二次开发,实现串口指令控制。文章从硬件连接、通信协议解析到STM32代码实战,手把手指导开发者打通控制链路,并重点讲解了如何调用预设动作组驱动六足机器人,为后续集成传感器、无线遥控等高级功能奠定基础。

weixin_29188997的博客 484

Android App代码混淆及混淆规则 (Progurad)

Android App代码混淆终极解决方案- https://blog.youkuaiyun.com/w690333243/article/details/76068244 Android混淆- https://www.jianshu.com/p/b5b2a5dfaaf4 /**  * 需要keep住的类请implement或extends这个interface  */ public interface K...

ShareUs的专栏 1317

ESP32驱动TFT屏幕实战:LVGL与TFT_eSPI完美结合

本文详细介绍了如何在ESP32上结合TFT_eSPI驱动库与LVGL图形库,实现高效、流畅的嵌入式GUI开发。内容涵盖硬件连接、软件环境搭建、库配置、LVGL移植、界面创建及性能优化等全流程实战指南,帮助开发者快速构建低成本、高性能的交互式显示应用。

weixin_29206669的博客 200

破解混淆加固的apk

最近研究了下 app逆向安全,感觉客户端还是不安全,android和ios都可以破解,重要的东西还是放服务器,因为服务器相对安全一些。本文只供爱好研究以及安全测试用,如果用于非法,后果自负。 ios的破解我没试过,但是提供一篇文章: https://www.cnblogs.com/xin-lang/p/8098142.html android的破解,我也只讲思路,不提供工具,感谢各位破解大...

BingHongChaZuoAn的专栏 4615

博科的SAN交换机基本操作

2、添加用户testuser赋予user权限可以访问1-128VF默认VF为128账号描述"Test user"密码为password123。1、创建zone别名(100是指当前设备Domain ID,1和2是指对应的index号)2,删除新接入设备的ZONE或保持ZONE配置一致。3、将zone添加到当前生效的CFG中。2、将zone添加到当前生效的CFG中。3、将zone添加到当前生效的CFG中。3,将添加的级联端口持续关闭。4、将当前zone生效。4、将当前zone生效。1、查看当前所有用户。

chenjunokok的博客 1838

Ubuntu 24.04 下 NoMachine 极速安装与远程桌面配置全攻略

本文详细介绍了在Ubuntu 24.04系统下安装和配置NoMachine远程桌面的完整指南。从系统准备、分步安装到性能调优和常见问题解决,帮助用户快速实现低延迟的远程桌面访问。特别适合开发者和IT管理员在Linux环境下高效部署远程工作环境。

moon9的博客 945

Android 逆向工程之APK混淆处理方案分析

提供apk给到外部,外部对apk进行二次处理后重新给我们一个新apk。尝试分析源apk文件和处理后的apk文件区别,根据其中区别推测外部的混淆处理方案,尽可能还原外部对apk的处理方式。以下对处理和未处理的apk文件用新、旧apk名称表示。通过反编译工具分析可以得出外部处理的新 app 操作主要是对 dex 文件增加了垃圾代码提高主包的相似度,避免被Google识别,然后进行了混淆处理。处理 dex 利用 BlackObfuscator-GUI 等工具处理后对 apk。

qq_38794072的博客 3749

国科大 雁栖湖校区 研一上 课程避坑与生存指南

本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。

weixin_29304985的博客 302

谷歌提审核包警告处理

如果你在进行提审核包上传的时候。提示: 警告 沒有與這個App Bundle相關聯的去模糊化檔案。如果您使用模糊化的程式碼 (R8/proguard),上傳去模糊化檔案可讓當機和 ANR 情形的分析及偵錯工作更加輕鬆。使用 R8/proguard 有助於縮減應用程式大小。瞭解詳情 警告 這個 App Bundle 含有原生程式碼,而您尚未上傳偵錯符號檔。為了方便系統分析您的當機和 ANR 問題並進行偵錯,建議您上傳符號檔。瞭解詳情可采取以下解决方案修复警告、 警告 沒有與這個App Bundle相關聯的去

weixin_44161102的博客 842

SAP PP CSAP_MAT_BOM_MAINTAIN ECN 增加组件

SAP PP CSAP_MAT_BOM_MAINTAIN ECN 增加组件。

GAVIN 410

Ego Planner规划算法(上)——Ego Planner流程介绍

本系列文章用于学习记录Ego-Planner规划算法的相关内容,本系列文章是在在Fast Planner规划算法系列文章的基础上,展开对Ego Planner的相关介绍,主要包括Ego Planner算法流程和程序框架两部分,主要学习资料是深蓝学院的移动机器人运动规划课程

慕羽★的博客 1万+

Android apk反编译及AS代码混淆方法

Android反编译及代码混淆方法

原氢的专栏 4504

有道龙虾LobsterAI vs. OpenClaw:对比与安装部署攻略

LobsterAI是"中国版OpenClaw",更注重易用性和中文场景适配;OpenClaw是技术极客的玩具,需要大量命令行操作。

lpfasd123的博客 2397

AhMyth混淆技术:Android RAT的APK反编译保护与代码混淆全指南

AhMyth作为一款跨平台Android远程管理工具(RAT),其混淆技术是保护核心功能不被轻易逆向工程的关键。本文将深入解析AhMyth如何通过ProGuard规则配置、Smali代码转换等技术手段,构建完整的APK反编译防护体系,帮助开发者理解移动安全领域的代码保护实践。 [![AhMyth Android RAT 混淆技术](https://raw.gitcode.com/GitHub_T

gitblog_02060的博客 514

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

实现android apk反编译后代码混淆

通常情况下我们需要对我们开发的android代码进行混淆,以免代码在反编译时暴露敏感信息及相关技术代码; 反编译测试工具:onekey-decompile-apk-1.0.1。 在高级版本的adt创建完都会有project.properties文件;开启混淆的话,需要在文件中这样做如图: 注意:混淆代码的生效时刻是在:apk签名之后。 然后在用onekey-decompile-ap...

weixin_30713953的博客 138

温度PID控制PLC程序

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

Android知识整理(5) apk反编译与代码混淆

早上与兄弟聊天,谈到他现在公司的android产品,心血来潮,反编了一下,之前接触反编的时候就发现网上很多资料写的非常混乱,正好趁着今天整理一下,保存备用。 APK反编译-------------------------------------------------------------------------------------------------------------...

211

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

apk反编译与android项目代码混淆

apk反编译与android项目代码混淆 APK反编译     1、将APK解压出来,会有一个 classes.dex 文件   2、得到了 clases.dex 文件,将其 还原成 .jar 包,这一步需要用到一个工具 --dex2jar(谷歌的代码库里有 http://code.google.com/p/dex2jar/)将其下载下来...

weixin_30399821的博客 119

Android代码混淆防止反编译APK获取源码

上一篇说了如何反编译APK文件获取Android源代码,但是如果所有的

记录技术,记录生活 2296

android APK反编译及代码混淆

反编译、查看源代码,需要用到两个工具:dex2jar 和 jdgui dex2jar(google code) jdgui(google code),最新版本请见官方 操作很简单,步骤如下: 1.将APK(如GuessStock.apk)拷到dex2jar目录下,cmd下执行: C:\Users\raozf\Desktop\dex2jar-0.0.9.15>d2j...

CX1859的博客 296

Android APK反编译以及代码混淆

一,反编译 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看。下面是我参考了一些文章后简单的教程详解。 (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,

u010524035的博客 837

Android APK安全: 代码混淆且加壳防止反编译

最近学习了下APK安全防止反编译,目前还只初步阶段。以下是经过实践,现在做一下简要实践步骤总结。 用到工具 Android Studio jd-gui-0.3.5.windows dex2jar-0.0.9.15 apktool IDAProv6.8 C32Asm DexFixer Windowssigntool.zip 2、添加花指令 添加花指令:在Android项目添加一个永不能执行到clas

oscarli的博客 3054

android studio防止反编译,防反编译利器-Android studio混淆代码压缩apk包体积

前言打包混淆对初学者小冷来说是很抗拒的,刚开始我只是知道在build.gradle文件 minifyEnabled下设置为true,可是proguard-rules.pro文件里面什么都没有,就这样签名打包了,结果必然是打包不成功的。后来又在网上粘了一堆proguard-rules.pro文件,结果还是打包失败,陆陆续续的经过了很长一段时间,这个问题就被我搁置了,以致于apk包一直处于“裸奔”状态...

weixin_39915700的博客 442

Android在mac osx下混淆打包和反编译

android在mac上的混淆打包和反编译

For Marie Curie 7439

Android~apk的混淆和加固

ProGuard介绍 ProGuard是混淆代码的开源项目,主要作用是混淆代码还能对字节码缩减体积、优化等。混淆前我们需要知道哪些东西不能混淆,参考如下,当然大佬们已经给我提供proguard-rules.pro的模板。 使用了自定义控件那么要保证它们不参与混淆 使用了枚举要保证枚举不被混淆 对第三方库中的类不进行混淆 运用了反射的类也不进行混淆 使用了 Gson 之类的工具要使 JavaBean 类即实体类不被混淆 在引用第三方库的时候,一般会标明库的混淆规则的,建议在使用的时候就把混淆规则添加上去,

Hynson的学习笔记 3881

Android Apk的反编译与代码混淆

一、反编译 1.获取工具:  既然是反编译,肯定要用到一些相关的工具,工具可以到这里下载,里面包含三个文件夹,用于反编译,查看反编译之后的代码;  其实这两工具都是google官方出的,也可在google code上下载 dex2jar,apktool; 2-1.反编译获取Java源代码:  将要反编译的apk文件后缀改为zip并解压,得到classes.dex,它就是java文件编译再通过d...

weixin_34242819的博客 142
上一篇: Android小技巧/获取图片的大小
下一篇: Android/Socket编程 简单C/S模式
多格AI零代码
博客等级 码龄15年 40粉丝 73原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值