Android StringFog 字符串自动加密

这篇具有很好参考价值的文章主要介绍了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.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
}

我的配置是:

android stringfog,Android开发,android

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

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 stringfog,Android开发,android 

 四、是否生效

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

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

五、反编译

使用的是Jadx:

GitHub - skylot/jadx: Dex to Java decompiler

六、坑

2023.9.20日补充

1.build新项目时,报错java.util.NoSuchElementException: Cannot access first() element from an empty Iterable。

看了下我的依赖库已经拉下来了,然后看了下对应版本

app的build.gradle

implementation 'com.github.megatronking.stringfog:xor:4.0.1'

项目下的build

classpath 'com.android.tools.build:gradle:7.4.0' classpath 'com.github.megatronking.stringfog:gradle-plugin:4.0.1' classpath 'com.github.megatronking.stringfog:xor:4.0.1'

gradle和stringfog是对应的呀,然后去谷歌也没得答案。但是自己琢磨也是适配的问题,因为这个配置用了好几次了

于是检查项目发现:这里面配置是8.0,那肯定不行的呀,我项目的gradle是7.4android stringfog,Android开发,android

于是改回7.5完美解决。

Gradle Wrapper 详解_Air Field的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-781685.html

到了这里,关于Android StringFog 字符串自动加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Android将Uri转为路径字符串(适配安卓全版本)并使用第三方应用打开文件(适配Android7.0+)

    做这个功能时在网上找了无数篇例子,有些方法是有问题的,故自己写一篇完整实现的总结,作备忘也作案例。顺便说一句,Android对存储权限的给予真的越来越严格 目录 1.Uri转为路径String以获得文件名  2.获取文件后缀名 3.通过后缀名获取文件MIME类型  4.设置Intent的Uri与权限

    2024年02月19日
    浏览(9)
  • python 加密字符串

    描述‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬ 密码对照表的第一行为明码行,放置大写字母表(如

    2023年04月08日
    浏览(8)
  • 字符串压缩加密算法(可逆)

    业务场景:App下单后的订单,需要在另一个内部系统中进行扫码打印。两个程序包括服务器之间网络不互通,所以想到了通过二维码携带内容做数据交互,但是将内容转为base64后发现字符串太长,放入二维码后二维码密度相当大,几乎无法被扫描,所以就想到了给字符串进行

    2024年02月11日
    浏览(8)
  • 摩尔斯电码加密字符串

    摩尔斯电码加密字符串

    摩尔斯电码滴答“.-”,加密字符串。   (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网 :https://www.python.org/ Free :大咖免费“ 圣经 ”教程《 python 完全自学教程 》,不仅仅是基础那么简单…… 地址:https://lqpybook.readthedocs.io/   自学并

    2024年02月06日
    浏览(10)
  • 华为OD-字符串加密

    有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,将所得结果作为新字母表开头,并将新建立的字母表中未出现的字母按照正常字母表顺序加入新

    2024年02月11日
    浏览(8)
  • 华为OD真题--字符串加密

    2023华为OD统一考试(A+B卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新) \\\"给你一串未加密的字符串str,通过对字符串的每一个字母进行改变来实现加密,加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量, 数组a前三位已经赋值:

    2024年02月13日
    浏览(6)
  • Java实现字符串加密与解密

    我们在设计登录程序时需要用到保存用户名和密码的功能,如果是直接写入到txt文件中保存很容易被木马程序识破,所以就必须先对密码加密,只留存密文。 今天介绍的是使用 十六进 制转换的方式加密数据。 得到结果: 757376662d312d6d7064626d697074752d323534342d717974646b 现在我们将

    2024年02月11日
    浏览(10)
  • python实现AES-128#实现加密字符串和加密文件

    python实现AES-128#实现加密字符串和加密文件

    这篇文章是对之前的一篇文章的重写和优化AES加密算法基于python实现 脚本语言:Python 已实现的功能 明文和密密钥可以是任意字符:中文,字符,数字或符号。 ​ 明文长度任意,密钥的字节数不能超过16字节。默认编码为utf-8所以,密钥最多支持5个中文字符 待加密的数据:可

    2024年02月12日
    浏览(14)
  • python加密字符串安全保护你的数据

    Python加密字符串可以使用标准库中的hashlib模块,该模块提供了常见的摘要算法,如MD5,SHA1等。下面是一个示例代码: Python加密字符串可以使用标准库中的hashlib模块,该模块提供了常见的摘要算法,如MD5,SHA1等。下面是一个示例代码: 运行结果:

    2024年02月07日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包