前言
现在出海金融APP越来越难,经常被封号,一旦封号代码就会被污染,开发一套代码的代价还是很高,现在简单的马甲包很容易被谷歌识别代码关联得不偿失的浪费账号
如何对代码进行混淆制作马甲包呢
大概的思路如下:
- 项目结构
- 文件名称
- 定义的变量常量字符串等
- UI XML文件里面的ID
- 资源文件和资源文件名
- 添加垃圾代码
- 引用的第三方数量和版本
这个需要自己手动去添加改动了 - 资源图片,可以转格式,或者换皮
基本上处理这些内容, 马甲包的代码混淆应该就差不多了 其他的方面必改的例如 包名、jks、三方的一些Key等
对应需要如何处理?
浏览了一些github上大神的一些混淆方案,然后尝试运用相关的技术实操了一遍,然后总结了一下相关使用的方法
-
使用XmlClassGuard 在打包前,在本地更改
包名+类名,可以将项目的项目结构和文件名全部改变成随机字符串,如果你不定义文件夹名称,那么就是a/b/c/d这样的顺序,会改变源代码项目地址github.com/liujingxing… XmlClassGuard 简介
XmlClassGuard是一个可混淆Android 4大组件、自定义View等任意类的插件XmlClassGuard可以看作是ProGuard的一个补充,跟ProGuard没有任何关系,也不会有任何冲突- 可快速更改
manifest文件里的package属性,并同步到其他文件中 - 可快速移动n个目录到其他目录中,并同步到其他文件中
xmlClassGuard不同于AndResGuard(apk资源混淆)、AadResGuard(aab资源混淆)侵入打包流程的方案,XmlClassGuard 需要在打包前执行xmlClassGuard任务,该任务会检索AndroidManifest.xml及navigation、layout、xml 文件夹下的xml文件,找出xml文件中引用的类,如4大组件及自定义View等,更改其包名+类名,并将更改后的内容同步到其他文件中,说直白点,就是在打包前,在本地更改包名+类名
2.常量字符串等混淆
使用字符串混淆插件StringObfuscatedPlugin
可以针对java层代码 类里面的常量字符串进行混淆,不过实操中发现有些问题,比如kotlin 的实体类,定义的Bean类变量值复制字符串会报错,所以做好是添加需要混淆的包名文件夹
3.UI XML文件里面的ID 我们Ui的xml里面很多的ID自己手动去改的话容易遗漏也很费手, 这时候就可以使用github大神的一个插件,一键替换ID生成随机字符串, 不仅能够一键混淆ID,还可以混淆java代码里面的变量和类名,很方便的工具
4.资源文件和资源文件名 这个的混淆就可以使用字节的AabResGuard,不过涉及到现在的gradle版本兼容性问题, 有方法解决
5.添加垃圾代码, 这个问题我也找到了github大神的工具AndroidJunkCode
Android垃圾代码生成插件,减小马甲包与主包的代码相似度,避免被某些应用市场识别为马甲包。
但是这个工具感觉有个缺陷,就是只能新增垃圾代码,让包体和方法数增加,但是没法对原有代码进行插入垃圾代码
如是又在github上查找,找到了一个可以Android插入式代码混淆工具,基于ASM在编译期间植入无意义字节码,但是目前发布的还是临时版本
总结
以上就是对于马甲包代码混淆的实操经验, 目前在这些混淆工具的帮助下,把源代码能混淆的很彻底,基本可以逃避谷歌代码关联的检测