CN118245062A - 安卓应用的重打包方法及重打包工具 - Google Patents
安卓应用的重打包方法及重打包工具 Download PDFInfo
- Publication number
- CN118245062A CN118245062A CN202410414488.6A CN202410414488A CN118245062A CN 118245062 A CN118245062 A CN 118245062A CN 202410414488 A CN202410414488 A CN 202410414488A CN 118245062 A CN118245062 A CN 118245062A
- Authority
- CN
- China
- Prior art keywords
- file
- original
- plug
- target
- tweak
- 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 65
- 238000012857 repacking Methods 0.000 title abstract description 57
- 230000008439 repair process Effects 0.000 claims abstract description 29
- 238000004806 packaging method and process Methods 0.000 claims abstract description 27
- 238000011161 development Methods 0.000 claims description 20
- 230000008569 process Effects 0.000 claims description 15
- 238000004140 cleaning Methods 0.000 claims description 8
- 238000012856 packing Methods 0.000 claims description 7
- 230000006837 decompression Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 6
- 206010016754 Flashback Diseases 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000009434 installation Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000001914 filtration Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002787 reinforcement Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 101100126329 Mus musculus Islr2 gene Proteins 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000002513 implantation Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种安卓应用的重打包方法及重打包工具,包括:对安卓应用的原始APK包进行解压缩;获取原始目标SO文件,并为原始目标SO文件注入核心框架库依赖,得到目标SO文件;在解压缩后的原始APK包的assets目录下创建tweak目录;生成重定向文件,并将重定向文件打包进tweak目录;编译java插件,并生成java插件的插件字节码文件;其中,java插件包括签名修复插件;将编译好的java插件的插件字节码文件以及配置文件打包进tweak目录,生成重打包后的APK包;将重打包后的APK包进行签名和保存。本发明改善了反编译失败或得到的源码不完整、源码调整不灵活、依赖第三方hook库以及重打包后运行闪退的问题。
Description
技术领域
本发明涉及软件设计开发技术领域,尤其是涉及一种安卓应用的重打包方法及重打包工具。
背景技术
现有技术中,对某个APP进行重打包时,主要是通过第三方打包工具反编译整个APP为源码文件,之后插入逆向分析代码,打印出关键点日志或者更改某个功能点的执行流程,完成之后在用第三方工具将源代码编译回正常APP,典型的方案包括:反编译APK:主要用到的工具是apktool,将一个APK格式的文件反编译为各种原始的资源文件、配置文件、java源文件。编辑APK:主要用到的工具是一些源码浏览分析编辑工具,比如jd-gui,dex2jar等,同时还可能用到一些hook库,比如xposed、frida等。根据逆向分析需要,编辑源文件。回编译APK:将更改后的资源文件、配置文件、源文件等再通过apktool回编译成APK文件,需要用到apksigner签名工具对APK包重签名,之后重打包即可。但是,现有技术会存在反编译失败或得到的源码不完整、源码调整不灵活、依赖第三方hook库以及重打包后运行闪退等问题。
发明内容
有鉴于此,本发明的目的在于提供一种安卓应用的重打包方法及重打包工具,以改善了反编译失败或得到的源码不完整、源码调整不灵活、依赖第三方hook库以及重打包后运行闪退的问题。
为了实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提供了一种安卓应用的重打包方法,该方法应用于重打包工具,重打包工具中内置hook库,该方法包括:对安卓应用的原始APK包进行解压缩,得到解压缩后的原始APK包;获取原始目标SO文件,并为原始目标SO文件注入核心框架库依赖,得到目标SO文件;在解压缩后的原始APK包的assets目录下创建tweak目录;生成重定向文件,并将重定向文件打包进tweak目录;编译java插件,并生成java插件的插件字节码文件;其中,java插件包括签名修复插件,签名修复插件用于修复重打包的APK包的签名信息;将编译好的java插件的插件字节码文件以及配置文件打包进tweak目录,生成重打包后的APK包;将重打包后的APK包进行签名和保存。
在一种实施方式中,对安卓应用的原始APK包进行解压缩之后,上述方法还包括:对解压缩后的原始APK包的命令配置参数进行调整以及修正ARM指令中的错误配置。
在一种实施方式中,获取原始目标SO文件之后,上述方法还包括:清理应用运行过程中不使用的文件以及目录。
在一种实施方式中,为原始目标SO文件注入核心框架库依赖,得到目标SO文件之后,上述方法还包括:基于目标SO文件替换原始目标SO文件,并将核心框架库打包进目标SO文件的库目录中。
在一种实施方式中,生成重定向文件,并将重定向文件打包进tweak目录之后,上述方法还包括:将原始APK包、原始签名证书和原始目标SO文件打包进tweak目录;获取原始签名证书的指纹数据,并基于指纹数据生成开发文件,并将开发文件打包进tweak目录。
第二方面,本发明实施例提供了一种重打包工具,重打包工具中内置hook库,包括:解压缩模块,用于对安卓应用的原始APK包进行解压缩,得到解压缩后的原始APK包;SO文件获取模块,用于获取原始目标SO文件,并为原始目标SO文件注入核心框架库依赖,得到目标SO文件;目录创建模块,用于在解压缩后的原始APK包的assets目录下创建tweak目录;文件生成模块,用于生成重定向文件,并将重定向文件打包进tweak目录;插件编译模块,用于编译java插件,并生成java插件的插件字节码文件;其中,java插件包括签名修复插件,签名修复插件用于修复重打包的APK包的签名信息;重打包模块,用于将编译好的java插件的插件字节码文件以及配置文件打包进tweak目录,生成重打包后的APK包;签名模块,用于将重打包后的APK包进行签名和保存。
在一种实施方式中,上述装置还包括:参数调整模块,用于对解压缩后的原始APK包的命令配置参数进行调整以及修正ARM指令中的错误配置。
在一种实施方式中,上述装置还包括:清理模块,用于清理应用运行过程中不使用的文件以及目录。
在一种实施方式中,上述装置还包括:文件替换模块,用于基于目标SO文件替换原始目标SO文件,并将核心框架库打包进目标SO文件的库目录中。
在一种实施方式中,上述装置还包括:开发文件生成模块,用于将原始APK包、原始签名证书和原始目标SO文件打包进tweak目录;获取原始签名证书的指纹数据,并基于指纹数据生成开发文件,并将开发文件打包进所述tweak目录。
本发明实施例带来了以下有益效果:
本发明实施例提供的上述安卓应用的重打包方法及重打包工具,该方法应用于重打包工具,重打包工具中内置hook库,包括:对安卓应用的原始APK包进行解压缩,得到解压缩后的原始APK包;获取原始目标SO文件,并为原始目标SO文件注入核心框架库依赖,得到目标SO文件;在解压缩后的原始APK包的assets目录下创建tweak目录;生成重定向文件,并将重定向文件打包进tweak目录;编译java插件,并生成java插件的插件字节码文件;其中,java插件包括签名修复插件,签名修复插件用于修复重打包的APK包的签名信息;将编译好的java插件的插件字节码文件以及配置文件打包进tweak目录,生成重打包后的APK包;将重打包后的APK包进行签名和保存。上述方法无需反编译APK,仅需解压缩APK包即可,从而改善了反编译失败或得到的源码不完整的问题;同时,在重打包过程中不对原始文件进行修改,以java插件的形式对源码进行修改,再通过框架动态加载java插件,从而最大程度保证了原始APP的完整性,提高了源码调整的灵活性;此外,重打包工具中内置hook库,从而改善了依赖第三方hook库的问题,效率高更高,且无需手机有root权限,在正常手机上即可运行,降低了重打包后被检测到的风险;最后签名修复插件可以自动修复重打包的APK包的签名信息,无需每个APP在重打包后都要手动修复签名,提升了重打包方法的易用性,改善了因签名变化导致的重打包后APP运行闪退的问题。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种TweakMe框架的目录结构示意图;
图2为本发明实施例提供的一种安卓应用的重打包方法的流程图;
图3为本发明实施例提供的另一种安卓应用的重打包方法的流程图;
图4为本发明实施例提供的一种重打包后的APP运行过程中在加载目标so时TweakMe框架运行原理图;
图5为本发明实施例提供的一种重打包流程图;
图6为本发明实施例提供的一种安卓应用的重打包装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,现有技术中存在一些问题和缺点:
(1)反编译失败或得到的源码不完整的问题:反编译失败可能是第三方工具自身问题、但多数情况下是由于APK被加固保护所致,而得到的源码不完整在APK被加固保护情况下非常常见,特别是dex文件,往往无法被反编译出来,导致没办法继续下一步分析。
(2)源码调整不灵活的问题:每一次编辑都是对原始APK的修改,想要生效就必须重新打包一次,重新在手机上安装运行,费事费力,不够灵活。
(3)依赖第三方hook库的问题:如果要拦截某些方法时会引入一些开源的hook库,这些库既笨重又容易被检测出来,增加了闪退的风险;有些库必须要手机有root权限,且对手机系统版本也有限制,导致重打包后的app在非root的正常手机上无法运行。
(4)重打包后运行闪退的问题:重打包后必然会破坏原始签名,而重打包工具没有修复签名的功能,导致即使app安装成功,也无法通过签名校验,引起app闪退。
基于此,本发明实施例提供的一种安卓应用的重打包方法及重打包工具,可以改善反编译失败或得到的源码不完整、源码调整不灵活以及重打包后运行闪退的问题。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种安卓应用的重打包方法进行详细介绍,该方法可以由电子设备执行,诸如智能手机、电脑、平板电脑等。该方法应用于重打包工具apktweak,重打包工具apktweak中内置hook库。本发明实施例中,整个重打包流程被设计成框架形式,框架名称为TweakMe,其主体目录结构设计参见图1所示。其中,目录文件说明如下:
1、apktweak:放置自行开发的重打包命令行工具。
2、build-tools:存放google提供的java源码编译为dex字节码文件的jar包。
3、jni:重打包框架native层源码编译的makefile文件。
4、libs:编译后的二进制文件存放目录,存放框架的核心动态库libsotweak.so。
5、platforms:存放google提供的java源码编译所需的android运行时jar包。
6、sodemo:native层插件开发的样例源码目录。
7、sotweak:重打包框架native层源码目录,存放libsotweak.so的编译源码。
8、src:重打包框架java层源码目录,其中,plugin目录放置插件源码,util放置工具类源码,xposed目录放置xposed插件适配源码。
9、java2dex.bat:java源码一键编译为dex虚拟机字节码的命令行脚本。
10、javatweak.json:java插件配置文件。
11、docx文档:框架使用说明文档。
由于android系统采用的是linux内核,linux内核的可执行程序或动态库的二进制格式为ELF。在这种格式中,动态库运行时所需的每个依赖库的名称都会被存放在一个类型为DT_NEEDED的Elf32_Dyn的数据结构中(64位对应的为Elf64_Dyn)。
在动态库本身被加载前,其所有的依赖库会被按照顺序依次进行加载,基于此,本发明实施例中在原始APK中选择一个在运行时加载比较靠前的so(最好是第一个被加载的so),通过重打包工具apktweak加入一个依赖项,这个依赖项被指定为一个so。诸如,一个名为libjniwrap.so的动态库经过工具处理后,一个libm.so经过处理后被更改为libx.so。
如果一个被处理过的libjniwrap.so被加载,就会首先加载libx.so这个依赖项。一旦动态库被加载成功,就相当于在原有APK和本实施例构建的框架之间架了一座桥,通过这座桥、可以把重打包进APK中的整个框架、核心库、插件等等文件全部加载运行起来。由于整个重打包过程牵涉的步骤和处理的文件多而杂,如果完全手工操作会非常麻烦,所以通过重打包工具apktweak来辅助完成所有步骤,大大简化重打包流程。
参见图2所示的一种安卓应用的重打包方法的流程图,示意出该方法主要包括以下步骤S201至步骤S207:
步骤S201:对安卓应用的原始APK包进行解压缩,得到解压缩后的原始APK包。
步骤S202:获取原始目标SO文件,并为原始目标SO文件注入核心框架库依赖,得到目标SO文件。
步骤S203:在解压缩后的原始APK包的assets目录下创建tweak目录。
步骤S204:生成重定向文件,并将重定向文件打包进tweak目录。
步骤S205:编译java插件,并生成java插件的插件字节码文件。
其中,java插件包括签名修复插件,签名修复插件用于修复重打包的APK包的签名信息。
步骤S206:将编译好的java插件的插件字节码文件以及配置文件打包进tweak目录,生成重打包后的APK包。
步骤S207:将重打包后的APK包进行签名和保存。
本发明实施例提供的上述安卓应用的重打包方法,无需反编译APK,仅需解压缩APK包即可,从而改善了反编译失败或得到的源码不完整的问题;同时,在重打包过程中不对原始文件进行修改,以java插件的形式对源码进行修改,再通过框架动态加载java插件,从而最大程度保证了原始APP的完整性,提高了源码调整的灵活性;此外,重打包工具apktweak中内置hook库,从而改善了依赖第三方hook库的问题,效率高更高,且无需手机有root权限,在正常手机上即可运行,降低了重打包后被检测到的风险;最后签名修复插件可以自动修复重打包的APK包的签名信息,无需每个APP在重打包后都要手动修复签名,提升了重打包方法的易用性,改善了因签名变化导致的重打包后APP运行闪退的问题。
参见图3所示,本发明实施例还提供了另一种安卓应用的重打包方法的流程图,主要包括以下步骤1至步骤17:
步骤1:内存解压原始APK包。
步骤2:调整命令行配置参数,修正ARM指令集两种ABI,armeabi与armeabi-v7a的配置错误。
也即对解压缩后的原始APK包的命令配置参数进行调整以及修正ARM指令中的错误配置。
步骤3:如未指定注入的目标SO,自行推导常见的注入目标。
步骤4:清理APP运行过程中不会用到的文件以及目录。
也即清理应用运行过程中不使用的文件以及目录。
步骤5:为目标SO注入核心框架库(linx.so)依赖。
步骤6:替换原有的目标SO,并将核心框架库libx.so、libsotweak.so打包进库目中。
也即基于目标SO文件替换原始目标SO文件,并将核心框架库打包进目标SO文件的库目录中。
步骤7:在原始apk包的assets目录下创建tweak目录。
步骤8:生成重定向配置文件redirect.txt。
步骤9:将重定向文件redirect.txt打包进tweak目录中。
步骤10:将如下原始文件打包进tweak目录:原始apk包:base.apk;原始签名证书:CERT.RSA、CERT.SF、MANIFEST.MF;原始目标so:libtarget.so。
也即将原始APK包、原始签名证书和原始目标SO文件打包进tweak目录。
步骤11:获取原始证书指纹数据并生成tweakme.cer文件。
也即获取原始签名证书的指纹数据,并基于指纹数据生成开发文件,并将开发文件打包进tweak目录。
步骤12:将tweakme.cer打包进tweak目录。
步骤13:编译java插件,生成插件字节码文件javatweak.dex。
步骤14:将编译好的java插件javatweak.dex以及配置文件javatweak.json打包进tweak目录。
步骤15:生成重打包后的未签名APK包。
步骤16:签名重打包的APK包并落地保存。
步骤17:重打包完成。
进一步,重打包后的APP运行过程中在加载目标so时TweakMe框架运行原理图参见图4所示:
重打包的APP开始运行,当目标so被APP加载时会首先加载其所欲的依赖项,于是libx.so被加载起来;libx.so在完成稿了要的初始化工作后会将核心框架库libsotweak.so加载起来并主动调用核心库导出的JNI_OnLoad函数;JNI_OnLoad中会激活各种不同功能的native层修复插件使得重打包后的apk关键属性数据尽可能的与原apk一致,比如文件大小、文件内容、文件数据、文件路径、包签名等等;具体的,日志修复插件修复某些app日志无法打印的问题;线程监控插件监控线程的创建和结束,禁止某些线程的运行等;maps文件内容过滤插件隐藏maps文件中出现的核心动态库等敏感信息;重定向插件重定向敏感文件;JAVA桥插件打通native层和java层,通过JNI实现两层交互,内置一个java方法拦截内核;系统调用插件监控系统调用,并对某些调用的传入或者传出数据进行过滤处理;资源内容过滤插件隐藏apk资源中由重打包而新增加的文件信息;包签名数据修复插件修复由于重打包引起的包签名不一致的问题;加固对抗插件针对市场中常用的加固方案特别发开的对抗插件。
进而,监控JAVA虚拟机DefineClass方法调用初始化java方法拦截内核;释放java层扩展插件文件javatweak.dex到app私有目录中;加载java层扩展插件javatweak.dex;注册JNI桥方法nativeHookSymbol、nativeLoadLib、nativeHookMethod、nativePrintLog;回调JAVA方法loadDexFile完成JAVA层各种插件的初始化并激活插件;回调JAVA方法loadDexFile完成JAVA层各种插件的初始化;libsotweak.so核心库JNI_OnLoad函数返回TweakMe框架正式加载运行;目标so正式加载完成,后续按照APP的正常流程继续执行。
此外,当监控JAVA虚拟机检测到有新的JAVA类加载器被创建时,或调JAVA方法defineClassLoader交由java层插件进一步处理;或者,有新的JAVA类被创建时,回调JAVA方法defineJavaClass交由java层插件进一步处理。
为了便于理解,本发明实施例还提供了一种具体的重打包流程,参见图5所示,首先下载TweakMe框架,安装JDK1.8;然后准备一个app的原始安装包(apk文件),确定待注入的目标so;接着打开一个命令行窗口,进入TweakMe目录中,运行如下命令:.\apktweak\apktweak.exe--targetXXX.apk--targetlibXXX.so--embed—rebu ild;运行结束后,如果无错误提示,会在原始apk所在目录中生成好重打包后的apk名称为:XXX_embed.apk;重打包结束,新的安装包XXX_embed.apk可以在飞root的正常手机上直接安装运行。
需要说明的是,在命令行窗口中输入java-version,能输出版本信息就算是JDK安装成功;选取相对简单的测试app,没有第三方加固过,至少需要有一个so文件;目标so应该尽可能早的被加载,最好是第一个被加载的so。
本发明实施例提供的上述方法具有以下技术效果:
1、重打包流程简洁高效:只需要一条重打包命令就可以完成整个重打包流程,依赖注入、包文件移动与复制、TweakMe框架嵌入、插件编译与安装、自动重签名新包等等都是全自动完成,无需其它操作步骤。
2、自带签名校验修复功能:新包由于内嵌了整个TweakMe框架,在新包安装运行后自带的各种修复插件会自动修复签名数据及其它被更改的特征数据,尽可能的让apk识别不出被重打包过。
3、简单的插件开发:采用java语言开发插件,附带插件开发的基础用例与说明文档,借鉴了xposed的函数hook模式,hook代码易写易懂,对原生的xposed插件也有一定的支持能力。
4、灵活的重打包模式:重打包可以分为内嵌与外置两种打包模式。在插件开发阶段可以选择外置模式重打包(打包命令中不带--embed命令项),将经常需要改动的插件文件javatweak.dex放置于sdcard的特定目录下,每次插件更新时只需要替换一下文件即可,重启app即可生效,无需再次重打包,极大的方便插件更新,提高开发效率。而在插件定型之后可以改用内置模式重打包(打包命令中带--embed命令项),便于拷贝分发与安装部署。
对于前述实施例提供的安卓应用的重打包方法,本发明实施例还提供了一种重打包工具,重打包工具中内置hook库,参见图6所示的一种重打包工具的结构示意图,示意出该工具主要包括以下部分:
解压缩模块601,用于对安卓应用的原始APK包进行解压缩,得到解压缩后的原始APK包;
SO文件获取模块602,用于获取原始目标SO文件,并为原始目标SO文件注入核心框架库依赖,得到目标SO文件;
目录创建模块603,用于在解压缩后的原始APK包的assets目录下创建tweak目录;
文件生成模块604,用于生成重定向文件,并将重定向文件打包进tweak目录;
插件编译模块605,用于编译java插件,并生成java插件的插件字节码文件;其中,java插件包括签名修复插件,签名修复插件用于修复重打包的APK包的签名信息;
重打包模块606,用于将编译好的java插件的插件字节码文件以及配置文件打包进tweak目录,生成重打包后的APK包;
签名模块607,用于将重打包后的APK包进行签名和保存。
本发明实施例提供的上述安卓应用的重打包装置,无需反编译APK,仅需解压缩APK包即可,从而改善了反编译失败或得到的源码不完整的问题;同时,在重打包过程中不对原始文件进行修改,以java插件的形式对源码进行修改,再通过框架动态加载java插件,从而最大程度保证了原始APP的完整性,提高了源码调整的灵活性;此外,重打包工具apktweak中内置hook库,从而改善了依赖第三方hook库的问题,效率高更高,且无需手机有root权限,在正常手机上即可运行,降低了重打包后被检测到的风险;最后签名修复插件可以自动修复重打包的APK包的签名信息,无需每个APP在重打包后都要手动修复签名,提升了重打包装置的易用性,改善了因签名变化导致的重打包后APP运行闪退的问题。
在一种实施方式中,上述装置还包括:参数调整模块,用于对解压缩后的原始APK包的命令配置参数进行调整以及修正ARM指令中的错误配置。
在一种实施方式中,上述装置还包括:清理模块,用于清理应用运行过程中不使用的文件以及目录。
在一种实施方式中,上述装置还包括:文件替换模块,用于基于目标SO文件替换原始目标SO文件,并将核心框架库打包进目标SO文件的库目录中。
在一种实施方式中,上述装置还包括:开发文件生成模块,用于将原始APK包、原始签名证书和原始目标SO文件打包进tweak目录;获取原始签名证书的指纹数据,并基于指纹数据生成开发文件,并将开发文件打包进tweak目录。
需要说明的是,本发明实施例所提供的工具,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,本实施例部分未提及之处,可参考前述方法实施例中相应内容。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种安卓应用的重打包方法,其特征在于,所述方法应用于重打包工具,所述重打包工具中内置hook库,所述方法包括:
对安卓应用的原始APK包进行解压缩,得到解压缩后的原始APK包;
获取原始目标SO文件,并为所述原始目标SO文件注入核心框架库依赖,得到目标SO文件;
在所述解压缩后的原始APK包的assets目录下创建tweak目录;
生成重定向文件,并将所述重定向文件打包进所述tweak目录;
编译java插件,并生成所述java插件的插件字节码文件;其中,所述java插件包括签名修复插件,所述签名修复插件用于修复重打包的APK包的签名信息;
将编译好的java插件的插件字节码文件以及配置文件打包进所述tweak目录,生成重打包后的APK包;
将所述重打包后的APK包进行签名和保存。
2.根据权利要求1所述的方法,其特征在于,对安卓应用的原始APK包进行解压缩之后,所述方法还包括:
对所述解压缩后的原始APK包的命令配置参数进行调整以及修正ARM指令中的错误配置。
3.根据权利要求1所述的方法,其特征在于,获取原始目标SO文件之后,所述方法还包括:
清理所述应用运行过程中不使用的文件以及目录。
4.根据权利要求1所述的方法,其特征在于,为所述原始目标SO文件注入核心框架库依赖,得到目标SO文件之后,所述方法还包括:
基于所述目标SO文件替换所述原始目标SO文件,并将所述核心框架库打包进所述目标SO文件的库目录中。
5.根据权利要求1所述的方法,其特征在于,生成重定向文件,并将所述重定向文件打包进所述tweak目录之后,所述方法还包括:
将原始APK包、原始签名证书和所述原始目标SO文件打包进所述tweak目录;
获取所述原始签名证书的指纹数据,并基于所述指纹数据生成开发文件,并将所述开发文件打包进所述tweak目录。
6.一种重打包工具,其特征在于,所述重打包工具中内置hook库,包括:
解压缩模块,用于对安卓应用的原始APK包进行解压缩,得到解压缩后的原始APK包;
SO文件获取模块,用于获取原始目标SO文件,并为所述原始目标SO文件注入核心框架库依赖,得到目标SO文件;
目录创建模块,用于在所述解压缩后的原始APK包的assets目录下创建tweak目录;
文件生成模块,用于生成重定向文件,并将所述重定向文件打包进所述tweak目录;
插件编译模块,用于编译java插件,并生成所述java插件的插件字节码文件;其中,所述java插件包括签名修复插件,所述签名修复插件用于修复重打包的APK包的签名信息;
重打包模块,用于将编译好的java插件的插件字节码文件以及配置文件打包进所述tweak目录,生成重打包后的APK包;
签名模块,用于将所述重打包后的APK包进行签名和保存。
7.根据权利要求6所述的重打包工具,其特征在于,还包括:
参数调整模块,用于对所述解压缩后的原始APK包的命令配置参数进行调整以及修正ARM指令中的错误配置。
8.根据权利要求6所述的重打包工具,其特征在于,还包括:
清理模块,用于清理所述应用运行过程中不使用的文件以及目录。
9.根据权利要求6所述的重打包工具,其特征在于,还包括:文件替换模块,用于基于所述目标SO文件替换所述原始目标SO文件,并将所述核心框架库打包进所述目标SO文件的库目录中。
10.根据权利要求6所述的重打包工具,其特征在于,还包括:开发文件生成模块,用于将原始APK包、原始签名证书和所述原始目标SO文件打包进所述tweak目录;
获取所述原始签名证书的指纹数据,并基于所述指纹数据生成开发文件,并将所述开发文件打包进所述tweak目录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410414488.6A CN118245062A (zh) | 2024-04-08 | 2024-04-08 | 安卓应用的重打包方法及重打包工具 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410414488.6A CN118245062A (zh) | 2024-04-08 | 2024-04-08 | 安卓应用的重打包方法及重打包工具 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118245062A true CN118245062A (zh) | 2024-06-25 |
Family
ID=91557882
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410414488.6A Pending CN118245062A (zh) | 2024-04-08 | 2024-04-08 | 安卓应用的重打包方法及重打包工具 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118245062A (zh) |
-
2024
- 2024-04-08 CN CN202410414488.6A patent/CN118245062A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491695B (zh) | 一种集成安卓应用的增量更新方法 | |
CN106778103B (zh) | 一种安卓应用程序防逆向破解的加固方法、系统及解密方法 | |
Altekar et al. | OPUS: Online Patches and Updates for Security. | |
CN108229112B (zh) | 一种保护应用程序、应用程序的运行方法以及装置 | |
JP4851096B2 (ja) | コードの書き換え | |
US20090307781A1 (en) | Program execution control method, its device, and execution control program for same | |
CA2816814C (en) | Repairing corrupt software | |
CN105786538B (zh) | 基于安卓系统的软件升级方法和装置 | |
CN107451474B (zh) | 用于终端的软件漏洞修复方法和装置 | |
US20050108562A1 (en) | Technique for detecting executable malicious code using a combination of static and dynamic analyses | |
WO2018045733A1 (zh) | 一种安卓系统so文件的加载方法及电子设备 | |
CN110333868B (zh) | 用于生成子应用的安装包的方法和系统 | |
US9690567B2 (en) | Runtime detection of software configurations and upgrades | |
CN113835713B (zh) | 源码包下载方法、装置、计算机设备和存储介质 | |
US20150347745A1 (en) | Method for extracting executable code of application using memory dump | |
KR101863325B1 (ko) | 역공학 방지 방법 및 장치 | |
CN107209815B (zh) | 用于使用返回导向编程的代码混淆的方法 | |
CN118245062A (zh) | 安卓应用的重打包方法及重打包工具 | |
CN108536444B (zh) | 插件编译方法、装置、计算机设备和存储介质 | |
US20220308991A1 (en) | Test processing method and information processing apparatus | |
CN113641389B (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
CN114969720A (zh) | 安卓应用的安装方法、装置、存储介质及计算机设备 | |
CN111752548A (zh) | 一种sdk嵌入方法及装置、计算机可读存储介质 | |
CN113220314A (zh) | App资源加载及apk生成方法、装置、设备及介质 | |
CN111949301A (zh) | 应用程序热更新方法、装置、计算机可读存储介质和计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |