Dalvik模式下在Android so库文件.init段、.init_array段构造函数上下断点
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78244766
在前面的博客《在Android so文件的.init、.init_array上和JNI_OnLoad处下断点》中,已经分享了Dalvik虚拟机模式下如何在Android
so库文件的.init段、.init_array段构造函数上下断点的方法,也是网上流传比较多的常规方法。尽管那些方法也能实现在Android so库文件.init段、.init_array段构造函数上下断点,但是总体来说还是感觉比较繁琐,因为需要进行Android so库文件.init段、.init_array段构造函数虚拟内存调用地址(VA)的计算。有的时候,我是真不想使用这种方法,像.init_array段构造函数多还需要每一个进行计算,懒得算。最近一段时间在学习Android
so加固相关方面的知识,发现只要结合Android so库文件.init段、.init_array段构造函数源码调用的特征,就能实现在动态调试Android so库文件时快速在.init段、.init_array段构造函数上下断点。
下面就以 Android 4.4.4 r1 的源码为例来讲解Dalvik模式下在Android so库文件.init段、.init_array段构造函数上下断点的方法。
1. Dalvik虚拟机模式下,Android so库文件的加载过程中会调用dvmLoadNativeCode函数,并且dvmLoadNativeCode函数是libdvm.so库文件中的导出函数,只要在dvmLoadNativeCode函数上下断点就可以实现对Android so库文件.init段、.init_array段构造函数和JNI_Onload函数进行拦截。
2. 结合Android 4.4.4 r1源码中dvmLoadNativeCode函数代码实现的特点如下图所示,找到dlopen函数的被调用位置,下图中标识的4个位置都是进行下关键断点的时候,查找和定位的标记。
3. 3次F7跟进来到调用导出函数dlopen开头的位置,结合dlopen函数实现的特点,很顺利的 定位到 do_dlopen函数被调用的位置 如下图所示,然后在do_dlopen函数的位置下断点:
4. F7跟进do_dlopen函数,发现根据do_dlopen函数的汇编代码比较难定位Android so库文件中.init段、.init_array段构造函数的调用位置si->CallConstructors ,索性对do_dlopen函数的汇编代码进行F5反编译处理如下图所示,很显然根据do_dlopen函数源码的调用特征能够比较快的找到si->CallConstructors的调用位置下断点。
5. F7跟进si->CallConstructors的调用之后,根据CallConstructors函数中代码调用的特征以及比较明显的特征字符串,能够比较快的定位到
Android so库文件中.init段、.init_array段构造函数被调用的具体位置下断点,如下图所示。
6. F7跟进来到.init段构造函数被调用的CallFunciton函数实现中,根据.init段构造函数被调用的CallFunciton函数的汇编代码可以找到.init段构造函数最终被调用的位置下断点,当然直接对CallFunciton函数的汇编代码进行F5的反汇编,非常容易就能定位到CallFunciton函数中.init段构造函数最终被调用的位置下断点,如下图所示。很显然,Android
so库文件中.init_array段构造函数CallArray的实现最终调用的.init段构造函数被调用所在的CallFunciton函数,因此在CallFunciton函数中.init段构造函数最终被调用的位置下断点就可以实现在Android
so库文件.init段、.init_array段构造函数上进行拦截,第1次调用到.init段构造函数最终被调用的位置是.int段构造函数的,之后到达这个断点位置都是.init_array段构造函数的调用。
根据.init段构造函数被调用的CallFunciton函数的汇编代码可以找到.init段构造函数最终被调用的位置下断点。
7. F7单步跟进来到Android so库文件中.init_array段构造函数CallArray中,根据.init_array段构造函数CallArray中代码的调用特点以及比较明显的字符串能够比较快的定位到.init_array段中每个构造函数最终调用的位置下断点,如下图所示。
注释:截图的图片中有的地方注释写的不对但是不影响,在关键函数的调用位置下断点的主要操作依据就是根据Android系统源码的实现来进行查找和定位关键函数的调用位置进行下断点。尽管每个Android系统版本代码的具体实现稍有不同但是没关系,对照着Android具体版本源码的实现来下断点,这个过程只需要一次就能比较熟悉的找到下断点的函数位置,既能熟悉Android的源码又能方便自己之后快速在需要的函数上下断点。
很显然,Art虚拟机模式下也可以使用这种方法在Android so库文件.init段、.init_array段构造函数上下断点。
Android 4.4.4 r1源码文件参考路径:
http://androidxref.com/4.4.4_r1/xref/dalvik/vm/Native.cpp#318
http://androidxref.com/4.4.4_r1/xref/bionic/linker/dlfcn.cpp#63
http://androidxref.com/4.4.4_r1/xref/bionic/linker/linker.cpp#82 3
Dalvik模式下在Android so库文件.init段、.init_array段构造函数上下断点的更多相关文章
- Dalvik模式下基于Android运行时类加载的函数dexFindClass脱壳
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78003184 前段时间在看雪论坛发现了<发现一个安卓万能脱壳方法>这篇 ...
- Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客<Android平台dalvik模式下java Ho ...
- Android平台dalvik模式下java Hook框架ddi的分析(1)
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/75710411 一.前 言 在前面的博客中已经学习了作者crmulliner编写的, ...
- Dalvik模式下System.loadLibrary函数的执行流程分析
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78212010 Android逆向分析的过程中免不了碰到Android so被加固的 ...
- 基于dalvik模式下的Xposed Hook开发的某加固脱壳工具
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77966109 这段时间好好的学习了一下Android加固相关的知识和流程也大致把A ...
- ffmpeg学习笔记-Linux下编译Android动态库
Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...
- Android so库文件的区节section修复代码分析
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78818917 一.Android so库文件的节表secion修复方案整理 1.简 ...
- 测试Oracle 11gr2 RAC 非归档模式下,offline drop数据文件后的数据库的停止与启动测试全过程
测试Oracle 11gr2 RAC 非归档模式下,offline drop数据文件后的数据库的停止与启动测试全过程 最近系统出现问题,由于数据库产生的日志量太大无法开启归档模式,导致offline的 ...
- linux下编译自己的库文件实践
有了我传的那个资料,这个就没什么用了,那个太经典了,这个就是记录我自己的实践.:-) linux下文件的类型是不依赖于其后缀名的,但一般来讲:.o,是目标文件,相当于windows中的.obj文件.s ...
随机推荐
- Omega System Trading and Development Club内部分享策略Easylanguage源码 (第二期)
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 我们曾经在前文(链接),为大家分享我们精心整理的私货:"System Trading and ...
- mysql基本指令2
pymysql: - 连接.关闭(游标) - execute() -- SQL注入 sss' or 1=1 -- - 增删改: conn.commit() - fetchone f ...
- MongoDB -> kafka 高性能实时同步(sync 采集)mongodb数据到kafka解决方案
写这篇博客的目的 让更多的人了解 阿里开源的MongoShake可以很好满足mongodb到kafka高性能高可用实时同步需求(项目地址:https://github.com/alibaba/Mong ...
- 【python+selenium的web自动化】- 控制浏览器的常用操作
如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html 前言 本文主要介绍se ...
- webpack4.x 从零开始配置vue 项目(一)基础搭建项目
序 现在依旧记得第一次看到webpack3.x 版本配置时候的状态 刚开始看到这些真的是一脸懵.希望这篇文章能帮到刚开始入门的同学. webpack 是什么? webpack是一个模块化打包工具,w ...
- Codeforces Round #546 C. Nastya Is Transposing Matrices
题面: 传送门 题目描述: 给出两个n x m的矩阵A,B.矩阵A可以把正方子矩阵进行"转置操作",问:可不可以对矩阵A进行多次这样的操作,使矩阵A变为矩阵B? 题目分析: 这 ...
- Ingress-nginx工作原理和实践
本文记录/分享 目前项目的 K8s 部署结构和请求追踪改造方案 这个图算是一个通用的前后端分离的 k8s 部署结构: Nginx Ingress 负责暴露服务(nginx前端静态资源服务), 根据十二 ...
- sqli-labs系列——第四关
less4 第四关的sql语句是这样的: select * from user where id=("$id"); ?id=1")–+回显正常 order by 4报错, ...
- Excel模板导出之动态导出
说明 目前Magicodes.IE已支持Excel模板导出时使用JObject.Dictionary和ExpandoObject来进行动态导出,具体使用请看本篇教程. 本功能的想法.部分实现初步源于a ...
- $@ 与 $* 差在哪?-- Shell十三问<第九问>
$@ 与 $* 差在哪?-- Shell十三问<第九问> 要说 $@ 与 $* 之前,需得先从 shell script 的 positional parameter 谈起.我们都已经知道 ...