文章目录

  • 前言
  • 一、Dalvik 下的函数指令抽取与恢复
  • 二、dex 函数指令恢复时机点
    • 1、dex 函数指令恢复
    • 2、Android 源码中搜索 dexFindClass 函数
    • 3、类加载流程 : 加载、链接、初始化

前言

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

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


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

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

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

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

    • 参考博客 : Android中实现「类方法指令抽取方式」加固方案原理解析 , 作者 姜维 , 同时也是《Android应用安全防护和逆向分析》 作者 ;
  • 运行时恢复 : 函数运行时 , 通过 HOOK 修改运行时的函数的指令逻辑 ;
    • 参考博客 : Android免Root权限通过Hook系统函数修改程序运行时内存指令逻辑 , 作者 姜维 , 同时也是《Android应用安全防护和逆向分析》 作者 ;
    • 推荐的 HOOK 框架 : https://github.com/ele7enxxh/Android-Inline-Hook , 注意该框架只支持 323232 位模式 ;

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


1、dex 函数指令恢复

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

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

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


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

2、Android 源码中搜索 dexFindClass 函数

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

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

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

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

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

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

  1. 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )

    文章目录 一.分析 malloc 函数的 arm 汇编语言 一.分析 malloc 函数的 arm 汇编语言 在上一篇博客 [Android 逆向]arm 汇编 ( 使用 IDA 解析 arm 架构的 ...

  2. 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

    文章目录 一.代码调试器功能简介 二.Attach 进程 一.代码调试器功能简介 代码调试器功能 : 设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 ...

  3. 基于linker实现so加壳技术下

    <基于linker实现so加壳技术基础>下篇 获得linker维护的本so的soinfo 但是问题又来了如何获得当前so的soinfo指针的基址呢?翻阅网上的资料说可以dlopen打开se ...

  4. 【Android 逆向】x86 汇编 ( 参考资料 | Intel 官方的文档 | x86 汇编中文文档 | 汇编指令查询器 )

    文章目录 一.x86 汇编参考文档 1.Intel 官方的文档 2.常用 x86 汇编文档 3.x86 汇编指令查询器 总结 一.x86 汇编参考文档 下面的所有资料 , 都可以在博客资源 https ...

  5. 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | Class.cpp#findClassNoInit 函数 | DexFile.cpp#dexFindClass 函数分析 )

    文章目录 前言 一.Class.cpp#dvmDefineClass 函数分析 二.Class.cpp#findClassNoInit 函数分析 三.DexFile.cpp#dexFindClass ...

  6. 【胖虎的逆向之路】02——Android整体加壳原理详解实现

    [胖虎的逆向之路](02)--Android整体加壳原理详解&实现 Android Apk的加壳原理流程及详解 文章目录 [胖虎的逆向之路](02)--Android整体加壳原理详解& ...

  7. Android 加壳与脱壳方式总结

    介绍 说到加壳,之前接触的主要都是pc端的壳,当时的脱壳就是用的esp脱壳法,大概意思就是程序运行到将当前环境保存之后,在当前的esp指向的地址下硬件断点,然后再次运行到该点时,进行dump内存,即可 ...

  8. Android APK加壳技术方案----代码实现

    本文章由Jack_Jia编写,转载请注明出处. 文章链接:http://blog.csdn.net/jiazhijun/article/details/8746917 作者:Jack_Jia    邮 ...

  9. 【腾讯Bugly干货分享】Android Linker 与 SO 加壳技术

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57e3a3bc42eb88da6d4be143 作者:王赛 1. 前言 Andr ...

最新文章

  1. 计算机课讲什么学生爱学,学生党“最喜欢”的4门课程,尤其是最后1门,学渣:我们的最爱...
  2. python 分类变量转为哑变量_python 虚拟变量
  3. 网络I/O模型--04非阻塞模式(解除accept()、 read()方法阻塞)的基础上加入多线程技术...
  4. shell脚本作为保证PHP脚本不挂掉的守护进程实例
  5. airplay服务器linux,在Linux实现airplay
  6. Zephyr_overlay文件讲解
  7. linux 踢出其他用户,linux系统强制踢掉登录用户
  8. 计算机思维和数学的那些事
  9. c语言常用的100个程序,100个经典C语言程序,大家可以进来看看。
  10. PIC单片机C语言编程教程
  11. 【视频插帧】XVFI: eXtreme Video Frame Interpolation
  12. undefined和null区别
  13. Django:发送邮件
  14. NAS与SAN的区别
  15. Linux下使用 ./ 来运行可执行文件
  16. 人工智能:确定性推理
  17. maven报错:Failed to execute goal on project ...: Could not resolve dependencies for project ...
  18. Android事件总线(一)EventBus3.0用法全解析
  19. ArcGIS API For Javascript 4.15 绘制地图:在地图上绘制点和面
  20. android 开发比较好的学习网站和博主

热门文章

  1. POJ 1184 聪明的打字员
  2. Alibaba Dubbo框架同步调用原理分析-1
  3. oracle tuning 工具
  4. FLASHBACK实施笔记
  5. IIS 承载的WCF服务失败
  6. 冬天了,麦克风/话筒 有杂音 的原因!
  7. windows terminal 笔记
  8. sklearn.feature_extraction.text.CountVectorizer 学习
  9. 使用 python 3.6 和 Vmware WorkStation 构建一个小型虚拟局域网通讯程序
  10. maven项目project facets中是2.3调整为3.0的解决办法