【Android 逆向】Dalvik 函数抽取加壳 ① ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
文章目录
前言
函数抽取 加壳 , 是 二代壳 技术 ;
一、Dalvik 下的函数指令抽取与恢复
函数指令 抽取 : 进行函数抽取加壳 , 首先要熟悉 dex 文件的结构 , 需要定位 dex 字节码文件中 , 函数指令 的偏移地址 ; 将 dex 文件中的函数指令 , 先抽取出来 ;
- 参考博客 : Android中实现「类方法指令抽取方式」加固方案原理解析 , 作者 姜维 , 同时也是《Android应用安全防护和逆向分析》 作者 ;
函数指令恢复 : 可以选择在 下面的 2 2 2 个时间点 , 恢复函数指令 ;
- 类加载之前恢复 : 在类加载到内存之前 , 将之前抽取出来的指令 恢复 回去 ; ( 比较简单 ) ;
- 参考博客 : Android中实现「类方法指令抽取方式」加固方案原理解析 , 作者 姜维 , 同时也是《Android应用安全防护和逆向分析》 作者 ;
- 运行时恢复 : 函数运行时 , 通过 HOOK 修改运行时的函数的指令逻辑 ;
- 参考博客 : Android免Root权限通过Hook系统函数修改程序运行时内存指令逻辑 , 作者 姜维 , 同时也是《Android应用安全防护和逆向分析》 作者 ;
- 推荐的 HOOK 框架 : https://github.com/ele7enxxh/Android-Inline-Hook , 注意该框架只支持 32 32 32 位模式 ;
二、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系统开机画面_Android开机画面
- android 常用加密,分享一下Android各种类型的加密
- Android微信撤回消息如何恢复?「建议收藏」
- android-studio安装及android开发环境搭建[通俗易懂]
- Linux安装Android Sdk「建议收藏」
- Android resource linking failed_android:authorities
- android 复制控件,Android长按复制文本功能[通俗易懂]
- Android SDK Tools_android.intent.category.DEFAULT
- 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )
- 【Android 启动过程】Activity 启动源码分析 ( ActivityThread 流程分析 一 )
- 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码中查找 native 函数 )
- 【Android 逆向】Dalvik 函数抽取加壳 ④ ( 类加载流程分析 | native 函数查询 | dalvik_system_DexFile.cpp#defineClassNative函数)
- 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )
- 【Android Gradle 插件】Gradle 依赖管理 ④ ( Android Gradle 插件中注册的依赖分组 | implementation | api | compileOnly )
- android 集成百度地图详解手机开发
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string ‘android-23’ 等错误详解手机开发
- Android 播放音频详解编程语言
- WiFi万能钥匙 for Android 显示密码最新极简版