链接视图与执行视图
- Section Header Table :在链接过程中使用,在最终的ELF文件(例如so文件)生成之后,section header table不再有用(如果section header table保持完好,一些工具仍然可以通过section header table解析so文件)
- Program header table:是程序执行过程中所需要的,也就是linker从外存加载so到主存过程中所需要的
在低版本的Android 系统中, 由于执行时并不依赖Section Header Table 的信息, 对加载到内存中的ELF, Section Header Table 是无用的。很多so 的软件壳通过这个特性,修改与ELF文件头的Section Header Table 相关的文件结构信息, 从而达到反逆向分析的效果。
在Android 7.0 及以后版本的系统中, 这种保护方式无效, 动态链接器在加载ELF 时加强了对文件格式的验证, 包括在加载时校验ELF 的Section Header Table 信息, 因此, 软件壳需要调整保护策略, 以适应系统安全特性的变化。