本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
作为一家安全公司旗下的开源项目,其“安全性”是作为其重点之一来考虑的。曾经有几个App在使用动态加载Dex方案(非RePlugin)时,被爆出有可能携带“病毒”,经追查发现是由于没有对外来的Dex和Apk做“校验”导致。所以说,一旦不做校验,则不排除恶意人会劫持DNS或网络,并通过网络来下发恶意插件,对您的应用造成很不好的影响。
若开启此开关,则一旦签名校验失败,则会在Logcat中提示“verifySignature: invalid cert”,且install方法返回null。
此外,出于性能考虑,内置插件无需做“签名校验”,仅“外置插件”会做。
要打开签名校验也是非常简单的。只需两步:
第一步:打开开关
例如,若您继承RePluginApplication,则请在创建 RePluginConfig 时调用其 setVerifySign(true) 即可。
当然,更推荐的做法是传递 !BuildConfig.DEBUG 参数。这表示:若为Debug环境下则无需校验签名,只有Release才会校验。以下是具体用法:
@Override protected RePluginConfig createConfig() { RePluginConfig c = new RePluginConfig(); c.setVerifySign(!BuildConfig.DEBUG); ... return c; }
如果您是“非继承式”,则需要在调用 RePlugin.App.attachBaseContext() 的地方,传递RePluginConfig,并设置setVerifySign即可。以下是具体用法:
RePluginConfig c = new RePluginConfig(); c.setVerifySign(!BuildConfig.DEBUG); ... RePlugin.App.attachBaseContext(context, c);
自 RePlugin 2.1.4 版本开始,默认将“关闭”签名校验,之前默认为“开启”。
第二步:加入合法签名
光是打开其开关还是不够的,还应该将“合法的签名”加入到RePlugin的“白名单”中,可调用 RePlugin.addCertSignature() 来完成。例如:
// Add signature to "White List" RePlugin.addCertSignature("379C790B7B726B51AC58E8FCBCFEB586");
其中,其参数传递的是签名证书的MD5,且去掉“:”’。
请务必去掉“:”,且不要传递SHA1或其它非签名MD5内容
获取签名的做法有很多,比较推荐的是使用keytool工具,可参见此文档的介绍。
出于性能考虑,RePlugin不会自动将“主程序签名”加入进来。如有需要,建议您自行加入。
最佳实践
以下为360手机卫士或其它合作App采用的设计,可供您参考:
- 强烈建议开启安全和签名校验
- 若在调用 install 方法前就已对APK做了校验(例如,手机卫士是 云控加密MD5 + V5签名校验),则可关闭,以避免重复校验
- 请尽量不要使用和“主程序”一样的签名,而是单独创建一个
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » Android RePlugin插件的安全与签名校验