CN116594861A - 基于模拟执行的Native动态链接库分析方法及系统 - Google Patents

基于模拟执行的Native动态链接库分析方法及系统 Download PDF

Info

Publication number
CN116594861A
CN116594861A CN202310354866.1A CN202310354866A CN116594861A CN 116594861 A CN116594861 A CN 116594861A CN 202310354866 A CN202310354866 A CN 202310354866A CN 116594861 A CN116594861 A CN 116594861A
Authority
CN
China
Prior art keywords
native
jni
function
dynamic link
call
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310354866.1A
Other languages
English (en)
Inventor
傅建明
徐贯虹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan University WHU
Original Assignee
Wuhan University WHU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan University WHU filed Critical Wuhan University WHU
Priority to CN202310354866.1A priority Critical patent/CN116594861A/zh
Publication of CN116594861A publication Critical patent/CN116594861A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明公开了一种基于模拟执行的Native动态链接库分析方法及系统,首先以现有的符号执行工具及其扩展功能为基础,通过对JNI进行建模并hook其底层调用、完善Native层模拟调用处理,从而减少执行过程中的多余分支,有效避免传统符号执行的路径爆炸问题,提高了模拟执行的效率。其次,根据Android应用加载Native动态链接库的机制,模拟Native库加载过程,以满足JNI调用时的依赖,解决二进制文件内的程序混淆与数据加密问题,更加准确地分析Java与Native注册函数映射关系,解决现有的Android应用中跨层数据流分析断点问题。最后记录Native库中的关键JNI行为以及与Java层的交互,生成Native动态链接库的分析结果报告,为进一步的隐私数据泄露检测、漏洞挖掘等研究提供支持。

Description

基于模拟执行的Native动态链接库分析方法及系统
技术领域
本发明属于软件安全程序分析技术领域,涉及一种Native动态链接库分析方法及系统,具体涉及一种基于模拟执行的通过获取Java与Native注册函数映射进而获得Native动态链接库分析方法及系统。
背景技术
随着Android操作系统的广泛应用,越来越多的应用程序使用Native库来实现更高效的代码执行和底层硬件访问。开发人员常常使用Native库来实现一些性能要求较高的功能,如图形处理、音频处理、加密等。Native库是使用C/C++语言编写的动态链接库,可以被Java层代码使用。由于Native库中的函数由C/C++编写,而Java层代码则由Java编写,因此二者的交互存在一定的限制。在Android中,Java层代码通过JNI(Java NativeInterface)技术调用Native库中的函数,实现与底层系统的交互。在Java代码中,可以通过native关键字声明一个方法,并在Native代码中实现这个方法。在Native代码中,需要使用JNI函数RegisterNatives注册这个方法,并将其与Java代码中的方法名和参数类型一一对应。
在对Android应用进行程序分析时,由于Java层与Native层语言的不同以及运行机制的不同,难以对Android应用程序进行统一的分析。现有的Android应用程序分析工具大多忽略了对Native层的分析。工具FlowDroid在数据流分析时选择不考虑连通Native层分析;Wei Fengguo等人设计了静态分析框架JN-SAF,但由于其Native层的数据流分析基于符号执行,存在路径爆炸、容易崩溃等问题,无法用于实际应用中进行大量自动化处理。由此可见,Android应用的跨层数据流分析断点,是对其进行程序分析的一个障碍。
综上,由于Java代码和Native代码是通过JNI(Java Native Interface)进行交互的,因此在进行Android应用安全分析时,需要获取Java与Native注册函数之间的映射关系,以便准确地了解Java层代码和Native层代码之间的函数调用关系,更好地理解应用程序的行为和特征。传统的获取Java与Native注册函数映射的方法通常采用静态分析技术,对应用程序进行反编译或动态调试,但这些方法往往需要大量的人工干预,并且容易受到代码混淆等因素的影响,导致分析结果不准确或不完整;而静态符号执行技术容易产生路径爆炸,并且由于符号执行与真实运行的差异性,分析容易遇到各种未知问题与错误,难以适用于大规模数量实际应用的自动化分析。
发明内容
针对上述背景技术中存在的问题,本发明提出一种基于模拟执行的通过获取Java与Native注册函数映射进而获得Native动态链接库分析方法及系统,该方法利用强符号执行框架为基础,建模JNI结构及其API,模拟Native动态链接库的加载过程,能够对抗控制流混淆、数据混淆、反调试等程序保护手段,对Android应用进行分析,准确、高效地获取Java与Native注册函数之间的映射关系,模拟执行结束后,生成Native动态链接库的分析结果报告。
本发明的方法所采用的技术方案是:一种基于模拟执行的Native动态链接库分析方法,包括以下步骤:
步骤1:以符号执行框架angr为基础,以angr的扩展模块为补充,利用python语言作为符号执行分析框架与其扩展模块以及其他Android程序分析工具、工具与Native动态链接库环境间的连接脚本,构建模拟执行工具;
步骤2:对JNI进行建模,抓取Native底层系统调用、线程API函数调用;
根据JNI的原理与实现机制,在Native层构建JNI的模型,包括Java环境变量的结构体定义与传递、Java对象的模拟、JNI中API函数的声明以及其调用流程的模拟,接入步骤1中构建的模拟执行平台框架;
利用模拟执行工具中JNISimProcedure功能,实现JNI中API函数相应的调用流程模拟,拦截模拟执行过程中JNI的API调用,使其运行工具中编写的模拟流程,以实现对Native库中JNI操作的跟踪和分析;
利用模拟执行工具中JNISimProcedure功能对Native库调用的底层API进行抓取,包括系统调用、文件读写操作、线程处理API;
使用模拟执行工具中的Record模块记录Native动态链接库与Java层交互的JNIAPI调用行为,包括函数调用栈、参数传递、返回值信息;
步骤3:根据Android应用使用Native库的方法以及JNI机制,模拟Native动态链接库加载过程,通过模拟执行去除二进制文件内控制流混淆与数据混淆,满足关键JNI调用的控制流依赖与数据依赖,同时在模拟执行过程中记录JNI交互行为;
步骤4:使用模拟执行工具对Android应用中Native动态链接库进行分析,生成Native动态链接库的分析结果报告,获取Java与Native注册函数映射结果、JNI交互行为记录,及Native动态链接库是否存在.init_array的初始化过程以及程序保护手段。
本发明的系统所采用的技术方案是:一种基于模拟执行的Native动态链接库分析系统,包括以下模块:
模块1,用于以符号执行框架angr为基础,以angr的扩展模块为补充,利用python语言作为符号执行分析框架与其扩展模块以及其他Android程序分析工具、工具与Native动态链接库环境间的连接脚本,构建模拟执行工具;
模块2,用于对JNI进行建模,抓取Native底层系统调用、线程API函数调用;
根据JNI的原理与实现机制,在Native层构建JNI的模型,包括Java环境变量的结构体定义与传递、Java对象的模拟、JNI中API函数的声明以及其调用流程的模拟,接入模块1中构建的模拟执行平台框架;
利用模拟执行工具中JNISimProcedure功能,实现JNI中API函数相应的调用流程模拟,拦截模拟执行过程中JNI的API调用,使其运行工具中编写的模拟流程,以实现对Native库中JNI操作的跟踪和分析;
利用模拟执行工具中JNISimProcedure功能对Native库调用的底层API进行抓取,包括系统调用、文件读写操作、线程处理API;
使用模拟执行工具中的Record模块记录Native动态链接库与Java层交互的JNIAPI调用行为,包括函数调用栈、参数传递、返回值信息;
模块3,用于根据Android应用使用Native库的方法以及JNI机制,模拟Native动态链接库加载过程,通过模拟执行去除二进制文件内控制流混淆与数据混淆,满足关键JNI调用的控制流依赖与数据依赖,同时在模拟执行过程中记录JNI交互行为;
模块4,用于使用模拟执行工具对Android应用中Native动态链接库进行分析,生成Native动态链接库的分析结果报告,获取Java与Native注册函数映射结果、JNI交互行为记录,及Native动态链接库是否存在.init_array的初始化过程以及程序保护手段。
本发明具有以下优势:
(1)提高了Native库的逆向分析效率和准确性:传统的逆向分析方法需要手动查找Java与Native函数的映射关系,容易漏掉部分关键函数,同时传统符号执行则容易出现路径爆炸问题,而该方法通过模拟执行工具,可以自动化地获取Java与Native函数的映射关系,提高了逆向分析的效率和准确性。
(2)适用于不同架构与版本的Android应用及其Native库:该方法基于符号执行框架angr中的Unicorn引擎和JNI以及底层API建模,可以适用于多种架构以及指令集,以及不同版本的Android应用及其Native动态链接库,有较好的通用性和扩展性。
(3)补充了Android应用中跨层数据流的断点:对于Android应用Java与Native层的跨层数据流,该方法获取的Java与Native注册函数映射,补充了其跨层断点,可以为Android应用的隐私数据流分析、恶意行为分析、漏洞挖掘等安全研究提供有力支持。
(4)增加了对JNI交互行为的记录:该方法不仅可以获取Java与Native函数的映射关系,还可以记录JNI交互行为,包括参数传递、返回值等信息,为后续的逆向分析和漏洞挖掘提供了更多的信息。
附图说明
图1为本发明实施例的方法示意图。
图2为本发明实施例中的通过模拟执行分析获取Java与Native注册函数映射的具体方法示意图。
图3为本发明实施例中的模拟执行对抗程序保护手段示意图。
图4为本发明实施例中的模拟执行分析获取Java与Native映射关系的流程图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
为了解决目前Android程序分析中的跨层数据流分析断点,为Android应用隐私数据流污点分析、恶意代码分析、漏洞挖掘等安全研究提供支持,本发明提供的一种基于模拟执行的Native动态链接库分析方法,首先将JNI各API进行建模,同时hook Native层底层API,以支持Android应用Native动态链接库的模拟执行;其次,使用unicorn支持的angr,初始化模拟执行状态,根据Native库加载机制模拟该过程,模拟时解除程序控制流混淆与数据混淆;最后,在模拟执行过程中,分析Java与Native注册函数映射关系,并记录JNI交互行为,为进一步的程序分析工作,诸如隐私数据流分析、恶意代码分析、漏洞挖掘等研究工作,提供有力帮助与支持。
请见图1,具体包括以下步骤:
步骤1:以符号执行框架angr为基础,以angr的扩展模块为补充,利用python语言作为符号执行分析框架与其扩展模块以及其他Android程序分析工具、工具与Native动态链接库环境间的连接脚本,构建模拟执行工具;
本实施例中,符号执行工具基于现有工具angr,符号执行引擎使用angr内置的Unicorn引擎支持。
由于angr主要由python语言工具,因此本实施例利用python语言作为工具与工具、工具与环境间的连接脚本,实现模拟执行工具与其他工具以及执行环境的交互。
本实施例中,解析Android应用的apk文件,利用angr中的Loader模块,加载解析apk文件得到的Native动态链接库文件,分析其对应架构以及指令集。
由于Native动态链接库中存在通过JNI与Java层的交互操作,以及操作系统底层API的调用(例如文件读写、系统属性获取等),本实施例利用angr提供的SimProcedure功能,扩展为JNISimProcedure用于JNI API调用模拟。
完成整个模拟执行工具框架的建立,通过python使用androguard逆向工具补充Java层的native方法信息,使其具备分析Java与Native注册函数映射、JNI行为记录的功能,并在模拟执行分析时记录相应结果。
步骤2:对JNI进行建模,hookNative底层系统调用、线程API函数调用;
本实施例根据JNI的原理与实现机制,在Native层构建JNI的模型,包括JNIVm和JNIEnv等Java传递的环境变量的结构体定义、Java对象的模拟、JNI中API函数的声明以及其调用流程的模拟,接入步骤1中构建的模拟执行平台框架;
本实施例利用模拟执行工具中JNISimProcedure功能,实现JNI中API函数相应的调用流程模拟,拦截模拟执行过程中JNI的API调用,使其运行工具中编写的模拟流程,以实现对Native库中JNI操作的跟踪和分析;
本实施例模拟Java对象(Java Class、Java MethodID、Java FieldID等),满足JNI中涉及到Java对象、需要Java层信息补充的API调用的模拟执行条件。为了满足模拟执行过程中的依赖关系,需要JNI API调用返回恰当的返回值,因此采用如下策略:若返回值为基本数据类型,则使用angr符号执行构造满足即可;若返回值为Java String类对象,特别处理用angr构造字符串返回值,其他Java对象则构造对应Java Object满足。
特别地,处理JNI中用于绑定Native动态注册函数的API调用RegisterNatives,根据其函数定义在模拟执行时解析其函数参数信息,获取动态注册的Native函数的Java方法与Native函数映射关系,如图2所示,具体为:(1)Android APK逆向分析工具androguard解析Java层中的Native方法信息,包括方法名与签名,通过签名匹配Native层的静态注册函数;(2)模拟执行Native动态链接库的初始化部分代码,去除控制流混淆与数据混淆,模拟执行构造后续关键JNI调用依赖;(3)模拟执行过程中调用RegisterNatives的JNISimProcedure时,根据API定义解析运行时函数参数,获取Native动态注册函数信息,包括注册方法名、方法签名以及对应Native注册函数地址。
本实施例利用模拟执行工具中JNISimProcedure功能对Native库调用的底层API进行hook,包括系统调用、文件读写操作、线程处理API等;
本实施例使用模拟执行工具中的Record模块记录Native动态链接库与Java层交互的JNI API调用行为,包括函数调用栈、参数传递、返回值等信息;
步骤3:根据Android应用使用Native库的方法以及JNI机制,模拟Native动态链接库加载过程,通过模拟执行去除二进制文件内控制流混淆与数据混淆,满足关键JNI调用的控制流依赖与数据依赖,同时在模拟执行过程中记录JNI交互行为;
本实施例步骤3的具体实现包括以下子步骤:
步骤3.1:从Native层出发,模拟Native库的加载过程,使用angr的Loader模块加载Native库二进制文件,并识别二进制文件架构及其指令集;
步骤3.2:根据Native库加载机制,得到模拟执行的初始状态init state:
(1)初始化起始地址,对于ARMEL架构下的thumb-2指令集需要处理其起始地址+1;
(2)在初始状态中加入unicorn支持标识选项;
(3)在步骤2的基础上,在初始状态存储jvm和jenv结构体指针,使其对应偏移指向步骤2中JNISimProcedure模拟实现;
步骤3.3:通过angr反汇编分析动态链接库获取其初始化过程中.init、.init_array调用以及JNI_OnLoad调用的地址信息,依次模拟执行,并记录调用各函数的信息:
(1)根据Native动态链接库的加载机制,首先获取动态链接库的.init、.init_array以及JNI_OnLoad函数的地址信息,解析.init_array中的初始化函数列表;
(2)hook初始状态init state起始地址处理初始化过程,模拟执行依次调用.init函数以及.init_array初始化函数列表;
(3)模拟执行.init_array初始化调用函数列表结束后,跳转至JNI_OnLoad函数执行调用,JNI_OnLoad中可能包含大量的JNI操作,JNI操作的依赖已经由步骤2中的JNISimProcedure实现,执行同时记录JNI行为;
(4)对比JNISimProcedure中模拟执行时调用的运行时数据与初始状态initstate中的初始数据,识别数据混淆的存在,请见图3。
步骤4:使用模拟执行工具对Android应用中Native动态链接库进行分析,生成Native动态链接库的分析结果报告,获取Java与Native注册函数映射结果、JNI交互行为记录,及Native动态链接库是否存在.init_array的初始化过程以及混淆等程序保护手段,运行过程如图4所示。
本实施例步骤4的具体实现包括以下子步骤:
步骤4.1:使用前面步骤中构建的模拟执行工具,模拟Native动态链接库的加载过程,分析并记录模拟执行信息;
步骤4.2:在RegisterNatives的JNISimProcedure中分析函数参数并记录Java与Native注册函数之间的映射关系;
步骤4.3:对于其他JNI交互操作,记录关键JNI API的调用情况及其参数;
步骤4.4:生成Native动态链接库的分析结果报告,记录Native注册函数信息以及对应Java方法的映射关系,其他包括Native动态链接库是否存在.init_array的初始化过程以及混淆等程序保护手段、JNI交互操作API调用及其参数等信息。
本发明首先,以现有的符号执行工具及其扩展功能为基础,通过对JNI进行建模、hook底层调用,完善Native层模拟调用处理,减少执行过程中的多余分支,有效避免传统符号执行的路径爆炸问题,提高了模拟执行的效率。其次,根据Android应用加载Native动态链接库的机制,模拟Native库加载过程,以满足JNI调用时的依赖,解决二进制文件内的程序混淆与数据加密问题,更加准确地分析Java与Native注册函数映射关系,解决现有的Android应用中跨层数据流分析断点问题。最后,记录Native库中的关键JNI行为以及与Java层的交互,生成Native动态链接库的分析结果报告,为进一步的隐私数据泄露检测、漏洞挖掘等研究提供支持。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。

Claims (10)

1.一种基于模拟执行的Native动态链接库分析方法,其特征在于,包括以下步骤:
步骤1:以符号执行框架angr为基础,以angr的扩展模块为补充,利用python语言作为符号执行分析框架与其扩展模块以及其他Android程序分析工具、工具与Native动态链接库环境间的连接脚本,构建模拟执行工具;
步骤2:对JNI进行建模,抓取Native底层系统调用、线程API函数调用;
根据JNI的原理与实现机制,在Native层构建JNI的模型,包括Java环境变量的结构体定义与传递、Java对象的模拟、JNI中API函数的声明以及其调用流程的模拟,接入步骤1中构建的模拟执行平台框架;
利用模拟执行工具中的JNISimProcedure功能,实现JNI中API函数相应的调用流程模拟,拦截模拟执行过程中JNI的API调用,使其运行工具中编写的模拟流程,以实现对Native库中JNI操作的跟踪和分析;
利用模拟执行工具中的JNISimProcedure功能,对Native库调用的底层API进行抓取,包括系统调用、文件读写操作、线程处理API;
使用模拟执行工具中的Record模块记录Native动态链接库与Java层交互的JNI API调用行为,包括函数调用栈、参数传递、返回值信息;
步骤3:根据Android应用使用Native库的方法以及JNI机制,模拟Native动态链接库加载过程,通过模拟执行去除二进制文件内控制流混淆与数据混淆,满足关键JNI调用的控制流依赖与数据依赖,同时在模拟执行过程中记录JNI交互行为;
步骤4:使用模拟执行工具对Android应用中Native动态链接库进行分析,生成Native动态链接库的分析结果报告,获取Java与Native注册函数映射结果、JNI交互行为记录,及Native动态链接库是否存在.init_array的初始化过程以及程序保护手段。
2.根据权利要求1所述的于模拟执行的Native动态链接库分析方法,其特征在于:步骤1中,符号执行工具基于现有工具angr,符号执行引擎使用angr内置的Unicorn引擎支持;
解析Android应用的apk文件,利用angr中的Loader模块,加载解析apk文件得到的Native动态链接库文件,分析其对应架构以及指令集;
利用angr提供的SimProcedure功能,扩展为JNISimProcedure用于JNI API调用模拟;
通过python使用androguard逆向工具补充Java层的native方法信息,使其具备分析Java与Native注册函数映射、JNI行为记录的功能,并在模拟执行分析时记录相应结果。
3.根据权利要求1所述的于模拟执行的Native动态链接库分析方法,其特征在于:步骤2中所述模拟执行工具中的JNISimProcedure功能,实现JNI中API函数相应的调用流程模拟,拦截模拟执行过程中JNI的API调用;为满足模拟执行过程中的依赖关系,需JNI API调用返回恰当的返回值,若返回值为基本数据类型,则使用angr符号执行构造满足即可;若返回值为Java String类对象,特别处理用angr构造字符串返回值,其他Java对象则构造对应Java Object满足;
处理JNI中用于绑定Native动态注册函数的API调用RegisterNatives,根据其函数定义在模拟执行时解析其函数参数信息,获取动态注册的Native函数的Java方法与Native函数映射关系,具体为:
(1)Android APK逆向分析工具androguard解析Java层中的Native方法信息,包括方法名与签名,通过签名匹配Native层的静态注册函数;
(2)模拟执行Native动态链接库的初始化部分代码,去除控制流混淆与数据混淆,模拟执行构造后续关键JNI调用依赖;
(3)模拟执行过程中调用RegisterNatives的JNISimProcedure时,根据API定义解析运行时函数参数,获取Native动态注册函数信息,包括注册方法名、方法签名以及对应Native注册函数地址。
4.根据权利要求1所述的于模拟执行的Native动态链接库分析方法,其特征在于:步骤3的具体实现包括以下子步骤:
步骤3.1:从Native层出发,模拟Native库的加载过程,使用angr的Loader模块加载Native库二进制文件,并识别二进制文件架构及其指令集;
步骤3.2:根据Native库加载机制,得到模拟执行的初始状态init state:
(1)初始化起始地址,对于ARMEL架构下的thumb-2指令集需要处理其起始地址+1;
(2)在初始状态中加入unicorn支持标识选项;
(3)在步骤2的基础上,在初始状态存储jvm和jenv结构体指针,使其对应偏移指向步骤2中JNISimProcedure的模拟实现;
步骤3.3:通过angr反汇编分析动态链接库获取其初始化过程中.init、.init_array调用以及JNI_OnLoad调用的地址信息,依次模拟执行,并记录调用各函数的信息:
(1)根据Native动态链接库的加载机制,首先获取动态链接库的.init、.init_array以及JNI_OnLoad函数的地址信息,解析.init_array中的初始化函数列表;
(2)抓取初始状态init state起始地址处理初始化过程,模拟执行依次调用.init函数以及.init_array初始化函数列表;
(3)模拟执行.init_array初始化调用函数列表结束后,跳转至JNI_OnLoad函数执行调用,JNI_OnLoad中可能包含大量的JNI操作,JNI操作的依赖已经由步骤2中的JNISimProcedure实现,执行同时记录JNI行为;
(4)对比JNISimProcedure中模拟执行时调用的运行时数据与初始状态init state中的初始数据,识别数据混淆的存在。
5.根据权利要求1-4任意一项所述的于模拟执行的Native动态链接库分析方法,其特征在于:步骤4的具体实现包括以下子步骤:
步骤4.1:使用构建的模拟执行工具,模拟Native动态链接库的加载过程,分析并记录模拟执行信息;
步骤4.2:在RegisterNatives的JNISimProcedure中分析函数参数并记录Java与Native注册函数之间的映射关系;
步骤4.3:对于其他JNI交互操作,记录关键JNI API的调用情况及其参数;
步骤4.4:生成Native动态链接库的分析结果报告,记录Native注册函数信息以及对应Java方法的映射关系,及Native动态链接库是否存在.init_array的初始化过程以及程序保护手段、JNI交互操作API调用及其参数信息。
6.一种基于模拟执行的Native动态链接库分析系统,其特征在于,包括以下模块:
模块1,用于以符号执行框架angr为基础,以angr的扩展模块为补充,利用python语言作为符号执行分析框架与其扩展模块以及其他Android程序分析工具、工具与Native动态链接库环境间的连接脚本,构建模拟执行工具;
模块2,用于对JNI进行建模,抓取Native底层系统调用、线程API函数调用;
根据JNI的原理与实现机制,在Native层构建JNI的模型,包括Java环境变量的结构体定义与传递、Java对象的模拟、JNI中API函数的声明以及其调用流程的模拟,接入模块1中构建的模拟执行平台框架;
利用模拟执行工具中的JNISimProcedure功能,实现JNI中API函数相应的调用流程模拟,拦截模拟执行过程中JNI的API调用,使其运行工具中编写的模拟流程,以实现对Native库中JNI操作的跟踪和分析;
利用模拟执行工具中的JNISimProcedure功能对Native库调用的底层API进行抓取,包括系统调用、文件读写操作、线程处理API;
使用模拟执行工具中的Record模块记录Native动态链接库与Java层交互的JNI API调用行为,包括函数调用栈、参数传递、返回值信息;
模块3,用于根据Android应用使用Native库的方法以及JNI机制,模拟Native动态链接库加载过程,通过模拟执行去除二进制文件内控制流混淆与数据混淆,满足关键JNI调用的控制流依赖与数据依赖,同时在模拟执行过程中记录JNI交互行为;
模块4,用于使用模拟执行工具对Android应用中Native动态链接库进行分析,生成Native动态链接库的分析结果报告,获取Java与Native注册函数映射结果、JNI交互行为记录,及Native动态链接库是否存在.init_array的初始化过程以及程序保护手段。
7.根据权利要求6所述的于模拟执行的Native动态链接库分析系统,其特征在于:模块1中,符号执行工具基于现有工具angr,符号执行引擎使用angr内置的Unicorn引擎支持;
解析Android应用的apk文件,利用angr中的Loader模块,加载解析apk文件得到的Native动态链接库文件,分析其对应架构以及指令集;
利用angr提供的SimProcedure功能,扩展为JNISimProcedure用于JNI API调用模拟;
通过python使用androguard逆向工具补充Java层的native方法信息,使其具备分析Java与Native注册函数映射、JNI行为记录的功能,并在模拟执行分析时记录相应结果。
8.根据权利要求6所述的于模拟执行的Native动态链接库分析系统,其特征在于:模块2中所述利用模拟执行工具中JNISimProcedure功能,实现JNI中API函数相应的调用流程模拟,拦截模拟执行过程中JNI的API调用;为满足模拟执行过程中的依赖关系,需JNI API调用返回恰当的返回值,若返回值为基本数据类型,则使用angr符号执行构造满足即可;若返回值为Java String类对象,特别处理用angr构造字符串返回值,其他Java对象则构造对应Java Object满足;
处理JNI中用于绑定Native动态注册函数的API调用RegisterNatives,根据其函数定义在模拟执行时解析其函数参数信息,获取动态注册的Native函数的Java方法与Native函数映射关系,具体为:
(1)Android APK逆向分析工具androguard解析Java层中的Native方法信息,包括方法名与签名,通过签名匹配Native层的静态注册函数;
(2)模拟执行Native动态链接库的初始化部分代码,去除控制流混淆与数据混淆,模拟执行构造后续关键JNI调用依赖;
(3)模拟执行过程中调用RegisterNatives的JNISimProcedure时,根据API定义解析运行时函数参数,获取Native动态注册函数信息,包括注册方法名、方法签名以及对应Native注册函数地址。
9.根据权利要求6所述的于模拟执行的Native动态链接库分析系统,其特征在于:模块3的具体实现包括以下子模块:
模块3.1,用于从Native层出发,模拟Native库的加载过程,使用angr的Loader模块加载Native库二进制文件,并识别二进制文件架构及其指令集;
模块3.2,用于根据Native库加载机制,得到模拟执行的初始状态init state:
(1)初始化起始地址,对于ARMEL架构下的thumb-2指令集需要处理其起始地址+1;
(2)在初始状态中加入unicorn支持标识选项;
(3)在模块2的基础上,在初始状态存储jvm和jenv结构体指针,使其对应偏移指向模块2中JNISimProcedure模拟实现;
模块3.3,用于通过angr反汇编分析动态链接库获取其初始化过程中.init、.init_array调用以及JNI_OnLoad调用的地址信息,依次模拟执行,并记录调用各函数的信息:
(1)根据Native动态链接库的加载机制,首先获取动态链接库的.init、.init_array以及JNI_OnLoad函数的地址信息,解析.init_array中的初始化函数列表;
(2)抓取初始状态init state起始地址处理初始化过程,模拟执行依次调用.init函数以及.init_array初始化函数列表;
(3)模拟执行.init_array初始化调用函数列表结束后,跳转至JNI_OnLoad函数执行调用,JNI_OnLoad中可能包含大量的JNI操作,JNI操作的依赖已经由模块2中的JNISimProcedure实现,执行同时记录JNI行为;
(4)对比JNISimProcedure中模拟执行时调用的运行时数据与初始状态init state中的初始数据,识别数据混淆的存在。
10.根据权利要求6-9任意一项所述的于模拟执行的Native动态链接库分析系统,其特征在于:模块4的具体实现包括以下子模块:
模块4.1,用于使用构建的模拟执行工具,模拟Native动态链接库的加载过程,分析并记录模拟执行信息;
模块4.2,用于在RegisterNatives的JNISimProcedure中分析函数参数并记录Java与Native注册函数之间的映射关系;
模块4.3,用于对于其他JNI交互操作,记录关键JNI API的调用情况及其参数;
模块4.4,用于生成Native动态链接库的分析结果报告,记录Native注册函数信息以及对应Java方法的映射关系,及Native动态链接库是否存在.init_array的初始化过程以及程序保护手段、JNI交互操作API调用及其参数信息。
CN202310354866.1A 2023-04-04 2023-04-04 基于模拟执行的Native动态链接库分析方法及系统 Pending CN116594861A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310354866.1A CN116594861A (zh) 2023-04-04 2023-04-04 基于模拟执行的Native动态链接库分析方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310354866.1A CN116594861A (zh) 2023-04-04 2023-04-04 基于模拟执行的Native动态链接库分析方法及系统

Publications (1)

Publication Number Publication Date
CN116594861A true CN116594861A (zh) 2023-08-15

Family

ID=87605136

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310354866.1A Pending CN116594861A (zh) 2023-04-04 2023-04-04 基于模拟执行的Native动态链接库分析方法及系统

Country Status (1)

Country Link
CN (1) CN116594861A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117407048A (zh) * 2023-12-14 2024-01-16 江西飞尚科技有限公司 一种插件化数据处理软件的流程配置方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117407048A (zh) * 2023-12-14 2024-01-16 江西飞尚科技有限公司 一种插件化数据处理软件的流程配置方法及系统
CN117407048B (zh) * 2023-12-14 2024-03-12 江西飞尚科技有限公司 一种插件化数据处理软件的流程配置方法及系统

Similar Documents

Publication Publication Date Title
US9134966B2 (en) Management of mixed programming languages for a simulation environment
EP2359247B1 (en) Transforming user script code for debugging
US9697109B2 (en) Dynamically configurable test doubles for software testing and validation
US7380235B1 (en) Application program interface call replay tool
US9207920B2 (en) Systems and methods for remote analysis of software applications
US7908596B2 (en) Automatic inspection of compiled code
CN116594861A (zh) 基于模拟执行的Native动态链接库分析方法及系统
CN115952758A (zh) 芯片验证方法、装置、电子设备及存储介质
US10997055B2 (en) Methods, circuits, apparatus, systems and associated software modules for evaluating code behavior
CN110704315B (zh) 一种嵌入式软件测试的故障注入装置
US9846631B2 (en) Methods, circuits, apparatus, systems and associated software modules for evaluating code behavior
CN112765032A (zh) 程序调试方法、装置、设备及存储介质
CN111597115A (zh) 一种嵌入式操作系统自动化闭环测试系统及测试方法
Kröll et al. Aristoteles–dissecting apple’s baseband interface
Ren et al. A dynamic taint analysis framework based on entity equipment
CN111475150A (zh) 一种跨语言绑定方法、装置、设备及存储介质
CN115374017A (zh) 一种仿真运行可执行文件时抓取现场的方法及计算设备
Muench Dynamic binary firmware analysis: challenges & solutions
US10445078B2 (en) Layered software architecture model for translation of assembler language to target language
CN114020278A (zh) 数据处理方法、装置、设备及存储介质
Clements et al. Is your firmware real or re-hosted?.
KR102421394B1 (ko) 하드웨어와 소프트웨어 기반 트레이싱을 이용한 악성코드 탐지 장치 및 방법
US20240143489A1 (en) Method for the automated performance of software tests for a program to be tested in an embedded system
Fioraldi Symbolic Execution and Debugging Synchronization
Rinard et al. Inference and Regeneration of Programs that Store and Retrieve Data

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination