zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

【Android 逆向】Dalvik 函数抽取加壳 ① ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )

Android流程链接 函数 加载 恢复 指令 初始化
2023-09-14 09:07:29 时间

前言


函数抽取 加壳 , 是 二代壳 技术 ;





一、Dalvik 下的函数指令抽取与恢复



函数指令 抽取 : 进行函数抽取加壳 , 首先要熟悉 dex 文件的结构 , 需要定位 dex 字节码文件中 , 函数指令 的偏移地址 ; 将 dex 文件中的函数指令 , 先抽取出来 ;


函数指令恢复 : 可以选择在 下面的 2 2 2 个时间点 , 恢复函数指令 ;





二、dex 函数指令恢复时机点



1、dex 函数指令恢复


将 dex 中的函数指令 , 抽取出来后 , 还要在合适的时机 , 将抽取出来的函数指令恢复回去 ;

如果要针对 函数 抽取 加壳 的 应用 , 进行 脱壳 , 需要 找准 函数指令 恢复的时机点 ;


《Android中实现「类方法指令抽取方式」加固方案原理解析 | 作者 : 姜维》 博客中 , 选择的指令还原的时机是 native 层的 dexFindClass 时 ;

截图来自 《Android中实现「类方法指令抽取方式」加固方案原理解析 | 作者 : 姜维》博客
( 图片来自 《Android中实现「类方法指令抽取方式」加固方案原理解析 | 作者 : 姜维》 博客 )


2、Android 源码中搜索 dexFindClass 函数


在 Android 源码路径中 , 搜索上述 dexFindClass 函数 ;

进入 http://androidxref.com/4.4.4_r1 页面 , 搜索 dexFindClass 函数 , 该函数定义在 dalvik/libdex/DexFile.cpp#dexFindClass 中 ;

在这里插入图片描述


3、类加载流程 : 加载、链接、初始化


这里在回顾下之前的 类加载 流程 博客 : 【Java 虚拟机原理】Java 类加载过程 ( 加载 | 连接 - 验证 准备 解析 | 初始化 | 使用 | 卸载 ) , 类加载的过程涉及到 加载 , 链接 , 初始化 操作 ;

在这里插入图片描述

在上述类加载流程中 , 有很多时机点可以选择 ;