提取手机所有apk

提取APK路径

使用adb shell中的pm指令,可以获取到所有应用的安装路径

adb shell pm list package -f

结果是类似于这种

package:/vendor/overlay/WifiResMainlineOverlay/WifiResMainlineOverlay.apk=com.android.wifi.mainline.resources.overlay
package:/product/overlay/DisplayCutoutEmulationTall/DisplayCutoutEmulationTallOverlay.apk=com.android.internal.display.cutout.emulation.tall
package:/data/app/~~JwpHJZ8nzv5pbUlphtekiw==/in.amazon.mShop.android.shopping-iWC3XFdrdoPcAoaxOo1Uhg==/base.apk=in.amazon.mShop.android.shopping
package:/system/priv-app/MtkMmsService/MtkMmsService.apk=com.android.mms.service

如果单个提取的话就直接pull就好了,如果很多的话还是用脚本来处理吧

import subprocess
import os

def extract_apks():
    # 执行adb shell命令获取手机上安装的所有应用包名
    package_names = subprocess.check_output(["adb", "shell", "pm", "list", "packages", "-f"]).decode("utf-8").splitlines()
    
    apk_path_base = {}
    apk_paths = []
    
    # 提取包名中的apk路径并保存到列表中
    for line in package_names:
        if line.startswith("package:"):
            path = line.rsplit("=", 1)[0].split(":")[1]
            if path.endswith("base.apk"):
                apk_path_base[path] = line.rsplit("=", 1)[1].replace(".", "_") + ".apk"
            else:
                apk_paths.append(path)
                

    # 创建保存APK文件的目录
    output_dir = "extracted_apks"
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 使用adb pull命令将APK文件从手机中提取到本地目录
    for apk_path in apk_paths:
        apk_file_name = os.path.basename(apk_path)
        output_path = os.path.join(output_dir, apk_file_name)
        subprocess.call(["adb", "pull", apk_path, output_path])
        print(f"Extracted: {output_path}")
        
    print("------------------------------------")
        
    for apk_path, value in apk_path_base.items():
        #apk_file_name = os.path.basename(apk_path)
        apk_file_name = os.path.basename(value)
        output_path = os.path.join(output_dir, apk_file_name)
        subprocess.call(["adb", "pull", apk_path, output_path])
        print(f"Extracted: {output_path}")

if __name__ == "__main__":
    extract_apks()

解压所有apk

还是用脚本对提取出来的apk进行解压

import os
import zipfile

def extract_apks(source_folder, target_folder):
    # 遍历match文件夹下的所有文件
    for file_name in os.listdir(source_folder):
        if file_name.endswith('.apk'):  # 如果文件是APK文件
            # 获取APK文件的路径
            apk_path = os.path.join(source_folder, file_name)

            # 创建解压后的文件夹路径
            folder_name = os.path.splitext(file_name)[0]  # 移除文件扩展名
            target_path = os.path.join(target_folder, folder_name)

            # 创建目标文件夹
            if not os.path.exists(target_path):
                os.makedirs(target_path)

            # 解压APK文件到目标文件夹
            with zipfile.ZipFile(apk_path, 'r') as zip_ref:
                zip_ref.extractall(target_path)
                print(f"Extracted: {apk_path} to {target_path}")

if __name__ == "__main__":
    source_folder = "extracted_apks"  # 包含所有APK文件的文件夹路径
    target_folder = "extracted_zips"  # 解压后的文件夹路径

    extract_apks(source_folder, target_folder)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值