当前位置: 首页 > news >正文

Android StringFog 字符串自动加密

一、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.StringFogModestringfog {// 必要:加解密库的实现类路径,需和上面配置的加解密算法库一致。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或者bytesmode 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

相关文章:

Android StringFog 字符串自动加密

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

上四休三,未来的期许

近日“少上一天班,究竟香不香”引发关注,英国媒体2月21日报道,一项全世界目前为止参加人数最多的“四天工作制”试验,不久前在英国取得了成功。很多人表示上过四天班之后,给多少钱也回不去五天班的时代了。 来百度APP畅…...

怎么防止360安全卫士修改默认浏览器?

默认的浏览器 原先选项是360极速浏览器(如果有安装的话),我这里改成了Chrome。 先解锁 才能修改。...

调整参数提高mysql读写速度

要提升MySQL的写入速度,您可以采取一些参数调整和优化措施,这些措施可以根据您的具体应用和环境进行调整。以下是一些常见的参数和优化建议: InnoDB存储引擎: 如果您使用的是InnoDB存储引擎,确保以下参数被设置得合理: innodb_buffer_pool_size:增加内存池大小,以便更多…...

第一届电子纸产业创新应用论坛-邀请函

...

Go expvar包

介绍与使用 expvar 是 exposed variable的简写 expvar包[1]是 Golang 官方为暴露Go应用内部指标数据所提供的标准对外接口,可以辅助获取和调试全局变量。 其通过init函数将内置的expvarHandler(一个标准http HandlerFunc)注册到http包ListenAndServe创建的默认Serve…...

Yolo v8代码逐行解读

train.py文件 1.FILE Path(__file__).resolve() __file__代表的是train.py文件,Path(__file__).resolve()结果是train.py文件的绝对路径。 2.ROOT FILE.parents[0] 获得train.py父目录的绝对路径 3.sys.path 是一个列表list,里面包含了已经添加到系…...

9.18号作业

完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮…...

Spring源码阅读(spring-framework-5.2.24)

spring-aop spring-aspects spring-beans spring-context 等等 第一步: Tags spring-projects/spring-framework GitHub 找到相应的release版本 第二步: 下载相应版本的gardle,如何看版本 spring-framework/gradle/wrapper /gradl…...

【SpringMVC】文件上传与下载、JREBEL使用

目录 一、引言 二、文件的上传 1、单文件上传 1.1、数据表准备 1.2、添加依赖 1.3、配置文件 1.4、编写表单 1.5、编写controller层 2、多文件上传 2.1、编写form表单 2.2、编写controller层 2.3、测试 三、文件下载 四、JREBEL使用 1、下载注册 2、离线设置 一…...

数据结构 第二章作业 线性表 西安石油大学

在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于 哪两个因素? 在顺序表中插入和删除一个结点时,平均移动的结点数量取决于两个因素:插入/删除位置和当前顺序表的长度。 插入/删除位置:如果要…...

vue.mixin全局混合选项

在Vue.js中,Vue.mixin 是一个用来全局混合(mixin)选项的方法。它允许你在多个组件中共享相同的选项,例如数据、方法、生命周期钩子等。这可以用来在组件之间重复使用一些逻辑或共享一些通用的功能 Vue.mixin({// 在这里定义混合的选项data() {return {s…...

VMware Fusion 13+Ubuntu ARM Server 22.04.3在M2芯片的Mac上共享文件夹

因为Server版没有桌面,VMware Tools不能直接装,导致没办法共享文件。 Ubuntu中的包如果需要更新,先执行下面的步骤 sudo apt update 再执行 sudo apt upgrade 不需要更新的话,直接执行下面的步骤 先把open-vm-tools卸载了 …...

PostgreSQL serial类型

serial类型和序列 postgresql序列号(SERIAL)类型包括 smallserial(smallint,short),serial(int)bigserial(bigint,long long int) 不管是smallserial,serial还是bigserial,其范围都是(1,9223372036854775807)&#…...

[创业之路-76] - 创业公司如何在长期坚持中顺势而为?诚迈科技参观交流有感

目录 一、创业环境 1.1. VUCA乌卡时代:易变、复杂、不确定性、模糊的时代 1.2. 中国用了四十年的时间完成了三次工业革命:机械化、电气化、数字化 1.3. 中国正在经历着第四次工业革命:智能化、生态化、拟人化 1.4 国产替代:国…...

人脸修复祛马赛克算法CodeFormer——C++与Python模型部署

一、人脸修复算法 1.算法简介 CodeFormer是一种基于AI技术深度学习的人脸复原模型,由南洋理工大学和商汤科技联合研究中心联合开发,它能够接收模糊或马赛克图像作为输入,并生成更清晰的原始图像。算法源码地址:https://github.c…...

linux入门到精通-第三章-vi(vim)编辑器

目录 文本编辑器gedit介绍vi(vim)命令模式命令模式编辑模式末行模式 帮助教程保存文件切换到编辑模式光标移动(命令模式下)复制粘贴删除撤销恢复保存退出查找替换可视模式替换模式分屏其他用法配置文件 文本编辑器 gedit介绍 gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器…...

Mybatis面试题(三)

文章目录 前言一、Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?二、当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?三、模糊查询 like 语句该怎么写四、…...

Qt扩展-KDDockWidgets 简介及配置

Qt扩展-KDDockWidgets 简介及配置] 一、概述二、编译 KDDockWidgets 库1. Cmake Gui 中选择源文件和编译后的路径2. 点击Config,配置好编译器3. 点击Generate4. 在存放编译的文件夹输入如下命令开始编译 三、qmake 配置 一、概述 kdockwidgets是一个由KDAB组织编写…...

Vue3搭配Element Plus 实现候选搜索框效果

直接上代码 <el-col :span"14" class"ipt-col"><el-input v-model"projectName" class"w-50 m-2" input"inputChange" focus"inputFocusFn" blur"inputBlurFn" placeholder"请输入项目名…...

终极Ghidra安装指南:5分钟在Ubuntu系统快速部署逆向工程神器

终极Ghidra安装指南&#xff1a;5分钟在Ubuntu系统快速部署逆向工程神器 【免费下载链接】ghidra_installer Helper scripts to set up OpenJDK 11 and scale Ghidra for 4K on Ubuntu 18.04 / 18.10 项目地址: https://gitcode.com/gh_mirrors/gh/ghidra_installer 想要…...

Java中正确比较数组最小值的两种方法

本文旨在解决Java Stream 当API使用min()方法获得数组最小值时&#xff0c;返回optionalint类型导致的直接比较错误。我们将深入探讨这个问题的根源&#xff0c;并提供两个有效的解决方案&#xff1a;一是比较Optionalint的getasint()方法&#xff0c;二是引入apache Commons N…...

DeepSeek-OCR-2实战教程:OCR结果JSON Schema解析与结构化数据入库指南

DeepSeek-OCR-2实战教程&#xff1a;OCR结果JSON Schema解析与结构化数据入库指南 1. 项目简介 DeepSeek-OCR-2是基于深度学习的智能文档解析工具&#xff0c;专门针对结构化文档内容提取而设计。与传统的OCR工具只能提取纯文本不同&#xff0c;这个工具能够精准识别文档的排…...

农机经销商必看:如何用2000-2020年县级数据精准定位区域市场?

农机经销商区域市场精准定位实战指南&#xff1a;基于2000-2020年县级数据分析 站在山东潍坊的田间地头&#xff0c;老张望着远处几台正在作业的拖拉机陷入了沉思。作为一家中型农机经销商的区域经理&#xff0c;他每年最头疼的就是如何准确预测各县区的农机需求——备货多了占…...

语音合成延迟优化:IndexTTS-2-LLM网络IO调优实战

语音合成延迟优化&#xff1a;IndexTTS-2-LLM网络IO调优实战 1. 为什么语音合成总在“等”&#xff1f;从用户卡顿说起 你有没有试过在语音合成页面点下“开始合成”&#xff0c;然后盯着进度条数秒——明明只是一句话&#xff0c;却要等3秒、5秒&#xff0c;甚至更久&#x…...

Postiz消息队列:任务优先级与重试机制的终极指南

Postiz消息队列&#xff1a;任务优先级与重试机制的终极指南 【免费下载链接】clickvote Add upvotes, likes, and reviews to any context ⭐️ 项目地址: https://gitcode.com/GitHub_Trending/cl/clickvote Postiz是一款功能强大的开源项目&#xff0c;专注于为开发者…...

Trelby:释放创意生产力的剧本创作解决方案

Trelby&#xff1a;释放创意生产力的剧本创作解决方案 【免费下载链接】trelby The free, multiplatform, feature-rich screenwriting program! 项目地址: https://gitcode.com/gh_mirrors/tr/trelby 当格式规范不再成为创作的枷锁&#xff0c;编剧如何重获灵感自由&am…...

vLLM-v0.17.1实战案例:为AI编程助手提供毫秒级代码补全服务

vLLM-v0.17.1实战案例&#xff1a;为AI编程助手提供毫秒级代码补全服务 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;其核心目标是提供极致的推理速度和易用性。这个项目最初由加州大学伯克利分校的天空计算实验室开发&#xff0c;…...

OpenClaw轻量化实践:nanobot镜像在树莓派上的部署指南

OpenClaw轻量化实践&#xff1a;nanobot镜像在树莓派上的部署指南 1. 为什么选择树莓派部署OpenClaw 去年夏天&#xff0c;我在整理家庭实验室时翻出了一台闲置的树莓派4B。这台曾经用来跑Home Assistant的小设备&#xff0c;现在有了新的使命——成为我的个人AI助手。当时市…...

基于FDM - EDFM的油气藏地层压力场计算:MATLAB实战

基于有限差分-嵌入式离散裂缝网络&#xff08;FDM-EDFM&#xff09;的油气藏地层压力场计算&#xff0c;通过matlab代码实现&#xff0c;可提供理论指导和相关问题&#xff0c;可计算不同裂缝网络的压力分布。在油气藏工程领域&#xff0c;准确计算地层压力场对于理解油藏动态、…...