CN116594861A - 基于模拟执行的Native动态链接库分析方法及系统 - Google Patents
基于模拟执行的Native动态链接库分析方法及系统 Download PDFInfo
- 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
- simulation
- function
- execution
- 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
Links
- 238000004088 simulation Methods 0.000 title claims abstract description 128
- 238000004458 analytical method Methods 0.000 title claims abstract description 63
- 230000006870 function Effects 0.000 claims abstract description 126
- 238000000034 method Methods 0.000 claims abstract description 108
- 230000008569 process Effects 0.000 claims abstract description 63
- 238000013507 mapping Methods 0.000 claims abstract description 31
- 230000003993 interaction Effects 0.000 claims abstract description 23
- 230000007246 mechanism Effects 0.000 claims abstract description 20
- 238000012545 processing Methods 0.000 claims abstract description 10
- 239000008186 active pharmaceutical agent Substances 0.000 claims description 61
- 238000012546 transfer Methods 0.000 claims description 9
- 230000002452 interceptive effect Effects 0.000 claims description 7
- 230000003068 static effect Effects 0.000 claims description 6
- 239000013589 supplement Substances 0.000 claims description 5
- 238000010276 construction Methods 0.000 claims description 3
- 230000006399 behavior Effects 0.000 abstract description 18
- 238000005065 mining Methods 0.000 abstract description 6
- 238000004880 explosion Methods 0.000 abstract description 5
- 238000011160 research Methods 0.000 abstract description 5
- 238000001514 detection method Methods 0.000 abstract description 2
- 238000005206 flow analysis Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009469 supplementation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/3604—Analysis of software for verifying properties of programs
- G06F11/3612—Analysis of software for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于模拟执行的Native动态链接库分析方法及系统,首先以现有的符号执行工具及其扩展功能为基础,通过对JNI进行建模并hook其底层调用、完善Native层模拟调用处理,从而减少执行过程中的多余分支,有效避免传统符号执行的路径爆炸问题,提高了模拟执行的效率。其次,根据Android应用加载Native动态链接库的机制,模拟Native库加载过程,以满足JNI调用时的依赖,解决二进制文件内的程序混淆与数据加密问题,更加准确地分析Java与Native注册函数映射关系,解决现有的Android应用中跨层数据流分析断点问题。最后记录Native库中的关键JNI行为以及与Java层的交互,生成Native动态链接库的分析结果报告,为进一步的隐私数据泄露检测、漏洞挖掘等研究提供支持。
Description
技术领域
本发明属于软件安全程序分析技术领域,涉及一种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调用及其参数信息。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117407048A (zh) * | 2023-12-14 | 2024-01-16 | 江西飞尚科技有限公司 | 一种插件化数据处理软件的流程配置方法及系统 |
-
2023
- 2023-04-04 CN CN202310354866.1A patent/CN116594861A/zh active Pending
Cited By (2)
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 |
---|---|---|
AU2019262864B2 (en) | Execution control with cross-level trace mapping | |
EP2359247B1 (en) | Transforming user script code for debugging | |
US9134966B2 (en) | Management of mixed programming languages for a simulation environment | |
US7380235B1 (en) | Application program interface call replay tool | |
US9063766B2 (en) | System and method of manipulating virtual machine recordings for high-level execution and replay | |
US9727436B2 (en) | Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests | |
US9697109B2 (en) | Dynamically configurable test doubles for software testing and validation | |
Romano et al. | An empirical study of bugs in webassembly compilers | |
US20100153693A1 (en) | Code execution with automated domain switching | |
US10614227B2 (en) | Method and system for identifying functional attributes that change the intended operation of a compiled binary extracted from a target system | |
US7908596B2 (en) | Automatic inspection of compiled code | |
Sen et al. | Jalangi: a tool framework for concolic testing, selective record-replay, and dynamic analysis of JavaScript | |
CN102722438A (zh) | 一种内核调试的方法和设备 | |
CN116594861A (zh) | 基于模拟执行的Native动态链接库分析方法及系统 | |
CN111597115A (zh) | 一种嵌入式操作系统自动化闭环测试系统及测试方法 | |
US7512938B2 (en) | Typed intermediate representation for object-oriented languages | |
He et al. | SeeWasm: An Efficient and Fully-Functional Symbolic Execution Engine for WebAssembly Binaries | |
Kotselidis et al. | Cross-ISA debugging in meta-circular VMs | |
Malmain et al. | LibAFL QEMU: A library for fuzzing-oriented emulation | |
CN116340081A (zh) | 一种基于硬件虚拟化的riscv内存访问违例检测方法及装置 | |
CN113918950A (zh) | 一种基于模拟执行的沙箱构建方法 | |
Pasternak et al. | Genutest: a unit test and mock aspect generation tool | |
Fioraldi | Symbolic Execution and Debugging Synchronization | |
Kong et al. | Automated testing of environment-dependent programs-a case study of modeling the file system for Pex | |
Wu et al. | FirmDep: Embedded Application Rehosting Assisted with Dynamic Analysis. |
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 |