CN117370979A - 一种系统软件脱壳方法及装置 - Google Patents
一种系统软件脱壳方法及装置 Download PDFInfo
- Publication number
- CN117370979A CN117370979A CN202311302432.3A CN202311302432A CN117370979A CN 117370979 A CN117370979 A CN 117370979A CN 202311302432 A CN202311302432 A CN 202311302432A CN 117370979 A CN117370979 A CN 117370979A
- Authority
- CN
- China
- Prior art keywords
- function
- dex
- file
- actively
- dex file
- 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
- 238000000034 method Methods 0.000 title claims abstract description 45
- 230000006870 function Effects 0.000 claims abstract description 215
- 230000008439 repair process Effects 0.000 claims abstract description 30
- 238000001914 filtration Methods 0.000 claims abstract description 12
- 230000007246 mechanism Effects 0.000 claims abstract description 10
- 230000008569 process Effects 0.000 claims description 18
- 238000010276 construction Methods 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 6
- 230000002265 prevention Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000007493 shaping process Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种系统软件脱壳方法及装置,其中,方法包括:开启脱壳线程,如果当前运行的应用程序为目标脱壳程序,利用系统机制在Native层的缓存中获取原始DEX文件,即O_DEX文件,从O_DEX文件中读取类和函数信息,借助配置中心提供的类和函数白名单对类和函数信息进行过滤,对过滤后函数进行主动调用;拦截主动调用的函数,强制让主动调用的函数进入解释器执行通道,在解释器处再次拦截主动调用的函数,记录主动调用的函数所属O_DEX文件的内存位置和大小,将主动调用的函数对应函数体的字节码写入比特文件中,当所有O_DEX文件对应的比特文件写入完毕后,下载O_DEX文件得到D_DEX文件;通过自定义修复组件将D_DEX文件与比特文件合并,得到新DEX文件。
Description
技术领域
本文件涉及计算机技术领域,尤其涉及一种系统软件脱壳方法及装置。
背景技术
软件加壳技术是一种广泛应用的软件保护技术,能够保护应用程序不被篡改,然而恶意攻击者却利用加壳技术隐藏恶意代码,模糊恶意代码与正常代码之间的边界,导致恶意代码难以被检测和分析,因此需研发高效精准的脱壳技术,以应对日益严峻的软件安全问题。
相关技术中,常用的脱壳方案有AppSpear、DexHunter、PackerGrind、Fupk3、DroidUnpack及FART,上述技术方案对部分壳是有效的,但普遍存在一定缺陷:在Java层获取Dex文件,导致容易被壳程序在Native层反击;无法深入到解释器,壳程序可能在脱壳点后进行字节码还原,导致脱壳失败;脱壳后的Dex文件需要额外手动修复,自动化程度较低。
综合以上该技术领域发展状况分析,现有的技术中缺少在Native层获取Dex文件,深入到解释器并自动修复的系统软件脱壳方法及装置。
发明内容
本发明的目的在于提供一种系统软件脱壳方法及装置,旨在解决现有技术中的上述问题。
根据本公开实施例的第一方面,提供一种系统软件脱壳方法,包括:
在应用程序进程启动后开启脱壳线程,如果当前运行的应用程序为目标脱壳程序,利用系统机制在Native层的缓存中获取原始DEX文件,即O_DEX文件,从O_DEX文件中读取类和函数信息,借助配置中心提供的类和函数白名单对类和函数信息进行过滤,得到过滤后类和函数,对过滤后函数进行主动调用;
拦截主动调用的函数,强制让主动调用的函数进入解释器执行通道,在解释器处再次拦截主动调用的函数,记录主动调用的函数所属O_DEX文件的内存位置和大小,将主动调用的函数对应函数体的字节码写入以内存位置和大小命名的比特文件中,当所有O_DEX文件各自对应的比特文件写入完毕后,利用内存位置和大小下载O_DEX文件,得到D_DEX文件;
通过自定义修复组件将D_DEX文件与比特文件合并,得到新DEX文件。
根据本公开实施例的第二方面,提供一种系统软件脱壳装置,包括:
主动调用模块,用于在应用程序进程启动后开启脱壳线程,如果当前运行的应用程序为目标脱壳程序,利用系统机制在Native层的缓存中获取原始DEX文件,即O_DEX文件,从O_DEX文件中读取类和函数信息,借助配置中心提供的类和函数白名单对类和函数信息进行过滤,得到过滤后类和函数,对过滤后的函数进行主动调用;
脱壳模块,用于拦截主动调用的函数,强制让主动调用的函数进入解释器执行通道,在解释器处再次拦截主动调用的函数,记录主动调用的函数所属O_DEX文件的内存位置和大小,将主动调用的函数对应函数体的字节码写入以内存位置和大小命名的比特文件中,当所有O_DEX文件各自对应的比特文件写入完毕后,利用内存位置和大小下载O_DEX文件,得到D_DEX文件;
DEX文件修复模块,用于通过自定义修复组件将D_DEX文件与比特文件合并,得到完整DEX文件。
本发明实施例提供的技术方案包括以下有益效果:在Native层的缓存中获取原始DEX文件使其不容易被反制,深入到解释器脱壳防止脱壳点之后的字节码还原,实现了函数级别脱壳的同时,提升了脱壳的成功率;DEX文件的自动修复提高了DEX文件修复的效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的系统软件脱壳方法的流程图;
图2是本发明实施例的写入比特文件的示意图;
图3是本发明实施例的DEX文件修复的示意图;
图4是本发明实施例的自定义修复组件的示意图;
图5是本发明实施例的自动化脱壳框架的示意图;
图6是本发明实施例的自动化脱壳实施流程的示意图;
图7是本发明实施例的系统软件脱壳装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个实施例中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本文件的保护范围。
技术用语说明:
DEX文件:系统应用程序的可执行文件,包含应用程序的代码和资源。
加壳技术:对DEX文件的隐藏,防止DEX文件被反编译回代码。
脱壳技术:在应用程序运行的某个阶段还原完整的DEX文件。
方法实施例
根据本发明实施例,提供了一种系统软件脱壳方法,图1是本发明实施例的系统软件脱壳方法的流程图,如图1所示,根据本发明实施例的系统软件脱壳方法具体包括:
在步骤S110中,在应用程序进程启动后开启脱壳线程,如果当前运行的应用程序为目标脱壳程序,利用系统机制在Native层的缓存中获取原始DEX文件,即O_DEX文件,从O_DEX文件中读取类和函数信息,借助配置中心提供的类和函数白名单对类和函数信息进行过滤,得到过滤后类和函数,对过滤后函数进行主动调用。具体包括:
在加壳的应用程序进程启动后,当系统执行完壳程序Application对象的onCreate方法后,在合适的时机开启脱壳线程,即开始脱壳操作。
系统通过ClassLinker加载原始的O_DEX文件,本实施例中O_DEX文件为原始的DEX文件,通过ClassLinker将加载过的每一个O_DEX文件对应的Native_DexFile对象保存在dex_caches_中,通过dex_caches_判断O_DEX文件是否被加载过。利用系统机制从dex_caches_中获取所有已加载进内存的O_DEX文件对应的Native_DexFile对象,在Native层成功获取O_DEX文件中类和函数信息。
使用GetClassDescriptor函数从Native_DexFile对象获取类的描述符,得到完整的类名;对类名进行白名单过滤,得到过滤后类,即只处理应用程序本身的类,不处理系统类、Java类和一些第三方库类;获取过滤后类,通过GetDeclaredMethods函数获取过滤后类的所有函数对应的ArtMethod对象,即Native层对应的映射对象;通过调用ArtMethod对象的PrettyMethod函数获取函数完整的函数名,对函数名进行黑名单过滤,得到过滤后函数,避免主动调用过程中被壳程序插入检测函数。
使用函数参数构造法构造数量正确的空参数,只需触发壳程序对被调用函数进行字节码还原,而不需要执行真正函数,因此不需要构造正确的参数,使用ArtMethod对象的NumArgRegisters方法获取函数参数的数量;通过主动调用标识对需要进行主动调用的过滤后函数进行标识,函数的调用通过ArtMethod对象的Invoke函数触发,由于主动调用的函数不会被真正执行,使用没有其它用途的参数result记录主动调用标识,使用任何整数无符号四字节整形数据作为主动调用标识,在本实施例中使用的主动调用标识为2112006244,根据空参数和主动调用标识对过滤后函数进行主动调用。
在步骤S120中,拦截主动调用的函数,强制让主动调用的函数进入解释器执行通道,在解释器处再次拦截主动调用的函数,记录主动调用的函数所属O_DEX文件的内存位置和大小,将主动调用的函数对应函数体的字节码写入以内存位置和大小命名的比特文件中,当所有O_DEX文件各自对应的比特文件写入完毕后,利用内存位置和大小下载O_DEX文件,得到D_DEX文件。
具体包括:
修改系统源码中ArtMethod::Invoke函数,以实现从参数result中读取整形数据,如果在函数中能够获取到主动调用标识2112006244,确定该函数为主动调用的函数,将主动调用的函数进行拦截;通过GetCodeItem函数获取函数体,如果主动调用的函数中函数体为空,则直接结束,如果主动调用的函数中函数体不为空,根据不同的函数类型构造不同的函数调用,即根据函数类型是静态函数还是非静态函数构造不同参数量的函数调用,静态函数不需要传入调用对象,通过使用函数调用,强制让主动调用的函数进入解释器执行通道,本实施例使用的解释器为Switch解释器。
使用多个比特文件保存不同O_DEX文件中函数体的字节码,将不同O_DEX文件下函数体的字节码分开保存,因此比特文件与O_DEX文件是一一对应的关系,本实施例维护一个文件句柄池,打开比特文件写入时,从管理比特文件名称的文件句柄池中查找是否存在该比特文件对应的文件句柄,如果存在直接将字节码写入,否则将新的文件句柄存入文件句柄池中,创建对应的比特文件,再写入字节码;通过ArtMethod对象的GetDexFile函数反向获得Native_DexFile对象,以DEX文件在内存位置和大小作为比特文件名。
图2是本发明实施例的写入比特文件的示意图,如图2所示,展示了将主动调用的函数对应函数体的字节码写入比特文件的过程,即通过调用ArtMethod对象的GetCodeItem方法获取函数体codeItem成员变量;使用CodeItemDataAccessor封装函数体的描述信息,如字节码数量、try/catch块数量等;计算函数体中指令大小,从函数体中复制字节码并编码为base64字符串,从ArtMethod对象中获取函数索引methodIndex;将描述信息、指令大小、base64字符串及函数索引组装成JSON字符串,将JSON字符串写入以内存位置和大小命名的比特文件中。
保存所有不同O_DEX文件的内存位置和大小,利用内存位置和大小一次性将所有O_DEX文件下载下来,得到D_DEX文件,将保存下来的内存位置和大小作为D_DEX文件的文件名,其中,下载下来的D_DEX文件包括文件信息、类信息、函数信息和调试信息等其它数据,缺少函数体的信息。
在步骤S130中,通过自定义修复组件将D_DEX文件与比特文件合并,得到新DEX文件。具体包括:
对D_DEX文件进行解析得到相应的DEX对象;将D_DEX文件对应的比特文件读取到内存,解析JSON字符串,创建以解析的函数索引作为key,以解析的base64字符串作为value的map结构体;遍历DEX对象中的函数并提取函数索引,在map结构体中查找是否存在该函数索引的key值,将存在的key值对应的value进行base64解析得到解析函数体,将解析函数体写入DEX对象中;遍历结束后将DEX对象写入新DEX文件,得到新DEX文件后脱壳结束。图3是本发明实施例的DEX文件修复的示意图,如图3所示,展示了将D_DEX文件与比特文件合并的完整过程。
本实施例修复组件在dx源码基础上进行二次开发,其中,修复组件是一个独立项目,编译后生成DEX文件,存放在软件系统的外置存储空间SDcard中。图4是本发明实施例的自定义修复组件的示意图,如图4所示,操作自定义修复组件具体包括:
创建自定义ClassLoader对象,将修复组件DEX文件的路径作为文件加载路径传输给自定义ClassLoader,自定义ClassLoader的父ClassLoader设置为当前应用程序的ClassLoader;当需要进行DEX文件修复时,调用自定义ClassLoader对象的loadClass函数加载修复组件中的DexFixer类;系统使用双亲委托机制进行类加载,因此自定义ClassLoader将加载DexFixer类的任务交给其父类,即父ClassLoader,由于修复组件DEX文件不在应用程序ClassLoader的DEX文件路径中,加载任务回到自定义ClassLoader上,自定义ClassLoader从其DEX文件加载路径中找到修复组件DEX文件,并在该文件中找到DexFixer类;将修复组件DEX文件加载到内存,并返回DexFixer类对象;获取到DexFixer类对象后,调用其中的fixDex函数开始修复DEX。
综上所述,针对现状存在的问题,本次发明一种系统软件脱壳方法,在Native层的缓存中获取原始DEX文件使其不容易被反制;函数级别的主动调用实现更细致的脱壳过程,提高了脱壳效率的同时,降低了被检测函数检测到脱壳行为的风险;深入到解释器脱壳防止脱壳点之后的字节码还原,使脱壳点更深入,提升了脱壳的成功率;DEX文件的自动修复提高了DEX文件修复的效率,最终实现完整的、精准的自动化脱壳。
以下结合附图,对本发明实施例的上述技术方案进行举例说明。
图5是本发明实施例的自动化脱壳框架的示意图,如图5所示,展示了自动化脱壳框架中核心的主动调用组件、脱壳组件及DEX文件修复组件;图6是本发明实施例的自动化脱壳实施流程的示意图,如图6所示,展示了完整的自动化脱壳实施流程。
装置实施例
根据本发明实施例,提供了一种系统软件脱壳装置,图7是本发明实施例的系统软件脱壳装置的示意图,如图7所示,根据本发明实施例的系统软件脱壳装置具体包括:
主动调用模块70,用于在应用程序进程启动后开启脱壳线程,如果当前运行的应用程序为目标脱壳程序,利用系统机制在Native层的缓存中获取原始DEX文件,即O_DEX文件,从O_DEX文件中读取类和函数信息,借助配置中心提供的类和函数白名单对类和函数信息进行过滤,得到过滤后类和函数,对过滤后的函数进行主动调用。主动调用模块70具体用于:
在加壳的应用程序进程启动后,当系统执行完壳程序Application对象的onCreate方法后,开启脱壳线程。
系统通过ClassLinker加载原始的O_DEX文件,通过ClassLinker将加载过的每一个O_DEX文件对应的Native_DexFile对象保存在dex_caches_中,通过dex_caches_判断O_DEX文件是否被加载过。
通过从Native_DexFile对象获取类的描述符,得到完整的类名;对类名进行白名单过滤,得到过滤后类,获取过滤后类的所有函数对应的ArtMethod对象,通过调用ArtMethod对象内部方法获取函数完整的函数名,对函数名进行黑名单过滤,得到过滤后函数。
使用函数参数构造法构造数量正确的空参数,通过主动调用标识对需要进行主动调用的过滤后函数进行标识,根据空参数和主动调用标识对过滤后函数进行主动调用。
脱壳模块72,用于拦截主动调用的函数,强制让主动调用的函数进入解释器执行通道,在解释器处再次拦截主动调用的函数,记录主动调用的函数所属O_DEX文件的内存位置和大小,将主动调用的函数对应函数体的字节码写入以内存位置和大小命名的比特文件中,当所有O_DEX文件各自对应的比特文件写入完毕后,利用内存位置和大小下载O_DEX文件,得到D_DEX文件。
脱壳模块72具体用于:
如果在函数中能够获取到主动调用标识,确定该函数为主动调用的函数,将主动调用的函数进行拦截;如果主动调用的函数中函数体为空,则直接结束,如果主动调用的函数中函数体不为空,根据不同的函数类型构造不同的函数调用,通过使用函数调用,强制让主动调用的函数进入解释器执行通道。
使用多个比特文件保存不同O_DEX文件中函数体的字节码,打开比特文件写入时,从管理比特文件名称的文件句柄池中查找是否存在该比特文件对应的文件句柄,如果存在直接将字节码写入,否则将新的文件句柄存入文件句柄池中,创建对应的比特文件,再写入字节码;
通过调用ArtMethod对象的内部方法获取函数体;封装函数体的描述信息,计算函数体中指令大小,从函数体中复制字节码并编码为base64字符串,从ArtMethod对象中获取函数索引;将描述信息、指令大小、base64字符串及函数索引组装成JSON字符串,将JSON字符串写入以内存位置和大小命名的比特文件中。
保存所有不同O_DEX文件的内存位置和大小,利用内存位置和大小一次性将所有O_DEX文件下载下来,得到D_DEX文件,将保存下来的内存位置和大小作为D_DEX文件的文件名。
DEX文件修复模块74,用于通过自定义修复组件将D_DEX文件与比特文件合并,得到完整DEX文件。DEX文件修复模块74具体用于:
对D_DEX文件进行解析得到相应的DEX对象;将D_DEX文件对应的比特文件读取到内存,解析JSON字符串,创建以解析的函数索引作为key,以解析的base64字符串作为value的map结构体;遍历DEX对象中的函数并提取函数索引,在map结构体中查找是否存在该函数索引的key值,将存在的key值对应的value进行base64解析得到解析函数体,将解析函数体写入DEX对象中;遍历结束后将DEX对象写入新DEX文件。
综上所述,针对现状存在的问题,本次发明一种系统软件脱壳装置,在Native层的缓存中获取原始DEX文件使其不容易被反制;函数级别的主动调用实现更细致的脱壳过程,提高了脱壳效率的同时,降低了被检测函数检测到脱壳行为的风险;深入到解释器脱壳防止脱壳点之后的字节码还原,使脱壳点更深入,提升了脱壳的成功率;DEX文件的自动修复提高了DEX文件修复的效率,最终实现完整的、精准的自动化脱壳。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种系统软件脱壳方法,其特征在于,包括:
在应用程序进程启动后开启脱壳线程,如果当前运行的应用程序为目标脱壳程序,利用系统机制在Native层的缓存中获取原始DEX文件,即O_DEX文件,从所述O_DEX文件中读取类和函数信息,借助配置中心提供的类和函数白名单对所述类和函数信息进行过滤,得到过滤后类和函数,对过滤后函数进行主动调用;
拦截主动调用的函数,强制让所述主动调用的函数进入解释器执行通道,在所述解释器处再次拦截所述主动调用的函数,记录所述主动调用的函数所属所述O_DEX文件的内存位置和大小,将所述主动调用的函数对应函数体的字节码写入以所述内存位置和大小命名的比特文件中,当所有O_DEX文件各自对应的比特文件写入完毕后,利用所述内存位置和大小下载O_DEX文件,得到D_DEX文件;
通过自定义修复组件将所述D_DEX文件与所述比特文件合并,得到新DEX文件。
2.根据权利要求1所述的方法,其特征在于,所述在应用程序进程启动后开启脱壳线程具体包括:在加壳的应用程序进程启动后,当系统执行完壳程序Application对象的onCreate方法后,开启脱壳线程。
3.根据权利要求1所述的方法,其特征在于,所述利用系统机制在Native层的缓存中获取原始DEX文件具体包括:
系统通过ClassLinker加载原始的O_DEX文件,通过所述ClassLinker将加载过的每一个O_DEX文件对应的Native_DexFile对象保存在dex_caches_中,通过所述dex_caches_判断O_DEX文件是否被加载过。
4.根据权利要求3所述的方法,其特征在于,所述从所述O_DEX文件中读取类和函数信息,借助配置中心提供的类和函数白名单对所述类和函数信息进行过滤,得到过滤后类和函数具体包括:
通过从所述Native_DexFile对象获取类的描述符,得到完整的类名;对所述类名进行白名单过滤,得到过滤后类,获取所述过滤后类的所有函数对应的ArtMethod对象,通过调用所述ArtMethod对象内部方法获取函数完整的函数名,对所述函数名进行黑名单过滤,得到过滤后函数。
5.根据权利要求1所述的方法,其特征在于,所述对过滤后函数进行主动调用具体包括:
使用函数参数构造法构造数量正确的空参数,通过主动调用标识对需要进行主动调用的所述过滤后函数进行标识,根据所述空参数和所述主动调用标识对过滤后函数进行主动调用。
6.根据权利要求5所述的方法,其特征在于,所述拦截主动调用的函数,强制让所述主动调用的函数进入解释器执行通道具体包括:
如果在函数中能够获取到所述主动调用标识,确定该函数为主动调用的函数,将所述主动调用的函数进行拦截;如果所述主动调用的函数中函数体为空,则直接结束,如果所述主动调用的函数中函数体不为空,根据不同的函数类型构造不同的函数调用,通过使用所述函数调用,强制让所述主动调用的函数进入解释器执行通道。
7.根据权利要求1所述的方法,其特征在于,所述记录所述主动调用的函数所属所述O_DEX文件的内存位置和大小,将所述主动调用的函数对应函数体的字节码写入以所述内存位置和大小命名的比特文件中具体包括:
使用多个比特文件保存不同O_DEX文件中函数体的字节码,打开所述比特文件写入时,从管理所述比特文件名称的文件句柄池中查找是否存在该所述比特文件对应的文件句柄,如果存在直接将所述字节码写入,否则将新的文件句柄存入所述文件句柄池中,创建对应的比特文件,再写入所述字节码;
通过调用ArtMethod对象的内部方法获取函数体;封装所述函数体的描述信息,计算所述函数体中指令大小,从所述函数体中复制字节码并编码为base64字符串,从所述ArtMethod对象中获取函数索引;将所述描述信息、所述指令大小、所述base64字符串及所述函数索引组装成JSON字符串,将所述JSON字符串写入以所述内存位置和大小命名的比特文件中。
8.根据权利要求1所述的方法,其特征在于,所述当所有O_DEX文件各自对应的比特文件写入完毕后,利用所述内存位置和大小下载O_DEX文件,得到D_DEX文件具体包括:
保存所有不同O_DEX文件的所述内存位置和大小,利用所述内存位置和大小一次性将所有O_DEX文件下载下来,得到D_DEX文件,将保存下来的所述内存位置和大小作为D_DEX文件的文件名。
9.根据权利要求7所述的方法,其特征在于,所述通过自定义修复组件将所述D_DEX文件与所述比特文件合并,得到新DEX文件具体包括:
对所述D_DEX文件进行解析得到相应的DEX对象;将所述D_DEX文件对应的所述比特文件读取到内存,解析所述JSON字符串,创建以解析的所述函数索引作为key,以解析的所述base64字符串作为value的map结构体;遍历所述DEX对象中的函数并提取函数索引,在map结构体中查找是否存在该函数索引的key值,将存在的所述key值对应的value进行base64解析得到解析函数体,将所述解析函数体写入所述DEX对象中;遍历结束后将所述DEX对象写入新DEX文件。
10.一种系统软件脱壳装置,其特征在于,包括:
主动调用模块,用于在应用程序进程启动后开启脱壳线程,如果当前运行的应用程序为目标脱壳程序,利用系统机制在Native层的缓存中获取原始DEX文件,即O_DEX文件,从所述O_DEX文件中读取类和函数信息,借助配置中心提供的类和函数白名单对所述类和函数信息进行过滤,得到过滤后类和函数,对过滤后的函数进行主动调用;
脱壳模块,用于拦截主动调用的函数,强制让所述主动调用的函数进入解释器执行通道,在所述解释器处再次拦截所述主动调用的函数,记录所述主动调用的函数所属所述O_DEX文件的内存位置和大小,将所述主动调用的函数对应函数体的字节码写入以所述内存位置和大小命名的比特文件中,当所有O_DEX文件各自对应的比特文件写入完毕后,利用所述内存位置和大小下载O_DEX文件,得到D_DEX文件;
DEX文件修复模块,用于通过自定义修复组件将所述D_DEX文件与所述比特文件合并,得到完整DEX文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311302432.3A CN117370979A (zh) | 2023-10-09 | 2023-10-09 | 一种系统软件脱壳方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311302432.3A CN117370979A (zh) | 2023-10-09 | 2023-10-09 | 一种系统软件脱壳方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117370979A true CN117370979A (zh) | 2024-01-09 |
Family
ID=89395717
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311302432.3A Pending CN117370979A (zh) | 2023-10-09 | 2023-10-09 | 一种系统软件脱壳方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117370979A (zh) |
-
2023
- 2023-10-09 CN CN202311302432.3A patent/CN117370979A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105574411B (zh) | 一种动态脱壳方法、装置和设备 | |
CN107330320B (zh) | 应用进程监控的方法和装置 | |
CN108229148B (zh) | 一种基于Android虚拟机的沙箱脱壳方法及系统 | |
US7913265B2 (en) | Method of loading software with an intermediate object oriented language in a portable device | |
CN109255235B (zh) | 基于用户态沙箱的移动应用第三方库隔离方法 | |
CN104008340A (zh) | 病毒查杀方法及装置 | |
CN111400757B (zh) | 防止安卓第三方库中native代码泄露用户隐私的方法 | |
US20130036431A1 (en) | Constraining Execution of Specified Device Drivers | |
CN108197476B (zh) | 一种智能终端设备的漏洞检测方法及装置 | |
CN116502220B (zh) | 一种对抗性Java内存马的检测方法及处理方法 | |
CN111914250B (zh) | 一种Linux系统脚本程序运行时验证与管控方法 | |
CN108763924B (zh) | 一种安卓应用程序中不可信第三方库访问权限控制方法 | |
CN112214267A (zh) | 一种安卓脱壳加速方法、装置、存储介质及计算机设备 | |
CN115688106A (zh) | 一种Java agent无文件注入内存马的检测方法及装置 | |
CN116150739A (zh) | 一种基于关键地址动态保护的栈溢出自动防御方法 | |
CN110781081B (zh) | 一种移动应用回调强制触发方法、系统及存储介质 | |
CN115659340B (zh) | 一种仿冒小程序识别方法、装置、存储介质及电子设备 | |
CN116668202A (zh) | 一种容器环境下内存马检测方法及系统 | |
CN111625225A (zh) | 一种程序指定数据输出方法和装置 | |
CN109426546B (zh) | 应用启动方法及装置、计算机存储介质及设备 | |
CN117370979A (zh) | 一种系统软件脱壳方法及装置 | |
US20100218261A1 (en) | Isolating processes using aspects | |
CN112883374B (zh) | 一种基于ART环境下的Android平台应用程序通用脱壳方法及系统 | |
CN113791824B (zh) | 一种终端设备的外设驱动加载方法、系统及介质 | |
CN115758356A (zh) | 一种对Android应用实施可信静态度量的方法、存储介质及设备 |
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 |