首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 逆向】Android 中常用的 so 动态库 ( libdvm.so | libart.so | libandroid_runtime.so | libandroidfw.so )

文章目录 一、Android 虚拟机涉及的 libdvm.so 动态库 和 libart.so 动态库 二、Android 运行时相关 libandroid_runtime.so 动态库 三、Android...Framework 层 Native 实现相关 libandroidfw.so 动态库 一、Android 虚拟机涉及的 libdvm.so 动态库 和 libart.so 动态库 ---- libdvm.so...动态库是 Android 的 Dalvik 虚拟机使用的动态库 ; Android 5.0 及以下系统使用 Dalvik 虚拟机 ; libart.so 动态库是 Android 的 Art 虚拟机使用的动态库..., 使用 64 位 IDA 分析该动态库 ; 二、Android 运行时相关 libandroid_runtime.so 动态库 ---- libandroid_runtime.soAndroid...分析该动态库 ; 三、Android Framework 层 Native 实现相关 libandroidfw.so 动态库 ---- libandroidfw.soAndroid 的 Framework

2.6K20

android 加载so过程分析

在实现android插件化过程中,在插件代码中加载so时出现了一些问题,因此特地研究了一下android系统中加载so的过程,记录下来,整理成文。...在android系统中,加载so一般会调用System.loadLibrary(name)或者是System.load(path),这两个函数都可以用来加载so文件,区别在于System.loadLibrary...这两个函数本质上都是一样的,只是搜索so的搜索目录略有差别。下面以System.loadLibrary函数为例来分析加载so的实现原理。...的真正的文件路径;2:调用nativeLoad函数去实现真正的so加载;这里会牵扯到一个问题,如何通过so的名称去ClassLoader拿到so真正的文件路径?...文件,而DexClassLoader可以加载任意路径的apk/jar文件(此文件路径需要可执行权限),两者间的具体差别请参考developer.android.com。

87421
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    libyuv编译Android平台so

    在之前的Android FFmpeg系列09--抽帧与快速抽帧文章里用到了libyuv来将FFmpeg解码的视频AVFrame统一转化为RGBA格式输出 这篇文章我们来简单聊聊Android平台下libyuv...so的编译和使用 两年前写过类似文章libyuv的编译与使用,当时是AS直接导入libyuv源码进行编译,今天我们在终端窗口用ndk-build来完成so的编译 源码下载 git clone https...LOCAL_MODULE := libyuv_unittest include $(BUILD_NATIVE_TEST) 添加Application.mk 指定输出so的架构平台和Android版本...ndk-build 编译过程 编译产物 使用示例 将头文件和编译产物libs目录下的so导入AS中 CmakeLists.txt引入 # libyuv set(libyuv_lib_dir...IMPORTED ) set_target_properties(yuv PROPERTIES IMPORTED_LOCATION ${libyuv_lib_dir}/libyuv.so

    1.6K30

    Android如何调用so文件

    4.易于复用:用本地代码开发的代码不仅在Android中使用,还可嵌入到其他类型平台上使用。 使用C\C++开发的代码通常编译成so文件对外提供,以便在安卓或其他类型平台上使用。...最近在尝试编译C\C++代码产生so文件的时候总结发现so文件的编译产生方式大概经历了3个阶段: 第一个阶段:通过Android.mk文件和Application.mk文件编译产生so文件; 第二个阶段...下面通过一个安卓调用C++代码打印字符串的实例介绍一下在Android Studio中使用最新的编译方式编译出so文件的步骤。 第一步:新建工程 新建工程:打开AS,新建工程。 ? ?...2)编译路径指定:android目录下的是告诉程序如何去编译,path是CMakeLists.txt文件目录的地址。...但在新版的Android Studio中已经支持直接创建Native C++的工程,在这个工程中直接集成了所有需要配置编译so的文件,可以在这类项目的基础上进行修改编译出目标so文件,更加简单方便。

    10.5K81

    Android 逆向】Android 中常用的 so 动态库 ( systemliblibc.so 动态库 | libc++.so 动态库 | libstdc++.so 动态库 )

    文章目录 一、拷贝并分析 Android 中的 /system/lib/libc.so 动态库 二、拷贝并分析 Android 中的 /system/lib/libc++.so 动态库 三、拷贝并分析...Android 中的 /system/lib/libstdc++.so 动态库 总结 一、拷贝并分析 Android 中的 /system/lib/libc.so 动态库 ---- /system/lib..., 要先加载 /system/bin/linker 库 , 这是 so 动态库的加载模块 , 该动态库中 , 主要是实现了 dlopen 方法 ; 二、拷贝并分析 Android 中的 /system...++.so /sdcard/Pictures 使用 64 位的 IDA 打开上述动态库 ; 搜索 std , 即可查看常用的标准库中的函数 ; 三、拷贝并分析 Android 中的 /system/.../libc++.so 动态库 和 /system/lib/libstdc++.so 动态库 都依赖于 libc.so 动态库 ;

    2.3K30

    Android so的热升级尝试

    作者:张志伟 团长:腾讯移动品质中心TMQ 一、So的热升级尝试 在Android代码中,加载so库是通过调用System.loadLibrary函数实现的。...但和Android的许多特性一样,只提供了加载,而没有卸载和更换等功能。 为了研究能否实现卸载和升级等功能,首先要了解清楚JNI so加载的流程。...So库也可以不实现JNI_Onload函数,而是采用自动查找的方式。 Android虚拟机会在首次调用JNI函数时按照JNI规范的命名规则自动查找。...通过分析Android代码,这种方法最终也会调用到上图中的dvmSetNativeFunc等函数,将函数地址保存到虚拟机中供下次调用。...二、卸载及重新加载 如果想要提供热升级的能力,首先要做的是关闭已打开的so文件。但Android虚拟机没有提供unloadLibrary这样的接口,因此需要我们自己自己实现。

    1.6K00

    Android安全-SO动态库注入

    0x1 原理 所谓的SO注入就是将代码拷贝到目标进程中,并结合函数重定向等其他技术,最终达到监控或改变目标进程行为的目的。...Android是基于Linux内核的操作系统,而在Linux下SO注入基本是基于调试API函数ptrace实现的,同样AndroidSO注入也是基于ptrace函数,要完成注入还需获取root权限。...获取并保存目标进程寄存器值; 0x03 获取目标进程的dlopen,dlsym函数的绝对地址; 0x04 获取并保存目标进程的堆栈,设置dlopen函数的相关参数,将要注入的SO...0x08 恢复目标进程的堆栈,恢复目标进程寄存器值,解除关联,完成SO动态库注入; (注:实际上,0x06和0x07并不属于SO动态库注入的步骤,然而仅仅注入是完全没有意义的,通常我们需要执行...调用ptrace_writedata(pid, (void *)regs.ARM_sp, (void *)so_path, strlen(so_path) + 1),其中so_path为SO的绝对路径。

    2.6K20

    Android Studio开发so库实践

    项目中调用.so动态库 Eclipse的如何通过NDK生成so库就不多说了,目前已经不适用于Android开发,建议使用AS进行开发,本篇也是基于AS来进行讲解。...创建Android.mk和Application.mk文件 在jni目录下,我们需要创建两个mk文件 Android.mk LOCAL_PATH := $(call my-dir) include $(...配置gradle 在defaultConfig下,配置ndk: ndk { moduleName "JNIDemo" // 生成的so名字 } 在android...执行ndk-build命令生成所有cpu架构的so库 ? 然后就可以在libs目录下看到所有平台的so库: ? 至此,完整的so库实践基本完毕,期间遇到任何问题均可留言,欢迎讨论交流。...最后 关于NDK开发so库会有很多坑,本篇博客也只是引大家入门,我们在使用第三方的SDK的时候,就可能会用到别人提供的so库,也可能会遇到使用so库出现问题,有很多原因,可能是提供了不同的cpu架构的so

    1.4K20

    Android so的热升级尝试

    一、So的热升级尝试 在Android代码中,加载so库是通过调用System.loadLibrary函数实现的。但和Android的许多特性一样,只提供了加载,而没有卸载和更换等功能。...So库也可以不实现JNI_Onload函数,而是采用自动查找的方式。 Android虚拟机会在首次调用JNI函数时按照JNI规范的命名规则自动查找。...通过分析Android代码,这种方法最终也会调用到上图中的dvmSetNativeFunc等函数,将函数地址保存到虚拟机中供下次调用。...二、卸载及重新加载 如果想要提供热升级的能力,首先要做的是关闭已打开的so文件。但Android虚拟机没有提供unloadLibrary这样的接口,因此需要我们自己自己实现。...CRASH 卸载so后,除了JNI函数的指针,其它指向so地址的指针也都会失效,包括指向静态变量,常量,native函数的指针等。所有引用到该so地址的指针都需要更新。

    1.6K20

    Android逆向之旅—SO(ELF)文件格式详解–反编译so

    第一、前言 从今天开始我们正式开始Android的逆向之旅,关于逆向的相关知识,想必大家都不陌生了,逆向领域是一个充满挑战和神秘的领域。...作为一名android开发者,每个人都想去探索这个领域,因为一旦你破解了别人的内容,成就感肯定爆棚,不过相反的是,我们不仅要研究破解之道,也要研究加密之道,因为加密和破解是相生相克的。...今天我们先来介绍一下elf文件的格式,因为我们知道Android中的so文件就是elf文件,所以需要了解so文件,必须先来了解一下elf文件的格式,对于如何详细了解一个elf文件,就是手动的写一个工具类来解析一个...2、readelf -S xxx.so 查看so文件的段(Section)头的信息 ? 3、readelf -l xxx.so 查看so文件的程序段头信息(Program) ?...4、readelf -a xxx.so 查看so文件的全部内容 ?

    26.2K1916

    Android 调用so库全过程

    文件 三、Androidso文件的编译平台 Android中在进行NDK开发的时候,都知道因为机型杂而多的原因,没有一个大的标准,所以很多厂商都会采用不同型号的cpu,那么在编译so文件的时候,就需要进行交叉编译出多个...四、Androidso加载流程 在Android中如果想使用so的话,首先得先加载,加载现在主要有两种方法,一种是直接System.loadLibrary方法加载工程中的libs目录下的默认so文件...五、Android中类加载器关联so路径 上面分析so加载过程中可以发现有一个地方,就是通过类加载器来获取到so的路径,那么Android中的主要类加载器有两个,一个是PathClassLoader和...七、Android中64位系统如何兼容32位的so 上面分析完了,so文件的释放工作,下面继续来看一下如果一个64位系统的Android设备如何做到能够运行32位的so文件,这个就需要从应用的启动说起了...上面就全部分析完了Android中关于so加载的相关内容: 1、so编译平台问题 2、so加载流程分析 3、so文件释放功能分析 4、so文件兼容功能分析 5、插件中so文件调用功能分析 九

    6.4K21

    Android逆向之动态分析so

    本期,斗哥将给大家带来Android逆向的动态分析,简述Android动态分析环境配置与IDA调试so文件。...0X02 动态分析 这里的动态分析主要使用IDA和adb命令配合Android模拟器来分析so 1.动态环境配置 将IDA安装目录E:\IDA 7.0\dbgsrv下 符合Android安装系统位数的...android_server push到Android目录下(本系统是X86) ?...查看到Android的进程。 ? 双击要调试的进程,IDA将加载到so,IDA进行动态分析。 ? 双击可以为相应的代码打上断点,F9重新开始调试,程序将停在断点处,就能开始调试so文件。...0X03 小小总结 Android逆向之动态分析so篇就介绍到这里啦!下期我们将进入Android逆向之动态分析smail篇的学习。若在文章的学习过程中遇到问题,欢迎给斗哥留言。

    3.7K30
    领券