【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )
2023-09-14 09:07:29 时间
一、DexClassLoader 构造函数简介
DexClassLoader 构造函数如下 :
/**
* 创建一个{@code-DexClassLoader}来查找解释的和本机的
* 密码解释类可以在包含的一组DEX文件中找到
* 在Jar或APK文件中。
*
* <p>使用指定的字符分隔路径列表
* {@code path.separator}系统属性,默认为{@code:}。
*
* @param dexPath 包含类和
* 资源,由{@code File.pathSeparator}分隔,其中
* Android上的默认值为{@code”:“}
* @param optimizedDirectory 目录,其中包含优化的dex文件
* 应该是书面的;不能为{@code null}
* @param librarySearchPath 包含本机
* 库,由{@code File.pathSeparator}分隔;可能是
* {@code null}
* @param parent 父类加载器
*/
public DexClassLoader(String dexPath, String optimizedDirectory,
String librarySearchPath, ClassLoader parent) {
super(dexPath, new File(optimizedDirectory), librarySearchPath, parent);
}
源码路径 : /libcore/dalvik/src/main/java/dalvik/system/DexClassLoader.java
DexClassLoader 构造函数 参数 :
- String dexPath : 要加载的 DEX 或 JAR 格式字节码的路径 ;
- String optimizedDirectory : 优化目录 , 加载 zip 或 apk 文件 , 需要对 dex 优化生成 odex , 优化后的文件需要存放在该优化目录中 ;
- String librarySearchPath : 相关函数库搜索路径 , 如果没有引用外部函数库 , 可以设置为 null ;
- ClassLoader parent : 父节点类加载器 ,
二、准备 DEX 文件
在 Android Studio 工程中 , 创建 Module ,
并在其中 , 设置一个测试类 , 之后要使用 DexClassLoader 加载该 DEX 字节码文件 ,
package com.example.dex_demo;
import android.util.Log;
/**
* 测试 DEX 字节码加载并执行
*/
public class DexTest {
public void test(){
Log.i("DexTest", "DexTest : Hello World!!!");
}
}
选择 " 菜单栏 / Build / " 编译程序 , 生成 APK 文件 ;
编译后的 dex_demo-debug.apk 文件 , 在当前位置解压 , 获取其中的 classes.dex 字节码文件 ;
将该 DEX 文件拷贝到 主应用的 assets 目录下 ;
相关文章
- android 安装p12证书,如何在Android中使用p12证书(客户端证书)
- android文件访问权限_android最高权限名称
- Android preference_android studio preview
- eclipse中android开发_Android开发教程
- 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )
- 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application 二 )
- 【Android 插件化】Hook 插件化框架 ( 合并 “插件包“ 与 “宿主“ 中的 Element[] dexElements | 设置合并后的 Element[] 数组 )
- 【Android 逆向】修改 Android 系统文件 ( 重新挂载文件分区 | 在 /system/lib/ 只读目录下创建文件 | 修改 Android 系统文件的意义 )
- 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )
- 【错误记录】Manifest 清单文件报错 ( ..required to specify an explicit value for `android:exported` when the .. )
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( ./init-android.sh: 第 37 行: cd: android/contrib/: 没有那个文件或目录 )
- 【Unity3D】Unity 中使用 C# 调用 Java ① ( Android Studio 模块准备 | 编译 Android 模块拿到字节码文件 | 拷贝字节码到 Unity 编辑器 )
- Android滚动页面位置指示器:CircleIndicator详解手机开发
- [android]android项目的目录结构详解手机开发
- Android开发之文件操作模式深入理解
- Android中init.rc文件的解析分享
- android开发教程之系统资源的使用方法android资源文件