小研究 - Android 字节码动态分析分布式框架(一)

安卓平台是个多进程同时运行的系统,它还缺少合适的动态分析接口。因此,在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架,无法为实现更加灵活、通用的动态分析工具的开发提供支持。此外,很多研究只是针对单进程的分析,在安卓平台多个应用进程协作完成事务的情境下,则无法进行很好的分析。

目录

1  绪论

1.1 研究背景

1.2 当前分析技术及难点

1.3 本文的解决方案

1.4 本章小结


1  绪论

随着智能手机的普及,Android 系统作为主要的移动操作系统平台,有着广泛的应用。安卓平台的火爆也吸引了大量的开发者和应用,用户越来越离不开移动系统以及上面的丰富的应用。然而由于安卓市场的开放性,第三方市场的存在,安卓应用的质量良莠不齐,用户的体验和数据安全受到了不小的挑战。程序分析作为一种有效的技术,一直被广泛采用在软件领域。作为程序分析重要的一种,动态分析因为能够在运行时检测应用程序,分析应用程序行为和状态,以及对目标进行丰富而灵活的诊断,一直是研究领域一个重要的课题。

本文通过对 Android 系统的研究和开发,实现了一个高效、可扩展,同时支持多进程分析的分布式的动态分析框架,能够使分析者方便的进行动态分析。框架为用户提供丰富的事件,使得用户能够通过编写高层语言的 Java 代码即可方便的进行动态分析的开发。本文通过两个案例实验验证本框架的正确性,并充分展现出本框架的研究以及实用价值。

1.1 研究背景

自发布以来,Android 系统凭借开放源代码的方式以及其丰富的应用市场,迅速获得消费者的青睐。Android 系统在智能手机市场中占有很大的比例。在享受应用带来的便利的同时,用户也在不断追求更好的交互体验和安全保障。然而用户也要面对随之而来的安卓系统的安全问题 [1, 2] 。不严格的安全审查以及第三方市场的合法性,导致 Android 恶意应用程序广泛存在,严重威胁用户的手机安全和隐私。安卓手机安全迅问题速成为业界和学术界的研究焦点。

1.2 当前分析技术及难点

当前对一般程序进行分析的技术,主要包含静态分析和动态分析两种。

静态分析,是指在不运行程序的情况下,从程序的静态源代码或者二进制文件入手,利用词法分析、语法分析、程序控制流分析等手段对程序进行分析并研究程序行为的技术。能够被用来检测程序的规范性、安全性、可靠性等指标,广泛被用于测试和程序验证。静态程序分析不需要在执行时进行,因而与运行平台独立,不依赖于运行时环境;且静态分析往往具有很高的执行效率,能够进行快速的检测。尽管如此,静态分析由于缺乏运行时的信息,在很多分析场合下往往不能够精确地分析程序的行为,造成较高的误判或者漏判。因而一般来说,单纯的静态分析不能完全满足程序分析的需要。因此,实现一个高效、易用、功能强大的动态分析框架,有很大的研究价值。

1.3 本文的解决方案

针对 1.2 节提出的难点,本文提出了一个针对安卓多进程进行全面分析的高可用、灵活可靠、易扩展、分布式的基于字节码注入的分析框架,该框架通过将安卓系统中不同虚拟机进程的分析事件收集到影子虚拟机(ShadowVM [13] )里解析,并保证事件执行的顺序性,从而实现一个全面的安卓平台的异步动态分析。

主要贡献包括:

(1)为了能够让安卓系统提供 JVMTI 类似的接口,以完善动态分析需要的虚拟机事件,本文修改了 Dalvik 虚拟机的实现,提供了动态分析需要的虚拟机事件;

(2)为了解决字节码注入的难题,提高字节码注入的可靠性,本文采取了一个间接注入的策略。通过开源的 dex2jar 把 DVM 的字节码转换成 JVM 的字节码,再利用 JVM 上成熟的框架 DiSL 来进行注入,最后再转回 DVM 字节码,并为所有注入开辟了一个注入通道,使得实现全覆盖的注入成为可能;

(3)为了能够在目标虚拟机与分析服务建立通信,在安卓系统增加一个系统服务 ACS(Analysis Communication Service),来实现原先通过 Java Agent 实现的通信模块;

(4)为了能够实现多进程的分析,本文继续拓展了 ShadowVM 框架,扩展了其原先的单进程模型,并针对安卓跨进程调用(Inter process call,简称 IPC)Binder 系统库进行扩展,在影子虚拟机中实现了 Binder 相关的事件,从而能够将影子虚拟机分析与安卓系统的 IPC 调用事件结合。这些 Binder 事件能够将不同进程的事件联系起来,极大丰富了本文动态分析框架的功能;

(5)此外,本文还针对发送事件采用共享内存的方式来降低性能开销,使得系统更具有实用性。

1.4 本章小结

本章首先介绍了安卓平台的发展,以及当前安卓应用市场的问题,说明了当前为安卓应用程序进行程序分析的必要性和重要性。接着结合主流的程序分析技术,介绍了静态分析以及动态分析的特点,通过对比 Dalvik 虚拟机与 JVM 的差别,分析了在安卓进行动态分析的难点。最后,简单介绍了本文解决上述难点的思路和技术要点,阐述了本文的主要贡献。

接下来的文章内容按如下方式进行组织:第二章通过详细描述本文依赖的主要技术点,并通过与已有工作的比较来进一步说明本文框架的创新点和实用意义;第三章介绍了本文框架的宏观设计;第四章则结合实现来描述本文框架是如何被构建起来的;第五章为实验的实例部分,结合两个实例来介绍框架的运行模式以及强大功能。第六章对文章进行了总结,并展望了未来可以继续完成的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/52433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 查询(当天,月,年)的数据

Trunc 在oracle中,可利用 trunc函数 查询当天数据,该函数可用于截取时间或者数值,将该函数与 select 语句配合使用可查询时间段数据 查询当天数据 --sysdate是获取系统当前时间函数 --TRUNC函数用于截取时间或者数值,返回指定的…

【Go 基础篇】Go语言匿名函数详解:灵活的函数表达式与闭包

介绍 在Go语言中,函数是一等公民,这意味着函数可以像其他类型的值一样被操作、传递和赋值。匿名函数是一种特殊的函数,它没有固定的函数名,可以在代码中被直接定义和使用。匿名函数在Go语言中具有重要的地位,它们常用…

Leetcode.73矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean[] row new boolean[m];boolean[] col…

机器学习基础之《分类算法(5)—朴素贝叶斯算法原理》

一、朴素贝叶斯算法 1、什么是朴素贝叶斯分类方法 之前用KNN算法,分类完直接有个结果,但是朴素贝叶斯分完之后会出现一些概率值,比如: 这六个类别,它都有一定的可能性 再比如,对文章进行分类:…

算法leetcode|73. 矩阵置零(rust重拳出击)

文章目录 73. 矩阵置零:样例 1:样例 2:提示:进阶: 分析:题解:rust:go:c:python:java: 73. 矩阵置零: 给定一个 m x n 的矩…

【PHP】函数-作用域可变函数匿名函数闭包常用系统函数

文章目录 函数定义&使用命名规则参数种类默认值引用传递函数返回值return关键字 作用域global关键字静态变量 可变函数匿名函数闭包常用系统函数输出函数时间函数数学函数与函数相关函数 函数 函数:function,是一种语法结构,将实现某一个…

Activity 的启动流程(Android 13)

Activity 的启动过程分为两种:一种是普通 Activity 的启动过程,另一种是根 Activity 的启动过程。普通 Activity 指的是除应用程序启动的第一个 Activity 之外的其他 Activity。根 Activity 指的是应用程序启动的第一个 Activity,因此&#x…

智能指针使用

最近在复习C的一些相关知识,正好把智能指针重新梳理一遍。 智能指针 作用 为什么需要智能指针?说白了就是为了更加“方便智能”的管理内存,当使用原始指针有时候会因为忘记释放内存,从而导致内存泄漏 。智能指针则可以帮我们释放…

如何在PHP中使用字符串

引言 字符串是由一个或多个字符组成的序列,可以由字母、数字或符号组成。所有的书面通信都是由字符串组成的。因此,它们是任何编程语言的基础。 在本文中,您将学习如何创建和查看字符串的输出,如何使用转义序列,如何连…

学历提升的途径,到底有哪些?5步带你搞清楚!

提升学历的方式有哪些? 目前提升有四种形式,分别是统招全日制、自学考试、成人高考、国家开放大学。 它们都是国家承认的学历,学信网可查,可以考公务员、研究生。 统招全日制含金量最高。 之前有一种形式是网络教育&#xff0…

Azure不可变Blob存储

文章目录 Azure不可变Blob存储介绍Azure不可变性策略实战演练 Azure不可变Blob存储介绍 不可变的存储是一种用于存储业务关键型 Blob 数据的存储方式。与可变存储相反,不可变存储的特点是一旦数据被写入后,便无法再对其进行修改或删除。这种存储方式提供…

【leetcode 力扣刷题】交换链表中的节点

24. 两两交换链表中的节点 24. 两两交换链表中的节点两两节点分组,反转两个节点连接递归求解 24. 两两交换链表中的节点 题目链接:24. 两两交换链表中的节点 题目内容: 题目中强调不能修改节点内部值,是因为如果不加这个限制的话…

实验室信息化管理系统的优势及发展趋势

随着现代化实验室的快速发展,实验室数据的管理和处理已经不再是单纯的人工填写、计算和报表编制,实验室管理工作的复杂性和艰巨性与日俱增,传统实验室的管理模式已经无法满足实验室管理的需求。为了解决这些问题,LIMS(…

Windows下编译NextCloud desktop 3.9.1

首先从官方下载源码: https://github.com/nextcloud/desktop💻 Desktop sync client for Nextcloud. Contribute to nextcloud/desktop development by creating an account on GitHub.https://github.com/nextcloud/desktop 我选择的是3.9.1的稳定版本…

Elasticsearch(十二)搜索---搜索匹配功能③--布尔查询及filter查询原理

一、前言 本节主要学习ES匹配查询中的布尔查询以及布尔查询中比较特殊的filter查询及其原理。 复合搜索,顾名思义是一种在一个搜索语句中包含一种或多种搜索子句的搜索。 布尔查询是常用的复合查询,它把多个子查询组合成一个布尔表达式,这些…

栈:后进先出的数据结构

栈与队列 在计算机科学中,栈(Stack)是一种常见的数据结构,它的特殊性在于遵循后进先出(Last-In-First-Out,LIFO)的原则。栈被广泛应用于各种计算机算法和程序设计中,它的简单而有效…

Spring 为什么使用三级缓存解决循环依赖

文章目录 前言1. 什么是循环依赖1.1 互相依赖1.2 递归依赖 2. Sping中循环依赖有什么问题?3. 什么是三级缓存4. Spring 可以解决哪些情况的循环依赖? 二级缓存作用——普通循环依赖实操环节1. 实例化类A对象2. 实例化类B对象3. B对象完成创建4.继续创建A…

数字图像处理—— Lab、YCbCr、HSV、RGB之间互转

Lab “Lab” 图像格式通常指的是 CIELAB 色彩空间,也称为 Lab 色彩空间。它是一种用于描述人类视觉感知的颜色的设备无关色彩空间,与常见的 RGB 和 CMYK 色彩空间不同。CIELAB 由国际照明委员会(CIE)于1976年定义,用于…

数据驱动工作效率提升的5个层次—以PreMaint设备数字化平台为例

在现代工业领域,数据分析已成为提升工作效率和优化生产的不可或缺的工具。从描述性分析到规范性分析,数据分析逐步揭示了设备运行和维护的深层信息,帮助企业更明智地做出决策。本文将以PreMaint设备数字化平台为例,探讨工业数据驱…

反转链表(C++)

1、迭代法的一种写法 ListNode* reverse_linkList(ListNode* head){if(head nullptr || head->next nullptr) return head;ListNode* begin nullptr;ListNode* mid head;ListNode* end head->next;while(true){mid->next begin;if(end nullptr){break;}begin …