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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )

文章目录

前言

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

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

1、dex 函数指令恢复

2、Android 源码中搜索 dexFindClass 函数

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

前言


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






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


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


参考博客 : Android中实现「类方法指令抽取方式」加固方案原理解析 , 作者 姜维 , 同时也是《Android应用安全防护和逆向分析》 作者 ;


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


类加载之前恢复 : 在类加载到内存之前 , 将之前抽取出来的指令 恢复 回去 ; ( 比较简单 ) ;

参考博客 : Android中实现「类方法指令抽取方式」加固方案原理解析 , 作者 姜维 , 同时也是《Android应用安全防护和逆向分析》 作者 ;

运行时恢复 : 函数运行时 , 通过 HOOK 修改运行时的函数的指令逻辑 ;

参考博客 : Android免Root权限通过Hook系统函数修改程序运行时内存指令逻辑 , 作者 姜维 , 同时也是《Android应用安全防护和逆向分析》 作者 ;

推荐的 HOOK 框架 : https://github.com/ele7enxxh/Android-Inline-Hook , 注意该框架只支持 32 3232 位模式 ;





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


1、dex 函数指令恢复


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


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



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

image.png


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



2、Android 源码中搜索 dexFindClass 函数


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


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

image.png




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


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

image.png



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


目录
相关文章
|
5天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
45 6
|
2天前
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
3天前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
6天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
15 3
|
7天前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
15 2
|
19天前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
29 3
|
6天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
8 0
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
43 4
|
2月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
44 0
|
3月前
|
Android开发
我的Android进阶修炼:安卓启动流程之init(1)
本文深入分析了Android系统中的init进程,包括其源码结构、主要功能以及启动流程的详细注解,旨在帮助读者理解init作为用户空间的1号进程在Android启动过程中的关键作用。
50 1