详细介绍:开源 java android app 开发(十七)封库--混淆源码

news/2025/10/1 15:09:39/文章来源:https://www.cnblogs.com/tlnshuju/p/19122452

详细介绍:开源 java android app 开发(十七)封库--混淆源码

2025-10-01 15:05  tlnshuju  阅读(0)  评论(0)    收藏  举报

 文章的目的为了记录使用java 进行android app 开发学习的经历。本职为嵌入式软件开发,公司安排开发app,临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。

   相关链接:

开源 java android app 开发(一)开发环境的搭建-CSDN博客

开源 java android app 开发(二)工程文件结构-CSDN博客

开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客

开源 java android app 开发(四)GUI界面重要组件-CSDN博客

开源 java android app 开发(五)文件和数据库存储-CSDN博客

开源 java android app 开发(六)多媒体使用-CSDN博客

开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客

开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客

开源 java android app 开发(九)后台之线程和服务-CSDN博客

开源 java android app 开发(十)广播机制-CSDN博客

开源 java android app 开发(十一)调试、发布-CSDN博客

开源 java android app 开发(十二)封库.aar-CSDN博客

开源 java android app 开发(十三)自定义绘图控件--游戏摇杆

开源 java android app 开发(十四)自定义绘图控件--波形图

开源 java android app 开发(十五)自定义绘图控件--仪表盘

开源 java android app 开发(十六)自定义绘图控件--圆环

推荐链接:

开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客

开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客

开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客

开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-CSDN博客

开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客

本章节主要内容是:前面有讲过怎么封库为aar,但是在应用中发现,aar封装以后在点击调用的函数定义,实际可以看到封库的源码,对于代码的保护太不友好。这里主要介绍,如何讲代码封为aar以后,怎么进行混淆,防止代码被反向破解。

1.aar封装库的解析效果

2.aar封装库混淆的办法

3.aar混淆的效果演示

一、aar封装库的解析效果

如果参照十二章封库很容易得到以下的效果,在Mainactiviy.java可以使用mylib-debug.aar这个库的

DataProcessor类。

但是当使用鼠标点击类以后,android studio 会将整个类显示出来,想要的类加密混淆的效果并没有出现

二、aar封装库混淆的办法

造成封装库mylib-debug.aar没有混淆成功的原因是,在应用项目中引用的不是Release AAR。

要生成Release AAR需要有几个地方的修改。

1.检查 Library 模块的 build.gradle
确认您的 mylibrary/build.gradle 文件配置:

检查 Library 模块的 build.gradle
确认您的 mylibrary/build.gradle 文件配置:

apply plugin: 'com.android.library'
android {
    compileSdkVersion 28 // 或者 29,确保与您的环境匹配
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 28
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // 添加这些配置
            crunchPngs false
            shrinkResources false
        }
    }
    // 添加编译选项
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

2.简化混淆规则
暂时使用一个非常简单的 proguard-rules.pro 来测试:

# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
# 基本保留规则
-keepattributes Exceptions, InnerClasses, Signature, Deprecated, SourceFile, LineNumberTable
# 保留所有公共类和方法(测试阶段)
-keep public class * {public protected *;
}
# 忽略所有警告
-ignorewarnings
-dontwarn **

3.点击右边栏上的Gradle->mylib->other->assembleRelease,assembleRelease需要双击或右键执行

最后生成mylib-release.aar,将生成的mylib-release.aar替换mylib-debug.aar

三、aar混淆的效果演示

再次使用鼠标点击DataProcessor类以后,DataProcessor中除了public函数,其余的private都进行了处理,混淆了源码,实现了加密的目的

DataProcessor中所有的私有变量和函数已经被替换掉

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.example.mylib;
public class DataProcessor {public static final byte[] a = new byte[]{1, 22, 116, 37, 54, -107, 51, -95, 119, -126, 34, 51, 68, 85, 0, 0, 0, 7, 0, -97, 0, 0};public static final byte[] b = new byte[22];public static final byte[] c = new byte[]{-112, -27, 75, 29, 125, 58, -23, -52, 97, -98, 92, -19};public static final byte[] d = new byte[]{120, -7, -28, 71, -22, -84, -47, -97, 84, 52, -39, -69, -103, 9, 37, -52, 60, -3, 114, -92, -11, 86};public static final byte[] e = new byte[]{79, -50, 97, -20, 99, 35, -111, 45, -16, -15, -56, -114, -45, 88, -94, 62, -88, 103, -79, 118, 50, 18};public static final byte[] f = new byte[]{90, -33, -30, -112, 28, -90, -80, 67, 124, 79, -50, 97, -20, 99, 35, -111, 45, -16, -15, -56, -114, -45};public DataProcessor() {}public byte[] generateProcessedData(byte[] var1, byte var2, byte[] var3) {if (var1 != null && var1.length == 4) {if (var3 != null && var3.length == 5) {byte[] var10000 = a;byte[] var6 = b;int var4 = var10000.length;System.arraycopy(var10000, 0, var6, 0, var4);int var7;for(var7 = 0; var7 < 4; ++var7) {b[var7 + 2] = var1[var7];}var10000 = b;var10000[8] = var2;var10000[9] = 35;var10000 = var6 = new byte[4];var10000[0] = 18;var10000[1] = 52;var10000[2] = 86;var10000[3] = 120;int var8;for(var8 = 0; var8 < 4; ++var8) {b[var8 + 10] = var6[var8];}for(var7 = 0; var7 < 5; ++var7) {byte var9 = var3[var7];if (var7 >= 0 && var7 <= 4) {b[var7 + 14] = var9;}}b[19] = 0;for(var7 = 0; var7 < 11; ++var7) {var10000 = var1 = b;var10000[19] += var1[var7 + 8];}byte[] var10;for(var7 = 0; var7 < (var1 = c).length; ++var7) {(var10 = b)[var7 + 8] = (byte)(var10[var7 + 8] ^ var1[var7]);}var10000 = var6 = new byte[17];System.arraycopy(b, 1, var6, 0, 5);System.arraycopy(b, 8, var6, 5, 12);var8 = 0;int var11 = var10000.length;int var12;for(var12 = 65535; var8 < var11; ++var8) {var12 ^= var6[var8] & 255;for(var4 = 0; var4 < 8; ++var4) {if ((var12 & 1) != 0) {var12 = var12 >> 1 ^ 'ꀁ';} else {var12 >>= 1;}}}var7 = var12 & '\uffff';var10000 = var1 = b;var1[20] = (byte)(var7 >> 8);var10000[21] = (byte)(var7 & 255);for(var7 = 0; var7 < var1.length; ++var7) {var10 = b;byte var13 = var1[var7];byte var14 = 0;for(int var5 = 0; var5 < 8; ++var5) {var14 = (byte)(var14 << 1 | var13 & 1);var13 = (byte)(var13 >> 1);}var10[var7] = var14;}switch(37) {case 37:var6 = d;break;case 38:var6 = e;break;case 39:var6 = f;break;default:return (byte[])b.clone();}for(var8 = 0; var8 < var6.length; ++var8) {var10000 = b;var10000[var8] ^= var6[var8];}return (byte[])b.clone();} else {throw new IllegalArgumentException("数据字段必须为5字节");}} else {throw new IllegalArgumentException("地址数据必须为4字节");}}public boolean validateReceivedData(byte[] var1) {if (var1 != null && var1.length == 14) {if (var1[2] == -96 && var1[3] == 35) {byte var3 = 0;for(int var2 = 2; var2 < 13; ++var2) {var3 += var1[var2];}return var3 == var1[13];} else {return false;}} else {return false;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Meta基础设施演进与AI技术革命

本文详细介绍了Meta从传统社交网络基础设施向AI驱动架构的演进历程,涵盖分布式系统构建、GPU集群扩展、自研芯片开发、散热解决方案等关键技术挑战与创新突破。Meta基础设施演进与AI时代 在过去的21年里,Meta从连接美…

完整教程:Spring AI整合聊天模型DeepSeek

完整教程:Spring AI整合聊天模型DeepSeekpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

2025 年焚烧炉厂家 TOP 企业品牌推荐排行榜!权威甄选实力与口碑俱佳的江苏焚烧炉 / 无锡焚烧炉推荐这十家公司!

随着工业领域的快速发展,危险废物、工业废弃物的产生量持续增加,焚烧炉作为实现废弃物减量化、无害化处理的关键设备,其市场需求不断攀升。但当前焚烧炉行业面临诸多问题,部分厂家缺乏核心技术,设备排放难以达到环…

2025 年防腐涂料厂家 TOP 企业品牌推荐排行榜,乙烯基、环氧煤沥青、环氧防腐涂料、防腐涂料地坪 、防腐涂料水池推荐这十家公司!

在当前工业生产、建筑工程、石油化工等众多领域,防腐涂料扮演着至关重要的角色,它能有效延长设施设备的使用寿命,降低维护成本。然而,如今防腐涂料行业市场鱼龙混杂,产品质量参差不齐,不同品牌的技术水平、产品性…

Mysql DBA学习笔记(主从复制) - 实践

Mysql DBA学习笔记(主从复制) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

网站中文章内图片做超链接wordpress微信登录页面模板

日志只有这一行&#xff0c;比较难排查 排查途径&#xff1a; 1、从上图找到唯一的文件输出output.js&#xff0c;断点查看堆栈信息&#xff0c;如下图&#xff0c;可以看到这个错误是由于哪个文件引起的 以为从App.vue中定位到原因了&#xff0c;其实也不对&#xff0c;继续…

百度注册网站网站字体大小合适

文章目录 Redis主从部署1.下载安装Redis2.单点双副本主从配置1.修改配置信息2.修改配置文件redis.conf3.拷贝配置文件到每一个实例文件夹里4.修改每一个实例的端口和工作目录5.配置主从关系6.检查效果 3.哨兵模式监控主从1.创建实例目录2.复制配置文件并进行修改3.启动并测试 4…

2025双氧水厂家权威推荐榜:优质供应与专业定制实力之选

2025双氧水厂家权威推荐榜:优质供应与专业定制实力之选 在当今精细化工与工业制造领域,双氧水作为重要的基础化学品,其品质稳定性和供应专业性直接影响着下游产业的生产效率与产品质量。随着环保要求的日益严格和应…

Win环境下包管理工具

目录1 Win下包管理工具1.1 简介1.2 winget1.2.1 简介1.2.2 操作使用1.2.3 安装指定盘1.2.4 软件源来源&加速1.2.4.1 软件源1.2.4.2 加速1.3 Scoop1.3.1 简介1.3.2 操作&安装1.3.3 常用命令1.3.4 软件源来源&am…

那个公司做网站制作图

基站即公用移动通信基站&#xff0c;是无线电台站的一种形式&#xff0c;是指在一定的无线电覆盖区中&#xff0c;通过移动通信交换中心&#xff0c;与移动电话终端之间进行信息传递的无线电收发信电台。 目前&#xff0c;在 5G时代 &#xff0c;“ 宏基站 为主&#xff0c; 小…

VRNN论文总结 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

西安市做网站公司网站设计的内容有哪些

一、项目介绍 系统管理员的功能概述&#xff1a; ①用户管理 a.注册用户账户 当一个新用户注册时&#xff0c;用户填写基本信息并上传。用户基本信息包括账号、 姓名、密码、手机、地址等信息。 b.用户信息管理 管理员可以查看系统所有用户的基本信息&#xff0c;并修改和…

清华建设工程有限公司公司网站wordpress the date

服务器和电脑传文件夹吗 内容精选换一换Model File:模型文件。单击右侧的文件夹图标&#xff0c;在后台服务器sample所在路径(工程目录/run/out/test_data/resnet-18/model)选择需要转化的模型对应的*.prototxt文件&#xff0c;并上传。Weight File:权重文件。请自行从https://…

网页标准化对网站开发维护的好处文化网站建设需要的功能

优美的应用体验 来自于细节的处理&#xff0c;更源自于码农的自我要求与努力&#xff0c;当然也需要码农年轻灵活的思维。本文章实现的Demo效果&#xff0c;如下图所示&#xff1a;class HeroHomePage extends StatefulWidget { override _TestPageState createState() > …

深入解析:Social-Auto-Upload - 多平台社交媒体视频自动化上传工具

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MX Round 11 解题报告

MX Round 11 解题报告 T1 水题,直接枚举计算即可。 T2 场切了,很爽!!! 因为操作是可以被覆盖的,所以考虑倒序考虑操作:一个位置一旦有了数,就再也不会变了。 然后我们考虑:有数的位置一定是一段连续的区间。这…

用 C# 打造企业资产管理系统雏形——从控制台到完整模块设计 - 详解

用 C# 打造企业资产管理系统雏形——从控制台到完整模块设计 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

青岛网站设计流程做网站的说3年3年包括什么

大家好&#xff0c;我是 &#x1f41f;&#x1f4a8;。前天&#xff0c;星球 的一位大学生朋友问了我几个问题&#xff1a;你大学时如何安排每日的时间&#xff1f;为什么能学那么多技术&#xff1f;你会学习到很晚吗&#xff1f;你是如何保持自律的&#xff1f;我觉得这几个问…

html5 网站设计网站模板 山

申请该结构体数组&#xff0c;容量为5&#xff0c;初始化5个学生的信息 使用fprintf将数组中的5个学生信息&#xff0c;保存到文件中去 下一次程序运行的时候&#xff0c;使用fscanf&#xff0c;将文件中的5个学生信息&#xff0c;写入(加载)到数组中去&#xff0c;并直接输出学…

java开发之微信机器人的二次开发

java开发之微信机器人的二次开发个微API服务能处理用户微信中的各种事件,并辅助微信执行各种操作,提供了开发者与个人号对接的能力,是一款基于微信提供的个人号开放性API,使用简单,操作快捷,支持多种微信方式接入…