Android StringFog 字符串自动加密

news2025/1/9 1:33:35

一、StringFog 作用

一款自动对dex/aar/jar文件中的字符串进行加密Android插件工具,正如名字所言,给字符串加上一层雾霭,使人难以窥视其真面目。可以用于增加反编译难度,防止字符串代码重复。

  • 支持java/kotlin。
  • 支持app打包生成的apk加密。
  • 支持aar和jar等库文件加密。
  • 支持加解密算法的自主扩展。
  • 支持配置可选代码加密。
  • 完全Gradle自动化集成。
  • 不支持InstantRun

github地址:GitHub - MegatronKing/StringFog: 一款自动对字节码中的字符串进行加密Android插件工具

二、效果

加密前:ToastUtils.showShort("Copied to clipboard")

加密后: ToastUtils.iIi1(IL.IL1Iii("njfbY/eJG2iyeMhm+51Zc7wqzw==\n", "3VirCpLtOxw=\n"), new Object[0]);

由于我还加了字典混淆,所以方法名这些也变了。但是字典混淆并不会替换字符串,所以又加了字符串加密,可以看到,反编译(jadx)后的代码,区别大的不行!

tips:

StringFog和混淆完全不冲突,也不需要配置反混淆,实际上StringFog配上混淆效果会更好!

三、实现过程

其实就是普通三方依赖接入的过程,个人在此做个总结,方便以后接入。

tips:官方已经有5.0.1版本了,但是有同事反馈有概率会有问题,所以还是用的4.0.1版本

1.项目/根目录的build.gradle 添加依赖

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        ...
        classpath 'com.github.megatronking.stringfog:gradle-plugin:4.0.1'
        // 选用加解密算法库,默认实现了xor算法,也可以使用自己的加解密库。
        classpath 'com.github.megatronking.stringfog:xor:4.0.1'
    }
}

2.在app或者你要使用的lib的build.gradle文件下配置

apply plugin: 'stringfog'

// 导入RandomKeyGenerator类,如果使用HardCodeKeyGenerator,更换下类名
import com.github.megatronking.stringfog.plugin.kg.RandomKeyGenerator
import com.github.megatronking.stringfog.plugin.StringFogMode

stringfog {
    // 必要:加解密库的实现类路径,需和上面配置的加解密算法库一致。
    implementation 'com.github.megatronking.stringfog.xor.StringFogImpl'
    // 可选:StringFog会自动尝试获取packageName,如果遇到获取失败的情况,可以显式地指定。
    packageName 'com.github.megatronking.stringfog.app'
    // 可选:加密开关,默认开启。
    enable true
    // 可选:指定需加密的代码包路径,可配置多个,未指定将默认全部加密。
    fogPackages = ['com.xxx.xxx']
    // 可选(3.0版本新增):指定密钥生成器,默认使用长度8的随机密钥(每个字符串均有不同随机密钥),
    // 也可以指定一个固定的密钥:HardCodeKeyGenerator("This is a key")
    kg new RandomKeyGenerator()
    // 可选(4.0版本新增):用于控制字符串加密后在字节码中的存在形式, 默认为base64,
    // 也可以使用text或者bytes
    mode StringFogMode.base64
}

我的配置是:

粘贴个图片,因为部分同事在接入的时候,不清楚这个东西该放哪儿。

3、在app或lib的build.gradle中引入加解密库依赖。

dependencies {
      ...
      // 这里要和上面选用的加解密算法库一致,用于运行时解密。
    implementation 'com.github.megatronking.stringfog:xor:4.0.1'
}

4.注意事项

从AGP 8.0开始,默认不生成BuildConfig,但是StringFog依赖此配置,请注意加上下面的配置。

android {
    // 注意请加上此配置
    buildFeatures {
        buildConfig = true
    }
    ...
}

同步项目的时候,记得去依赖库列表看库拉下来没得。不然你的第二步的stringfog配置会爆红,然后第二步的配置,部分是可选的配置,可以自己酌情删掉,此外,同步,rebuild的时候,多注意报错信息,根据报错去改,遇到麻烦可能会整挺久。 

 四、是否生效

依赖库接入成功后,并不是立马就在代码里看到加密后的字符串,那样子本地也读不懂代码了,更别提更改了。如何查看是否生效,则需要打包后,反编译查看代码。如果生效,那可以看到你的字符串已经完全读不懂了,没生效则还是原来的字符串,跟明显。

如果没生效,检查配置是否有问题,清理本地的缓存,重启android studio,更改debug/release等环境试一试。

五、反编译

使用的是Jadx:

GitHub - skylot/jadx: Dex to Java decompiler

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

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

相关文章

【JDK 8-函数式编程】4.6 方法引用与构造函数引用

一、 方法引用与构造函数引用 1. 说明 2. 语法: 二、静态方法 三、实例方法 四、构造函数 4.1 单个参数 4.2 2个参数 五、执行结果 一、 方法引用与构造函数引用 以前调用:对象.方法名、类名.方法名 jdk1.8提供了另外一种调用方式 :: 1. 说明 用来直接访…

子网的划分

强化计算机网络发现王道没有这一块的内容,导致做题稀里糊涂。于是个人调研补充。 子网划分是将一个大型IP网络划分成更小的子网,以实现更有效的网络管理和资源分配。 原因: 提高网络性能:子网划分可以减少广播域的大小&#xff…

靶场练习——SDcms文件上传漏洞靶场

文章目录 前言一、寻找网站后台页面1、点击请登录,查看URL2、修改URL参数,找到后台登录页面 二、登录后台管理系统1、不能使用爆破2、使用弱口令登录 三、寻找文件上传点四、上传文件操作1、上传普通的图片文件,查看数据包2、尝试上传PHP文件…

Mysql----锁

文章目录 锁 概述 全局锁全局锁 概述全局锁 操作表级锁表级锁 表锁表级锁 元数据锁表级锁 意向锁行级锁行级锁 行锁行级锁 间隙锁&临键锁 锁 概述 是什么 是计算机协调多个进程或线程并发访问某一资源的机制。 意义 在数据库中,数据是一种供许多用户共享的…

C/C++计算分数的浮点数值 2019年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C计算分数的浮点数值 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C计算分数的浮点数值 2019年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 两个整数a和b分别作…

每日一题 337. 打家劫舍 III

难度:中等 整体思路相当于是前两天的方法倒过来,毕竟二叉树最常用的解法就是递归倒推 对于每一颗子树,他必定有一种最大的盗取方法,但是只有它的 root 的盗取情况才会影响到 root 的父节点,即如果收益最大的盗取方法…

【TCP】滑动窗口、流量控制 以及拥塞控制

滑动窗口、流量控制 以及拥塞控制 1. 滑动窗口(效率机制)2. 流量控制(安全机制)3. 拥塞控制(安全机制) 1. 滑动窗口(效率机制) TCP 使用 确认应答 策略,对每一个发送的数…

机器学习第七课--情感分析系统

分词 分词是最基本的第一步。无论对于英文文本,还是中文文本都离不开分词。英文的分词相对比较简单,因为一般的英文写法里通过空格来隔开不同单词的。但对于中文,我们不得不采用一些算法去做分词。 常用的分词工具 # encodingutf-8 import …

Linux C 多线程

为什么会有线程? ————————>>>> 进程实现多任务的缺点: 进程间切换的计算机资源开销很大,切换效率非常低进程间数据共享的开销也很大 线程和进程的关系 线程是进程的一个执行单元,是进程内的调度实体。比进程…

应用:使用#todo标签,清理未完成笔记 | Obsidian实践

各位【见睿思齐】的朋友,好久不见。断更了这么久,非常抱歉。起初是因为家里出了些事情,不得不断更了一段时间;后来是因为断更太久,找不回写作的感觉,于是又断更了更久的时间……总之是太不应该。最近读了一…

ESLint+Prettier+VSCode编程规范

编程规范 ESLintPrettierESLint和Prettier配合解决代码格式化问题1. 在VSCode搜索Prettier插件安装2. 创建prettier配置文件3. 在VSCode中设置3.1 找到左下角设置图标,点击设置3.2 但是对VSCode 而言,默认一个 tab 等于 4 个空格,而 ESLint 希…

【Hierarchical Coverage Path Planning in Complex 3D Environments】

Hierarchical Coverage Path Planning in Complex 3D Environments 复杂三维环境下的分层覆盖路径规划 视点采样全局TSP 算法分两层,一层高级一层低级: 高层算法将环境分离多个子空间,如果给定体积中有大量的结构,则空间会进一步细…

基于PyTorch搭建FasterRCNN实现目标检测

基于PyTorch搭建FasterRCNN实现目标检测 1. 图像分类 vs. 目标检测 图像分类是一个我们为输入图像分配类标签的问题。例如,给定猫的输入图像,图像分类算法的输出是标签“猫”。 在目标检测中,我们不仅对输入图像中存在的对象感兴趣。我们还…

软件工程之总体设计

总体设计是软件工程中的一个重要阶段,它关注整个系统的结构和组织,旨在将系统需求转化为可执行的软件解决方案。总体设计决定了系统的架构、模块划分、功能组织以及数据流和控制流等关键方面。 可行性研究 具体方面:经济可行性、技术可行性…

如何正确安装滚珠螺杆螺母?

在安装滚珠螺母时,相信很多人都遇到过装反这个问题,滚珠螺杆螺母是通过高精度的加工和配合实现传递转矩和运动的,如果将滚珠螺杆螺母反过来装,会导致导向槽和调整垫片位置不正确,使得整个螺杆系统的传动精度降低&#…

sketch for Mac快捷键大全

你可以在sketch中使用键盘快捷键来加快你的设计过程。要使用键盘快捷键,请同时按下下列列表的所有键。有些命令只能根据你在做什么或者你选择了什么才启用,所有把命令分成了下列不同的部分。 sketch下载地址:sketch 破解-Sketch for mac(专业…

Linux 信号集 及其 部分函数

这几个函数都是对自己自定义的信号集操作 int sigemptyset(sigset_t *set) 功能:清空信号集中的数据,将所有的标志位置为0 参数:set需要操作的信号集 返回值:成功0失败-1 int sigfillset(sigset_t *set) 功能:清空…

各个浏览器离线安装包获取方式

前言 我们一般去浏览器官网下载所谓的官方版浏览器,但是如今呢,下载的都是在线安装包,大小大约1~2MB,安装时电脑必须联网,每次都要从网络上下载。就像下面这样的: 在线安装包的运行必须有网络环境&#…

批量使用cdo 修改分辨率的方法

文件夹里有很多这种grib文件 怎么有2.3T啊,好大,一个一个改太浪费时间了 现在我想用cdo 批量他们的分辨率都降低一些,怎么做呢? find . -name *low.grib |xargs -I{} cdo remapbil,r144x72 {} {}_low.nc 思路:使用 find 命令找到…

小型网络实验组网

路漫漫其修远兮,吾将上下而求索 时隔多日,没有更新,今日一写,倍感教育的乐趣。如果让我每天发无意义的文章,我宁可不发。 实验拓扑 实验要求 (1)内网主机采用DHCP分配IP地址 (2&…