Android RePlugin插件的安全与签名校验

作为一家安全公司旗下的开源项目,其“安全性”是作为其重点之一来考虑的。曾经有几个App在使用动态加载Dex方案(非RePlugin)时,被爆出有可能携带“病毒”,经追查发现是由于没有对外来的Dex和Apk做“校验”导致。所以说,一旦不做校验,则不排除恶意人会劫持DNS或网络,并通过网络来下发恶意插件,对您的应用造成很不好的影响。

奇虎360安卓RePlugin插件

若开启此开关,则一旦签名校验失败,则会在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插件的安全与签名校验

: » Android RePlugin插件的安全与签名校验

原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/251642.html

(0)
上一篇 2022年5月3日
下一篇 2022年5月3日

相关推荐

发表回复

登录后才能评论