【Android安全】从xapk中提取apk并进行重命名

关于xapk格式

XAPK文件是由APKPure首创的

它是一种文件扩展格式,包含了单独的APK文件和OBB cache assets文件。这种格式节省了文件大小以助于开发者能够在最大限制100 MB内上传他们的安卓应用到谷歌商城。APKPure APP是提供在安卓下载和安装XAPK文件的最受信任的来源之一。

参考:https://m.apkpure.com/cn/how-to/how-to-install-xapk-apk

核心:xapk中,解压之后,有一个apk的名字是包名(称为main apk,或者main application package),将这个main apk提取出来,进行后续分析即可

术语参考:https://filext.com/file-extension/XAPK

任务描述

当前文件夹下有一些xapk文件
原始文件名 例如:PA01-0018-com.nra.flyermaker-90.xapk
希望从中解压并提取出主apk 例如:com.nra.flyermaker.apk
并将com.nra.flyermaker.apk命名为PA01-0018-com.nra.flyermaker-90.apk

解决方案

Xapk2Apk.py

import os
import zipfile
import shutil

# 原始文件名:例如PA01-0018-com.nra.flyermaker-90.xapk
# 希望从中解压并提取出主apk:com.nra.flyermaker.apk
# 并将com.nra.flyermaker.apk命名为PA01-0018-com.nra.flyermaker-90.apk


# 获取当前目录下所有.xapk文件
xapk_files = [file for file in os.listdir('.') if file.endswith('.xapk')]

# 循环处理每个文件
for file in xapk_files:
    print(file)
    # PA01-0018-com.nra.flyermaker-90.xapk

    # 解压缩到当前目录下的与文件同名的文件夹中
    with zipfile.ZipFile(file, 'r') as zip_ref:
        folder_name = os.path.splitext(file)[0]
        zip_ref.extractall(folder_name)

    # 在解压缩后的文件夹中找到apk文件并进行重命名
    folder_files = os.listdir(folder_name)
    apk_files = [name for name in folder_files if name.endswith('.apk')]
    for apk_file in apk_files:

        # 找到解压后的主apk
        if os.path.splitext(apk_file)[0] in os.path.splitext(file)[0]:
            print(apk_file)  
            # com.nra.flyermaker.apk

            apk_path = os.path.join(folder_name, apk_file)
            print("old apk name : " + apk_path) 
            # old apk name : PA01-0018-com.nra.flyermaker-90/com.nra.flyermaker.apk

            new_apk_path = os.path.join(folder_name, folder_name+'.apk')
            print("new apk name : " + new_apk_path) 
            # new apk name : PA01-0018-com.nra.flyermaker-90/PA01-0018-com.nra.flyermaker-90.apk

            os.rename(apk_path, new_apk_path)

            # 将./PA01-0018-com.nra.flyermaker-90/PA01-0018-com.nra.flyermaker-90.apk 移动至 ./PA01-0018-com.nra.flyermaker-90.apk
            shutil.move(new_apk_path, "./"+folder_name+'.apk')

            # 删除./PA01-0018-com.nra.flyermaker-90/文件夹
            shutil.rmtree(folder_name)

参考:
https://chat.openai.com/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值