没有合适的资源?快使用搜索试试~ 我知道了~
软件X 22(2023)101370原始软件出版物Kunai:Android应用程序的静态分析框架EduardoBlázquez,Juan Tapiador马德里卡洛斯三世大学计算机科学系。Universidad 30,28911 Leganés,马德里,西班牙ar t i cl e i nf o文章历史记录:收到2022年收到修订版,2023年2月20日接受,2023年关键词:Android静态分析软件分析Mobileappsa b st ra ct本文介绍了Kunai,一个为Android应用程序提供静态分析功能的C++库。Kunai的主要目标是为分析师和研究人员提供一个框架,以进行Dalvik代码的高级静态分析,包括解析,反汇编和代码分析。它是用C++编写的,注重效率和可扩展的软件架构,使新的分析模块的集成变得容易。Kunai特别适合开发需要扩展以处理大型应用程序数据集的分析管道。版权所有2023作者。由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本2.0用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX-D-22-00376代码海洋计算胶囊https://codeocean.com/capsule/21c4f71f-80ec-4080-b746-042257979f78法律代码许可证MIT许可证使用git的代码版本控制系统使用C++的软件代码语言、工具和服务编译要求、操作环境依赖性Linux系统和CMake如果可用,链接到开发人员文档/手册https://fare9.github.io/KUNAI-static-analyzer/问题支持电子邮件kunai.static. gmail.com1. 动机和意义Android拥有43.43%的市场份额[1],是目前移动设备使用最多的操作系统创建和轻松上传应用程序到官方商店(Google Play)的可能性这种普及和高市场份额使Android成为恶意应用的广泛目标。虽然谷歌声称已经删除了多达120万个有害应用程序[2],但安全研究人员和威胁情报公司不断发现隐藏在合法应用程序中的恶意软件[3,4]。由于上传的应用程序数量庞大,对大量市场样本进行详尽的动态分析并不总是可行的。出于这个原因,快速静态分析管道通常用于分类和标记具有潜在有害行为的应用程序。静态分析工具还可以用于*通讯作者。电子邮件地址:eduardo. uc3m.es(Eduardo Blázquez),jestevez@inf.uc3m.es(Juan Tapiador)。https://doi.org/10.1016/j.softx.2023.101370在合理的时间内识别大量Android应用程序中的漏洞。例如,可以应用污点分析[5]来发现信息泄漏,甚至可以仅使用静态分析[6虽然静态分析受到已知的限制,但它通常是可扩展的,并补充了动态分析工具提供的发现和证据,因此成为软件分析管道中的基本工具。Android应用的工具生态系统包含来自学术界和工业界的各种开源和闭源工具一方面,有各种各样的工具提供图形用户界面(GUI),如IDA Pro [9],Ghidra [10]或更具体的Android,例如。,Jadx [11].这些工具通常提供无头模式或独立工具,限制其作为另一工具的一部分(例如,,它们必须作为另一个二进制文件调用,或者输出作为普通字符串提供)。另一方面,有多个项目可以用作库,从而集成到更大的代码库中。Soot [12]就是这种情况,它是一个为Java字节码优化而设计的框架,并已扩展到支持Android应用程序。另一个项目,2352-7110/©2023作者。 由Elsevier B.V.出版。这是一篇开放获取的文章,使用CC BY许可证(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxEduardo Blázquez和Juan Tapiador软件X 22(2023)1013702Android研究人员广泛采用的是Androguard [13],这是一个专注于Android应用分析的Python工具和库在我们为大规模研究设计应用程序分析管道的经验中,我们发现由于多种原因,将其中一些工具用作库很困难或不适合手头的任务。在某些情况下,所需的能力没有得到充分的记录,该工具似乎不再得到维护。在其他情况下,数据集的大小(例如,为了在合理的时间内完成分析,需要更有效地实施这一方案。为了解决这些问题,在本文中,我们描述的设计和实现的图书馆,侧重于两个关键点:易用性和性能。1.1. Kunai在本文中,我们介绍了Kunai,一个开源库,旨在提供快速的Dalvik代码分析能力。KunaiKunai还解决了影响Android应用程序现有分析框架的两个问题:自动化功能有限的API和难以扩展新功能的架构。相比之下,Kunai它是用C++编写的,仔细使用适当的数据结构和算法来提高分析性能和资源消耗。 这使得Kunai成为分析Android软件大规模数据集的合适框架。它提供了一个丰富的API,可以在分析对象的集合上操作,分析人员可以在检查过程的不同阶段使用这些对象。Kunai提供了一个访问DEX结构的Dalvik解析器和一个Dalvik代码的反汇编器。受到Andro- guard项目的启发,Kunai还提供了一组分析模块,可以更轻松地管理DEX文件。虽然分析师可以只关注反汇编代码,但Ku- nai遵循最先进的二 进 制 分 析 工 具 的 示 例 [14] , 并 结 合 了 一 个 中 间 表 示(IR),提供了一组精简的指令。与Dalvik字节码中大量的指令相比,这简化了一些分析任务。IR的使用还促进了控制流图(CFG)的构造,并使应用代码优化的机会成为可能。最后,Kunai有一个模块化架构,旨在促进新模块的框架扩展本文的其余部分组织如下。我们首先讨论静态二进制分析工具的结构和功能(第2节)。然后,在第3节中,我们描述了Kunai的架构及其功能,以及图书馆的通用工作流程及其当前的限制。在第4节中,我们提供了一个评估Kunai对Androguard,最广泛使用的Android静态分析工具之一第5节讨论了Kunai在社区中的潜在影响,包括将其作为一个正在进行的大规模分析项目的一部分本文最后总结了我们的贡献,并讨论了目前正在开发的功能(第6节)。2. 静态二元分析静态二进制分析的目的是理解二进制文件,包括其元数据、代码和其他相关信息。一二进制分析工具无法访问源代码,并且在许多情况下,二进制文件被从有助于分析的有用信息中剥离(例如,符号、数据结构、方法边界、代码结构等)。静态二进制分析工具使用文件格式规范以及不同的分析算法和语法来恢复尽可能多的信息,包括头数据,指令,方法和其他代码工件。在本节中,我们将简要介绍静态分析工具遵循的最常见步骤。文件解析。 给定一个已知的文件格式,第一步是使用它来解析二进制对 象并恢复 其结构化 内容。 最常见的 二进制格 式包括Microsoft Windows的可移植可执行文件(PE)[15], UNIX系统的可执行文件和链接格式(ELF)[16]和MacOS系统的Mach-O[17]对于Android系统,Dalvik可执行(DEX)格式包含嵌入在Android应用程序包(APK)文件中的代码。在iOS和iPadOS的情况下,也使用Mach-O,嵌入在ipa文件中。Kunai专注于DEX文件。通过解析这个结构,我们可以恢复有关字符串,内部数据,方法,类和二进制代码的信息- 是的这个步骤产生二进制指令的符号表示(在汇编中)。分解二进制代码的常用算法是线性扫描(从第一个字节到最后一个字节的分解)和递归遍历(下面是代码中的控制流)。由于反汇编过程需要理解操作码,因此它非常依赖于体系结构。Apktool [18]是一个广泛使用的Android反汇编程序Kunai实现了自己的DEX反汇编器,以便对过程进行更多的控制,并提供更精细的指令粒度。有多个库支持不同体系结构(不包括Dalvik代码)的disas-sourcing,例如。[19]或Zydis [20]。反汇编代码分析。一旦汇编代码被恢复,就可以应用不同的分析步骤,这将有助于分析人员最常见的步骤之一是提取函数或方法,通常使用启发式技术[21],因为并非所有文件格式都明确指定函数和/或方法的边界其他有用的分析步骤包括生成调用图(CG)和函数之间的所有交叉引用;映射不同数据的使用(数据访问);或为代码块生成控制流图(CFG)。二进制代码提取。反汇编代码的分析通常非常依赖于体系结构。编译器将代码转换为中间表示(IR),与源代码相比更容易使用。根据类似的原则,有可能将反汇编代码转换为IR,该IR保留汇编代码的语义,但在更容易分析的精简指令集中。不同的IR可以用于此步骤,例如LLVM [22]的LLVM IR,Ghidra使用的P代码或Valgrind [23]的VEX对于Kunai,我们从头开始设计并实现了一个称为MjolnIR的IR,以及从Dalvik到MjolnIRIR代码分析。 IR代码可以表示为CFG。编译器应用的许多分析和优化也可以通过静态二进制分析工具应用于IR。像LLVM这样的一些框架也允许从LLVM IR重新编译回二进制代码。由于IR通常不依赖于体系结构,因此便于进行一般分析。从源代码生成IR和IR优化是Aho等人在[24]或Muchnick在[25]中介绍的众所周知的主题。在相关的工作[26,27]中已经探索了二元分析的IR代码的生成。反编译。这是一个尽最大努力获得接近原始源代码的表示的过程。反编译是基于一些识别程序集中模式的算法·····Eduardo Blázquez和Juan Tapiador软件X 22(2023)1013703代码或IR [28]可以映射到高级语言结构。虽然不是每个工具都提供反编译功能,但拥有与源代码类似的表示形式可以使分析人员更快地进行手动分析。对于依赖于自动分析管道的应用程序,通常不进行此过程,因为它可能需要资源,并且通常对IR代码进行分析就足够了。2.1. 相关工作除了第1节中讨论的工具之外,当前的Android工具生态系统还包括几个设计用于执行其他特定分析任务的框架[29]第二十九话是一个静态分析工具,用于对Android应用程序执行污点分析。FlowDroid依赖于Soot[12]和Dexpler[30]对Android指令的支持。Amandroid[8]是另一个知名的Android污点分析工具,支持组件间数据流分析。JN-SAF[6]是Amandroid的改进版本,包括语言间分析,以便于检查JNI调用。信息流分析也被用于检测恶意信息流泄漏。DroidSafe[31]就是这种情况,它是一个为正确的组件间通信分析而对Android运行时建模的工具Kunai背后的关键思想是提供一个库,这些工具可以依赖于它来应用它们的分析。3. 软件描述Kunai是一个旨在帮助分析师进行分析的库的DEX二进制文件。DEX是一种二进制格式,旨在运行在Dalvik虚拟机(DVM)环境中。DEX文件有自己定义的格式,也有Dalvik字节码运行到DVM中。DEX格式在Android开源项目(AOSP)文档中有完整的文档记录[32]。Kunai为分析师提供了一个丰富的API来访问DEX信息;这在第3.1节中进一步详细介绍。它还提供了一个IR,旨在促进Dalvik代码的分析。该程序是用C++编写的,C++是一种通用的编译语言,在执行时间和能耗等方面都提供了非常好的性能[33]。具体来说,Kunai是基于C++17 [34],因为它提供了一些新的功能,可以简化工具的开发(例如:std::remove_remove用于允许不同的参数类型,或std::optional用于返回可选值)。此外,我们选择使用智能指针(当不再被引用时自动释放内存的指针),以最小化内存占用并避免动态内存管理中的常见问题(例如,存储器泄漏)。3.1. 软件构架图1提供了Kunai内部架构的简化表示。该设计基于静态二进制分析工具的核心组件(参见第2节)。DEX分析部分通过不同对象的接口提供以下模块一个解析器,读取DEX文件格式中的所有结构这些结构可以通过解析器中包含的C++对象访问。Dalvik代码的反汇编程序。Kunai提供了两种反汇编算法(线性扫描和递归遍历).DEX文件不同部分的分析模块(类、方法、字段和字符串)。这个模块提供了一种更抽象、更简单的方法来处理二进制文件的这些部分。分析从解析器接收文件结构,并为每个方法提供来自反汇编器的指令。该架构的一个关键部分是MjolnIR,Kunai与Dalvik字节码相比,这种表示提供了一组更简单的指令,但保持了原始指令的语义。提升过程基于Bartel等人在Dexpler[30]中的工作。MjolnIR代码是基于以前 的 工 作 IR 代 码 的 二 进 制 分 析 [23 , 26 , 27] , 也 在 IR 提 出 的Muchnick在[25]。Kunai通过CFG或静态单分配(SSA)CFG提供对MjolnIR指令的访问。这些图形支持不同优化通道的应用,分析人员可以通过将它们转储到点格式的图形中来轻松可视化。有关MjolnIR的更多详细信息,请参见附录A。Kunai的模块化设计允许分析师选择使用哪些函数,同时避免计算成本更高的步骤(例如,反汇编或交叉引用生成)。因此,如果分析只需要一个头值,就不需要对二进制文件应用在Kunai中,正是出于这个原因,可以只检索DEX头部。此外,模块化架构允许实现扩展所支持格式的新功能。在撰写本文时,也有部分开发工作在支持整个APK格式上,这将同时为各种DEX3.2. 分析工作流程和软件功能本节介绍使用Kunai时的常见工作流程。它的目标是描述不同的分析模块如何一起使用,并提供一个实际的起点使用Kunai。我们建议读者参考项目附录B提供了一个使用Kunai的恶意示例。DEX对象用于表示整个DEX分析。分析员可以检索DEX对象,将文件流和文件大小作为参数传递。在这一步,Kunai只运行DEX解析器(请参见清单1)。1234清单1:使用Kunai库分析DEX文件DEX对象提供对不同实用程序(解析器、反汇编器和分析)的访问,每个实用程序都包含自己的API。清单2显示了解析器的一些为了分析DEX指令,分析人员检索Kunai一旦恢复了指令,我们就可以将分析API应用于Dalvik字节码。项目存储库1con-包含一个反汇编程序的例子,它计算来自一个方法的所有不同指令。并从解析器获得操作码一 个Map对象,反汇编程序返回方法与其指令的链接。1https://github.com/Fare9/KUNAI-static-analyzer/blob/main/example-scripts/campion-counter.cpp·#include KUNAI/DEX/dex.hpp>...自动dex_object =如果(!dex_object->get_parsing_correct()){.}↪→KUNAI::DEX::get_unique_dex_object(dex_file,fsize);··Eduardo Blázquez和Juan Tapiador软件X 22(2023)1013704autodex_parser = dex_object->get_parser(); dex_parser->get_header();dex_parser->get_strings(); dex_parser->get_types();...dex_parser->get_class();Fig. 1. Kunai1 123 24 35 46 5清单2:从DEX结构中获取不同的对象。123清单5:从分析的方法中获取交叉引用。最后,我们可以将Dalvik字节码的二进制提升应用于为此,我们需要一个lifter对象,然后选择一个要lift的方法(请参见清单6)。456清单3: 将反汇编应用于DEX方法。Kunai提供了一组更抽象的类,可以分析DEX文件的不同部分在处理分析对象时,它在内部应用反汇编过程,而不需要检索反汇编程序。分析对象使我们能够更友好地访问类、方法、字符串和领域的分析师还可以决定获取交叉引用这些对象之间的关系(清单4)。1234清单4:分析以获得交叉引用。此时,我们可以开始处理分析对象。例如,我们可以通过类名、方法名和方法原型来检索方法。该对象允许分析人员访问它的交叉引用、指令和解析器提供的信息(清单5)。1234567清单6:方法的提升和控制流图的生成。3.3. 讨论和局限性Kunai是一个相对较新的项目,仍然缺乏一些优化和功能,特别是数据和控制流分析。这些功能目前正在开发中,并将添加到该工具的未来版本中(见第6节)。在Androguard中,分析师可以访问更高级别的抽象,例如反编译代码或抽象树(AST)。这段代码已经被简化并表示为控制流图。然而,它的使用并没有得到充分的记录,我们发现在实践中很难使用它。此外,Androguard项目的这一部分并不打算编写自定义优化。相比之下,Kunai为分析提供了可用的IR,autodex_disassembler = dex_object->get_dex_disassembler();dex_disassembler->set_disassembler_type↪→(KUNAI::DEX::LINEAR_SWEEP_DISTRIBLER);//我们也可以使用↪→KUNAI::DEX::Recursive_TRAVERSAL_DISTRIBLERdex_disassembler-> disassembler_analysis();如果(!dex_disassembler->get_disassembler_correct()){.}汽车指令映射=↪→dex_disassembler->get_instructions();自动class_analysis =↪→dex_analysis->get_class_analysis(““);//检索使用类的类:汽车xref_from= class_analysis->get_xref_from();//检索使用该类的方法:自动方法_外部参照_来自=↪→ class_analysis->get_xref_const_class()汽车dex分析= dex->get_dex_analysis(true);//现在我们创建外部参照,这一步不会运行//如果我们之前设置为falsedex_analysis->create_xref();汽车方法分析=↪→dex_analysis->get_method_analysis_by_name索引自动升降机_android=↪→ (““,““,““);自动图表=↪→std::make_shared KUNAI::LIFTER::LifterAndroid>();↪→lift_android->lift_android_method(方法分析,↪→ dex_analysis);//生成点图&SSAdot graph->generate_dot_file(method_name);autograph_ssa=↪→std::make_shared KUNAI::MJOLNIR::IRGraphSSA>(graph);graph_ssa->generate_dot_fileEduardo Blázquez和Juan Tapiador软件X 22(2023)1013705当前存在大量的开发工作集中于实现优化通行证管理器。Kunai还远远不是一个全面的静态分析框架,如Soot[12]。我们项目的长期想法类似于Soot,SootUp[37]的重新实现。这种重新实现是作为一个库而不是一个整体框架提供的,具有更模块化的设计,以方便不同文件格式的实现和从其他架构中提取的代码在Soot中,已经实现了过程内数据流和控制流分析,以及调用图生成(例如,通过Spark[38])或过程间数据流分析。Kunai专注于通过其在C++中的实现提供高性能分析,以及未来的改进,包括使用线程使一些分析更快。目前计划提供高级分析,例如Soot中的分析,具有潜在的性能改进。Kunai目前不以任何特殊方式处理混淆代码 虽然以前的研究表明,通过IR中的优化来管理混淆代码是可能的,但不可能从删除的名称中获得信息(例如,通过类、方法和变量重命名)或编译器优化,删除了符号名。4. 评价本节以经验为基础评估Kunai的性能(分析时间和内存占用)。作为参考,Andro- guard[13]被用作基准。我们使用Kunai的重构分支[39],对于Androguard,一个包含非官方补丁的分支修复了一个报告的问题[40]。该分析通过仅分析数据集中每个应用的DEX文件来进行,这涉及解析、反汇编和交叉引用分析该评估是在一台配备英特尔至强E5645的服务器上完成的2.40 GHz,24个内核和94.4 GB RAM。为了避免内存或I/O瓶颈,分析是按顺序使用每个工具进行的。4.1. 数据集我们使用两个不同的数据集进行评估。第一个数据集由从最受欢迎的Google Play应用列表中检索的应用组成[41]。总的来说,这些应用程序实现了500万次安装或10,000次评级。这些应用程序是通过基于Android模拟器的爬虫程序和使用Pure Python ADB的Python脚本获得的[42]。我们将爬虫配置为在2022年11月期间下载前500个应用程序,但最终只检索到396个。其余应用程序不适用于(模拟)设备,或者在运行爬虫程序的国家/地区第二个数据集由2010年至2016年期间在野外观察到的62个不同Android恶意软件家族的8,247个应用程序组成。样本来自VX地下站点提供的Argus Col-lection[43]表1总结了用于评价的数据集的关键数字。分析的DEX文件的数量对应于正确分析的文件,对于这些文件,在分析期间没有工具失败(例如,由于损坏的文件、违反文件格式或存在反分析技术)。4.2. 分析时间为了测量Kunai和Andro-guard中的分析运行时,我们使用了 编 程 语 言 提 供 的 类 : C++ 中 的 std : : chrono : :high_resolution_clock和Python中的类时间。分析工作流包括解析DEX头、反汇编字节码、创建分析对象表1用于评价的数据集。数据集#APK文件#DEX文件#分析的DEX文件500强39620942092恶意软件824782468244总8,64310,34010,336最后,创建DEX组件之间的交叉引用(xref)。所有分析的DEX文件获得的结果如图所示。二、该图显示了使用Kunai获得的加速因子相对于使用Androguard的相同分析。我们通过将使用我们的工具获得的分析时间除以使用Androguard获得的每个DEX文件的时间来计算这个加速因子。我们发现Kunai在Top-500和恶意软件应用程序的95.61%和98.71%的情况下分别比Androguard快。只有1.58%的情况下,Kunai没有比Androguard更快地完成分析,尽管这些情况下的差异很小。平均加速系数为4.6,19.1分别针对Top-500和Malware应用程序。请注意,当DEX代码的大小只有几MB时,加速因子要大得多(在10倍和200倍之间)。我们目前正在调查Kunai比Androguard慢的情况,因为它们可能为未来的代码改进提供有价值的见解。4.3. 内存占用由于Kunai主要用于分析大型数据集,因此我们还获得了这两种工具的内存占用。我们使用了GNU time工具,它为我们提供了分析内存使用情况的过程。图 3显示结果。与分析运行时的情况一样,为了进行比较,我们计算了一个改进因子在本例中是内存减少因子。Kunai在Top-500和 Malware 数 据集 中的 DEX 文 件平 均占 用的 内存 分 别比Androguard少2.6和我们发现,很少有工具的内存占用较大的情况在Top-500数据集中。与分析运行时的情况一样,对于较小的DEX文件,改进要大得多,其中内存占用减少的范围从2倍到10倍不等。对于较大的DEX文件,改进稳定在2x-3x范围4.4. 验证为了验证Kunai,我们创建了一个精简的8个Java程序集,并使用d8[44]编译它们,d8是Android提供的命令行工具,用于将Java代码编译为DEX字节码。程序包括不同的代码结构,如字段,类,方法,异常,if/else/switch等。生成的DEX文件使用dexdump[45]手动分析,这是AOSP提供的一种工具,可以从DEX文件中提取头文件并反汇编代码,也可以使用Kunai。我们手动检查Kunai分解的指令是否正确,并将其与dexdump生成的指令进行比较。我们还获得了使用Kunai从每个文件中提取一组交叉引用,并手动验证它们。总的来说,我们在所有情况下都观察到了正确的输出我们还测量了使用Kunai和Androguard获得的分析数据之间的差异。为此,我们从Top-500和恶意软件数据集中的所有应用程序中获取了以下元素:classanalysis,classes,field_xref_read,field_xref_write,fieldanalysis,fields,instructions,method_xref_read,method_xref_write,methodanalysis,methods,str_xref_from,stringanalysis和strings。我们没有在分析中包括以下项目,因为Androguard没有获得它们:类型,protos,classes_xref_from,Eduardo Blázquez和Juan Tapiador软件X 22(2023)1013706图二. 加速Kunai对抗Androguard。图3.第三章。Kunai对Androguard 的内存使用减少。classes_xref_to、classes_xref_const_class、class_xref_new_instance、method_xref_const_class、method_xref_from、method_xref_new_instance和method_xref_to。对于数据集中的每个应用程序,我们计算两种工具产生的每个分析元素的数量之间的差异,总是从Androguard产生的项目中减去Kunai产生的项目。结果提供于图1A和1B中。图4和图5示出了具有差异(改善因子)分布的箱形图。为了便于数据的正确可视化,我们将结果限制在图1中的75k的改进因子。 4,和一个20k在图。 五、正如预期的那样,Kunai为数字生成相同的值的指令、类和方法。然而,我们的工具能够检索大量的字段,类/方法/字段分析和交叉引用。字符串数量的差异是由于Androguard从string_data_item中恢复字符串,而Kunai返回string_id_item中的字符串。前者可以很容易地添加到Kunai。5. 影响Kunai是欧盟研究项目TRUST AWARE的一部分,该项目旨在开发改进的工具,对软件组件进行安全和隐私分析的方法。Kunai被设计为自动化逆向工程的框架,是研究中用于表征Android生态系统某些方面( 例 如 , , Blázquez et al. [46] and Gamba et al.[47] ) 。 在TRUST AWARE项目中,我们目前正在进行一些研究,这些研究涉及使用Kunai对Android生态系统进行大规模测量。Kunai克服了当前Android应用程序分析工具中存在的效率和可扩展性限制库API是 与其他框架没有太大的不同,这有助于将其集成到目前依赖于另一个框架的开源或商业工具中。当底层静态分析器被确定为性能瓶颈时,重构这些工具以集成Kunai可能会很有用。使用Kunai将有助于实现更快的工作流程。Kunai对于从事安全和隐私分析以外领域的研究人员来说非常有用该框架有助于分析Android应用程序的大型数据集,这有助于进行需要分析重要应用程序语料库的研究因此,我们希望Kunai能够引起经验软件工程和Android生态系统测量等领域研究人员的兴趣。Eduardo Blázquez和Juan Tapiador软件X 22(2023)1013707图四、 Google Play数据集中的信息改进。图五. 恶意软件数据集中的信息改进。Eduardo Blázquez和Juan Tapiador软件X 22(2023)1013708::=::=::=::=::=::=::=:=::=::=::=:=::=:=::=::=::=:=::=:=::=:=::=:=::=:=6. 结论本文介绍了Kunai,一个为Android应用程序提供静态分析框架的C++库。Kunai提供分析师和表A.2MjolnIR说明书规范。IRStmntIRUJmp| IRCJmp|IRRet| IRBlock| IRNop|IRSwitch研究人员与软件功能,以实现自定义| IRExprIRUJmp::=jmp地址静态分析管道。它的效率使得它特别适合需要分析Android应用程序的大型数据集的研究。此外,KunaiKunai的未来工作将提高IR分析的效率,并将实现几个数据和控制流分析(例如,死代码消除和常数传播),这将有助于更干净的表示。竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作数据可用性文章中描述的研究未使用任何数据致谢这项工作得到了欧盟地平线2020研究和创新计划的支持,资助协议编号为101021377(TRUST AWARE);西班牙资助ODIO(PID2019 - 111429 RB-C21 ) 和 马 德 里 地 区 资 助 CYNAMON-CM(P2018/TCS- 4566),由欧洲结构基金ESF和西班牙FEDER共同资助。所表达的观点、发现、结论或解释是作者的观点,不一定反映任何资助者的观点作 者 还 要 感 谢 Georges-Bastien Michel 、 Matteo Favaro 、Jonathan Salwan、Antonio Nappa、Aymar Cublier、Javier López和Alejandro Calleja,他们为Kunai的设计提供了有用的反馈、参考和技术讨论。附录A. MjolnIR,KunaiDalvik是一个虚拟机,它使用字节码表示指令,这是表示的变化 Java的字节码,而后者是基于堆栈的字节码,前者是基于虚拟机寄存器的。虽然字节码指令集不像微处理器(大约250个来自Dalvik,相对于总共981个独特的助记符和总共3684个指令变体,根据Mahoney等人的x86-64)。[48]),具有IR允许更简单的优化算法,在精简的指令集中捕获来自所分析的平台的指令的语义。MjolnIR是基于先前为二进制分析创建的IR [23,26,27]以及Muchnick在[25]中提出的中级中间表示(MIR在表A.2中,我们给出了MjolnIR语言的表示,其中包含所有可用的指令,我们建议读者参考存储库[35]以获得更详细的表格版本我们设计了MjolnIR,以满足我们在以前的研究中为Dalvik字节码编写分析工具时的需求。虽然可以使用其他可用的IR,如LLVM IR,但我们拒绝了这个想法,因为这些IR应该在C++项目中可用(例如,,LLVM IR是用C++编写的),而且应该很容易抽象Dalvik字节码。我们发现像LLVM这样的IR很难适应。目前的设计,虽然是集中在达尔维克,允许IRCJmpif(IRStmnt)jmp地址NEXT Fallthrough地址IRRetRet IRStmntIRBlockIRStmnt1、IRStmnt2、. . .,IRStmntNIRExprIRBinOp| IRUnaryOp|IRAssign| IRPhi |IRCall |IRLoad| IRStore| IRZComp|IRBComp|IR A l l o c a |I R T y p e |IRTypeIRBinOpIRExpr IRExpr bin_op_t IRExprIRUnaryOpIRExpr unary_op_t IRExprIRAssignIRExpr IRExprIRPhiIRExprPhi(IRExpr1,IRExpr2,. . .,IRExpr2)IRCallIRExpr(IRExpr1,IRExpr2,. . .,IRExprN)IRLoadIRExpr *IRExprIRStore*IRExpr IRExprIRZCompIRExr zero_comp_tIRBCompIRExpr comp_t IRExprIRNewIRExpr new IRExprIRAllocaIRExpr new IRExpr[IRExpr]IRTypeIRReg| IRTempReg|IRConstInt| IRConstInt| IRMemory|IRString| IRCallee| IRClass|IRFundamental| NoneIRFundamentalF_布尔|F_字节|F _CHAR| F_FLOAT| F_INT|F_长| F_短|F_无效在MjolnIR的顶部,我们构建了一个控制流图(CFG),并从CFG可以获得一个静态单分配(SSA)的形式,这将使其他分析更简单。这些图提供了不同的实用程序,可用于进一步分析。 我们提供了一个优势分析,以及一个到达定义分析,让分析师访问use-def和def-use链,可视化是可能的转储点格式的版本正在进行的工作。目前,我们正在实现一个PassManager,它允许分析师为指令、基本块和整个方法实现优化通道。 一部分在优化过程中,我们还实现了死代码消除、常量传播和复制传播。这些优化将使图形视图更清晰,并且还可以用于代码去模糊。附录B. 说明性示例本附录提供了如何在涉及恶意软件分析的安全事件响应环境中使用Kunai的说明性示例。具体来说,我们使用一个著名的软件度量发现潜在的重要功能,在最近的恶意软件样本。我们使用的度量是圈复杂度[49],它根据函数的结构(分支、循环、嵌套控制流结构等)计算函数的复杂度。Kunai通过从Dalvik的字节码到MjolnIR的提升器生成的图来计算这种复杂性虽然这个指标与检测恶意代码的问题无关,但它可以用于标记恶意软件样本中的有趣方法。我们将分析应用于FluBot恶意软件家族的样本。2作为使用的代表性示例,我们遵循以下步骤:1. 正在解析APK文件。2. 将分析传递应用于类、方法、字段和字符串。不同架构的扩展,保持指令集简单,并有机会实现不同的分析通道。2 这是一个很好的例子。我很高兴。com/gui/file/f790fe0a3542868ec41f16657f022c084e25eabc353b0174e5fd748a2cdfc6baEduardo Blázquez和Juan Tapiador软件X 22(2023)10137093. 恢复包中的方法。4. 提升代码到MjolnIR指令以获得循环复杂度。5. 分析找到的最复杂的方法该示例的代码可以在工具存储库中找到。3由于我们将避免代码重复,我们建议读者检查第3.2节中每个步骤的描述。分析将应用于APK文件。因此,我们需要使用Kunai的apk模块,并且我们还使用代码升降器。要分析APK,我们
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功