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

简介: 【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



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


目录
相关文章
|
人工智能 Android开发 iOS开发
安卓版快捷指令,加了AI语音可以一句话操作v0.2.7
Shortcuts for Android(SFA)是一款安卓自动化工具,支持语音创建快捷指令,实现听歌、导航、发消息等操作。操作简单,提升效率,快来体验语音控制的便捷!
1515 0
安卓版快捷指令,加了AI语音可以一句话操作v0.2.7
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
719 2
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
XML API 开发工具
Android Bitmap 加载与像素操作
Android Bitmap 加载与像素操作
251 2
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
235 0
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
281 0
|
安全 Java Android开发
【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | ClassLoader#loadClass 函数分析 | BaseDexClassLoader#findClass 分析 )
【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | ClassLoader#loadClass 函数分析 | BaseDexClassLoader#findClass 分析 )
278 0
|
关系型数据库 MySQL Unix
CentOS安装MySQL5.5
CentOS安装MySQL5.5
605 1
|
5月前
|
人工智能 安全 API
喂饭级图文指南!OpenClaw(Clawdbot)阿里云/本地部署+5705个Skill集成与验真,避开几百个恶意插件
2026年,OpenClaw(原Clawdbot、Moltbot)凭借开放的Skill生态成为AI助手领域的焦点——ClawHub平台汇聚的5705个技能覆盖办公自动化、智能家居、开发辅助等全场景需求,让用户只需简单配置,就能解锁AI助手的无限可能。但光鲜背后暗藏致命风险:Koi Security审计发现至少341个恶意Skill,Bitdefender扫描显示近20%的Skill存在安全漏洞,VirusTotal对3016个Skill的深度分析更是揭露数百个含恶意特征的插件。
1236 0
|
数据安全/隐私保护
搞个脚本—自动赚猿分(脱壳篇)
搞个脚本—自动赚猿分(脱壳篇)

热门文章

最新文章