作为一家安全公司旗下的开源项目,其“安全性”是作为其重点之一来考虑的。曾经有几个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签名校验),则可关闭,以避免重复校验
- 请尽量不要使用和“主程序”一样的签名,而是单独创建一个
: » Android RePlugin插件的安全与签名校验
原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/251642.html