本篇不保证百分之百成功,但至少在我们内部,此操作是成功上架到Google Play 并保持超半年还在的。
下面聊聊具体的步骤措施
取一个跟之前不一样的就行,建议拿到名字上相关网站搜一下,同名是否多,尤其是有存在且对方已做商标保护的,那就更加不要同名了
参考:https://apkcombo.com/zh/
需VPN
同样,取一个跟之前不一样的
同时,比如公司名称简称sl,建议包名中就不要有sl了
eg:com.sl.appname 此类就不建议
设计一个新的即可
重新生成一个新jks文件、密码和名称都变更下,与之前的不要有关联
比如公司名称简称sl,建议jks中就不要有sl了
买一个新的域名使用,一个app一个单独域名
调整下结构目录,比如名称、嵌套顺序等
修改所有的类名、布局文件名、资源文件名
也做包名、项目结构目录、文件名调整
尤其是启动页、首页、尽量重新设计,主题色最好与之前有较大变化
图标的文件名必须全部修改
单纯修改文件名,一个文件的md5其实不会变,需要修改文件的内容
还可以对图片进行压缩、格式转换,png convert to webp
or webp convert to png
比如之前是btn_login,调整为btn_submit等
比如之前是LinearLayout,调整为androidx.appcompat.widget.LinearLayoutCompat
比如之前是TextView,调整为androidx.appcompat.widget.AppCompatTextView
比如之前是
Password
调整为
Password
可参考1:https://github.com/king-ma1993/AndroidProguadRules
建议对bt-proguard.txt内容进行相应替换,每个app保证混淆的内容不一样即可
Android超级变态的混淆词典
常规abcd等混淆方式对逆向的干扰程序并不是很大,所以需要一个变态的字典,使用方法如下:
在proguard-rules.pro文件中进行配置
-obfuscationdictionary bt-proguard.txt
-classobfuscationdictionary bt-proguard.txt
-packageobfuscationdictionary bt-proguard.txt
可参考2:https://github.com/bytedance/AabResGuard/blob/develop/wiki/zh-cn/README.md
对aab包的资源处理
如果使用了ARouter 路由框架,建议做相应修改
比如之前路由表
const val HOME: String = "/app/home"
调整为
const val INDEX: String = "/newapp/index"
举个例子
比如之前登录接口是
@POST("sl/app/login")
suspend fun login(@Body params: HashMap): NetResult
调整为
@POST("ax/FEW/MQx")
suspend fun loginInter(@Body params: HashMap): BaseResult
可以看到有几个变化
1、接口请求的具体地址变了
2、请求返回的NetResult变了
3、请求返回的实体名称也变了
4、接口请求的方法名也变了
如果内部有多个app,每个app生成的具体请求地址都是不一样的
同时每个app都有相应的请求头
比如之前是
val map = HashMap()
map["appName"] = "AppName"
调整为
val map = HashMap()
map["xAfew"] = "AppName"
最后再进行加密
比如之前是
data class LoginResultEntity(
val token: String? = "",
val avatar: String? = ""
)
调整为
1、名称变更
2、增加垃圾字段
data class LoginEntity(
val a="",
val b="",
val token: String? = "",
val avatar: String? = "",
val c=""
)
加点垃圾代码
可参考:https://github.com/qq549631030/AndroidJunkCode
唯一注意的是,混淆对相应垃圾代码保持不被混淆
大部分的变量和方法在混淆都是被重命名的
尤其注意的是打包的aab文件中,没有被重名的,进行相应修改
可通过工具 jadx-gui 进行查看
相关三方库升级、或者用其他相关库替换
关于使用的一些三方SDK
比如AppFlyer,新建一个App 会有一个dev key,App Flyer 默认每个app 的 dev key都是一样的,可联系对应商户更改