乾为天
要不要写这篇文章我是想了很久的,本来不想再写;写文章看似简单,实际上合理的组织语言写一篇即有点深度又易懂的文章是很难的;但自己许下的愿就这样半途而废有悖天地法则,所谓天圆地方,圆圆满满,做事需有头有尾,乃为规律。
我同样秉着和上篇文章一样的态度,尽量用浅显的语言让更多的人了解它。
地水师
想研究无线保镖中的安全特性,你就不得不弄懂litevm;如avmp、安全对抗、数据收集等,很多核心安全的实现被内置在这个litevm中,sgmain6.3.80对应sgavmp6.3.29中还没有litevm,由此可以看出litevm和avmp是独立的,两者并不存在直接关系。avmp的时间早于litevm,litevm是一个较新版本的安全组件。
其实义如其名litevm就是一个小的轻量的vm,下面是我给它的一个定义:
火天大有
说什么都没有直接拨开它更具说服力,我们先看看它的sdk中暴露的组件包结构形式:
在看看sdk中接口形式:
看看sdk中litevm包装类:
我们在看看最接近sgmain的部分:
看了这么多可以反过来证实一下我上面说的话了吧,他们预期将来对外提供一系列的安全方法,这些暴露给上层调用的方法是基于dex的方法(至于它将来内部想通过什么方式提供,如dex vmp、 jni反射、或者elf vmp、直接字节码,这都不重要);不过它可不仅仅提供dex方式的方法,它内部是个虚拟机,它可以提供任何方式的方法,并且保镖内部调用lvm完全和上层没有关系,vm执行的是字节码,vm还可以vmp化。sgavmp的字节码加载、签名计算都调用了lvm。或许在不久的将来你将无法在无线保镖中找到sgavmp的踪影。
山天大畜