移动安全入门指南
以前花了将近一年多的时间学习移动安全,期间也遇到了各种坑,特别是学习Android加固的知识,由于Android加固技术门槛比较高,在网上想要找到系统的资料还是很困难的,一些相关的入门资料也比较少。在这里,我也把自己以前学习的经历和遇到的坑做一些总结,希望能给一些刚入门移动安全行业的同学一些参考,避免入坑。
技术博客,专注于后台开发技术、机器学习、区块链技术、移动安全等。
以前花了将近一年多的时间学习移动安全,期间也遇到了各种坑,特别是学习Android加固的知识,由于Android加固技术门槛比较高,在网上想要找到系统的资料还是很困难的,一些相关的入门资料也比较少。在这里,我也把自己以前学习的经历和遇到的坑做一些总结,希望能给一些刚入门移动安全行业的同学一些参考,避免入坑。
本文首先从Android的Dex文件结构分析开始入手,剖析Dex文件结构的组成。
总结Android各种代码混淆技术
链接视图:elf未加载到内存中时完整的文件结构
执行视图:elf加载到内存中时的文件结构
深入浅出APK加固原理,并动手实现一个APK加固程序。
本文通过分析Android 4.4版本的源码,了解linker是如何加载并链接SO文件。在阅读本文之前,读者最好阅读有关ELF的文件格式,可以阅读《07-ELF文件结构学习》深入了解ELF的文件结构。
为了更好地理解APK加壳加固原理,我们需要对APP的启动流程进行分析,同时,我们整理提炼几个关键的问题,解决了下面的几个问题,对APP的启动过程理解和后面实战APK加固都很有帮助。
(1)APP启动的大概流程?
(2)该过程中涉及到的比较重要的类、函数,及其之间的关系?
(3)在哪里创建LoadedApk?
(4)在哪里创建类加载器?
(5)哪里加载dex文件
(6)在哪里创建Application对象?
Dalvik查找类和方法的过程。
类加载机制最终的目标就是为目标类生成一个ClassObject的数据结构的实例对象,并将加载了的这个类的ClassObject对象添加到全局变量gDvm的loadedClasses成员中,该成员主要是保存加载到内存中的类对象。
Android系统在启动时,第一个启动的进程就是init进程,也就是我们说的一号进程。
Android系统在启动了init一号进程后就开始创建Zygote进程。Zygote进程主要负责两个工作:
(1) 启动SystemServer进程
(2) 创建应用程序的进程