今年谷歌上架的难度可谓是地狱级别。
可是国内马甲这么多,总要摸索出一些套路来。
这里总结几条开源aab混淆策略。
1、as自带混淆是必要的,否则就是源码提包,相当于到谷歌门口举个牌子说我是马甲包。
不仅要驳回,还要被封号。
所以这个得加上。
2、做了第一步,也还只是个小孩。只是对包名、字符串做了简单的替换,对安卓的4大组件类开绿灯了,这块相似度高也是个麻烦事。
我们问问开源世界对这个问题的看法。
有一些变态混淆我们可以用起来:
比如说这个:
用上这个,我们看下反编译出来的aab:
这个马甲,人看了只会一脸黑。
当然还有一些超级变态的混淆字典,比如这个兄弟提供的:
这已经到了乱码级了。
但个人觉得,做到2.1就行了,2.2没必要。我们的目的是通过审核,在审核层面的帮助这一步意义不大。
好,dex代码混淆其实做的差不多了,再往下做就得像加固那样把代码怼到so里面去了,那样可能适得其反,谷歌直接送回泉水。
3、aab包里还有一块也是谷歌重点审核对象:资源
资源其实大致分两类,一类是xml文件,一类是非xml文件。
xml文件除了文件名、md5校验,还可以比较文件内容。一些id,属性,字串等都可能要经过审查。
非xml的比如图片,这类一般是文件名和md5比对(瞎猜的)。
图片的md5简单的就是通过UI设计发力,程序员对资源做混淆就好。
开源社区上也有较多的这类混淆工具
针对aab的有bytedance的这个:
这个工具比较老了,AGP版本1.8以上就会无法使用。但是可以用fork他的改良版:
目测是印度小伙优化的,点赞。
根据他的魔法,打出来的aab反编译是这样的:
构建完成后会在aab目录输出resource-mapping.txt:
可以看到只是对文件夹、文件名做了字典替换。
文件内容不会去变。
但为了深度混淆,最好在做个xml文件内容混淆。
可以用这个:
这个是本地gradle task直接修改源码,建议在单独分支处理,避免污染源码。
另外需要注意的是,这个工具会把所有类和资源做字典替换,且会有部分类会替换不完全,还需要手动补全。需要花点精力。
执行顺序应该是XmlClassGuard的task先执行,再执行ResCeipher打包任务。
这套combo下来,基本上谷歌也会低下高傲的头颅。