InMemoryDexClassLoader加载内存dex的流程 一、前言在之前分析dex文件加载流程中(dex文件加载流程(一)(二)(三)),我们分析过了DexClassLoader和PathClassLoader这两个类加载器加载dex的流程。它们两个都是用来记载文件dex的,但是在Android 8新增了InMemoryDexClassLoader,专门用于加载内存dex,接下来我们就根据源码来剖析内存dex的加载流程。 二、InMemoryDexCla 2023-12-06 Android #Android源码解析
对Java反射方法进行封装 在这之前,我们需要分析一下封装Java反射方法是为了干什么。 显然在Android第一代加固壳的原理及实现一文中,我们重复地使用到了Java反射来获取类、字段、方法,无一例外,获取它们的最终目的是获取字段值、修改字段值、调用方法。为了实现这些目的,我们写了很臃肿的代码,因为太多重复的反射获取,所以我们可以将这些代码封装起来,形成一个自定义类,这样一来,加固的代码就可以变得轻巧了,且这个封装类以后还 2023-12-04 Android #Java反射
关于一代壳的一些理解 想解释一下一代壳的脱壳代码为什么这么写,以及一些代码中的细节,解释全在代码注释中!!! 思维有点乱,可能有错误的地方,烦请告知,谢谢! 话不多说,直接看handleBindApplication(),想要详细跟踪Application的创建请阅读Android中Application的创建流程。 12345678910111213141516171819202122232425262728293 2023-12-02 Android #Android加固
Android第一代加固壳的原理及实现 —— 落地加载 一、前言学习加壳之前,建议先把前置知识学习再说。我们需要先学习dex文件结构、java反射、Android中的ClassLoader、Application以及它的加载流程、App启动流程。 不然我真不建议直接莽它,不懂原理只能学到皮毛! 二、第一代加固壳原理第一代加固壳原理如下图所示: 在图中涉及到三个程序: 待加壳程序的APK(源程序APK) (脱)壳程序APK(负责解密源程序APK并加载 2023-12-01 Android #Android加固
Android中的Application类 一、Application是什么Application同Activity、Service一样,都是Android系统的组件。当应用程序启动过程中,最先创建的是Application实例(有且仅有一个),它的创建早于应用程序启动以及任何Activity、Service或接收者对象(不包括ContentProvider)的创建。Application的生命周期是整个应用程序中最长的,它的生命周期就等于 2023-12-01 Android
Android中Application的创建流程 一、前言System进程和App进程都运行着一个或多个App,每个App都会有一个对应的Application对象(该对象跟LoadedApk一一对应)。下面分别解析以下两种进程创建Application的过程: System Server进程 App进程 二、System Server进程在Android系统启动流程一文中,讲到过Zygote通过回调函数进入到System Server阶段, 2023-11-27 Android #Application #Android源码解析
Android中的ClassLoader 一、ClassLoader的类型java中的ClassLoader和Android中的ClassLoader并不完全相同,因为java的可执行文件为class文件,而Android的可执行文件为dex文件,他们所加载的文件不同,因而所使用的ClassLoader也不相同。 Android中的ClassLoader分为两种类型,分别如下: 系统类加载器:BootClassLoader、PathCl 2023-11-25 Android #Android源码解析 #ClassLoader
java反射技术学习 一、什么是反射反射是指在程序运行时动态地获取类的信息,包括类名、字段、方法等。Java提供了一系列反射方法来操作(如获取、创建、修改、调用)Class对象、构造函数、方法、字段等。通过反射,我们可以创建对象、调用方法和访问字段,而不需要提前知道类的具体定义。同时反射也是一种实现动态加载的技术之一。 二、基于反射进行动态加载贴一段用于辅助测试的代码: 123456789101112131415161 2023-11-23 Android #Java反射
dex文件加载流程(三) 书接上文dex文件加载流程(二) (gal2xy.github.io)。 一、DexFile::Open()根据上一篇文章的学习可知,在OpenDexFilesFromOat()方法中,如果能够从oat文件中加载dex文件,则最终在OatFile::OatDexFile::OpenDexFile()方法中调用带8个参数的DexFile::Open()方法: 12345678DexFile::Ope 2023-11-20 Android #Android源码解析 #dex
dex文件加载流程(二) 书接上文dex文件加载流程(一)(gal2xy.github.io)。 一、DexFile_openDexFileNative()学习完上一篇文章,我们知道:不管是用PathClassLoader还是DexClassLoader加载dex文件,它们最终都会调用openDexFileNative()方法,该方法对应art/runtime/native/dalivk_system_DexFile.cc 2023-11-20 Android #Android源码解析 #dex