☰
MT6735安卓设备深度root:启动链级权限重建方案
2026/10/14 16:38:35 网站建设 项目流程

简介:本资源是一套专为MT6735平台安卓手机深度开发与Root权限获取定制的完整工具集,面向嵌入式安卓系统开发者、ROM定制爱好者及底层安全研究者,解决MT6735芯片设备刷机、su权限部署、SELinux策略适配及内核级root稳定性等核心问题。压缩包共62个文件,涵盖7组架构适配的su/sukernel/suinit/supolicy(支持arm、arm64、mips、x86等),配套so动态库、pie可执行体、chattr权限管理工具、updater-script与install-recovery.sh刷机脚本、Superuser.apk主控应用,以及chromeos签名相关keyblock/vbprivk、file_contexts_image SELinux上下文镜像、frp_install远程调试模块和000000deepsleep省电补丁等关键组件,整体体积仅5.56MB,轻量且高度集成。目前已有925人学习下载,提供开箱即用的MT6735专用root方案,含多架构二进制兼容性设计、完整刷机流程依赖项、SELinux策略预置及深度睡眠优化模块,适合需在真实MT6735设备上快速验证root机制、调试su daemon行为或构建定制 recovery 的中高级开发者。

1. 给 MT6735 安卓手机“松绑”:这不是刷机,是重建系统权限控制链

你手上有台基于联发科 MT6735 芯片的安卓设备——可能是某款已停更三年的入门级平板、某实验室遗留的测试终端,或是产线淘汰下来的工控模组。系统卡在 Android 5.1 或 6.0,OTA 早已失效,厂商不再提供任何固件更新,连 Recovery 都被锁死。你想装一个自定义内核模块、抓取底层传感器原始数据、绕过 SELinux 策略调试 HAL 层通信,甚至只是想把/system挂载为可写来替换一个崩溃的系统服务——但adb shell su永远返回Permission denied。这不是权限没开,是整个 Linux 用户空间的权限仲裁机制(从 init 进程到 servicemanager)压根没给你留入口。这份 root 工具包,不是一键傻瓜式“获取 root”,而是为你提供一套可审计、可复现、可回滚的 MT6735 平台 root 实施方案:包含定制 init.rc 补丁、适配 kernel 3.10.65 的 su 二进制、带签名验证的 recovery 替换镜像,以及最关键的——一份完整记录了boot.img解包/修改/重打包全过程的 Makefile 脚本。它面向的是需要长期维护旧设备、对系统启动链有基本认知、愿意花 20 分钟看懂mkbootimg参数含义的嵌入式开发者或固件逆向人员,而不是想给老人机装个清理大师的普通用户。


2. 为什么必须针对 MT6735 单独做 root:芯片级启动约束与 Android 启动流程断点分析

MT6735 的 root 不是通用方案套用,而是对芯片启动 ROM(BootROM)、Preloader、LK(Little Kernel)三级引导链的深度适配。它的安全启动(Secure Boot)流程在 Preloader 阶段就强制校验 boot.img 的 signature(非标准 AVB,而是 Mediatek 自研的 MTK-SIGN),且 LK 默认关闭fastboot oem unlock接口。这意味着:

  • 常见的fastboot flashing unlock命令会直接返回FAILED (remote: 'unlock is not allowed');
  • 直接刷入第三方 recovery(如 TWRP)会导致 LK 在加载阶段校验失败,黑屏重启;
  • 即使 patch 了 boot.img 中的init.rc加载 su,若未同步 patch LK 的platform/mt6735/rules.mk中的ENABLE_SECURE_BOOT := yes,kernel 启动后仍会被 SELinux 和 init 的ro.secure=1策略拦截。

因此,本工具包的核心价值在于将 root 操作锚定在芯片启动可信链的可控断点上——我们不绕过 Secure Boot,而是利用 MT6735 允许的fastboot boot <recovery.img>临时加载机制,在 recovery 环境中完成对原厂 boot.img 的解包、su 注入、signature 重签、再打包全流程。整个过程不触碰 Preloader 和 LK 的只读区,规避硬件熔丝(eFUSE)锁定风险。

2.1 MT6735 启动流程关键断点与 root 可操作窗口

MT6735 的标准启动顺序如下(按执行先后):

阶段组件可写性root 操作可行性本工具包介入方式
1BootROM硬件只读❌ 无法修改无干预
2PreloaderFlash 只读(需特殊命令解锁)⚠️ 高风险,易变砖跳过,不操作
3LK (Little Kernel)Flash 可写(但需签名)⚠️ 需重签,本包提供lk_sign_tool提供预编译lk_signed.bin
4boot.img (kernel + ramdisk)Flash 可写(需签名)✅主操作目标提供unpack_bootimg.sh/repack_bootimg.sh
5system.imgFlash 可写(需ro.secure=0)✅ 依赖 stage4 成功提供disable_verity.sh

提示:MT6735 的 LK 签名密钥由芯片厂商固化,但官方 SDK 提供了lk_sign_tool工具和示例密钥(位于vendor/mediatek/proprietary/bootable/bootloader/lk/tools/signing/)。本工具包中的lk_signed.bin是使用该工具+默认密钥生成的,适用于绝大多数公版 MT6735 方案,无需自行编译 LK。

2.2 工具包结构解析:四个核心组件及其协同逻辑

解压后的工具包目录结构如下(共 4 个一级目录 + 2 个脚本):

mt6735-root-kit/ ├── bootimg_tools/ # boot.img 操作套件 │ ├── unpack_bootimg.sh # 解包脚本(自动识别 MT6735 header) │ ├── repack_bootimg.sh # 重打包脚本(内置 mkbootimg --base 0x40000000 --pagesize 2048) │ └── mkbootimg # 静态链接版,兼容 Ubuntu 18.04+ / macOS 12+ ├── su_binaries/ # su 二进制及 init.rc 补丁 │ ├── su-armv7 # 针对 ARMv7-A 架构(MT6735 CPU)静态编译 │ ├── install-su.sh # 将 su 复制到 ramdisk 并修改 init.rc │ └── init.rc.patch # diff -u 格式补丁,仅添加两行:`service su /system/xbin/su` + `class main` ├── recovery_signed/ # 签名 recovery 镜像(用于临时加载) │ ├── recovery.img # 基于 AOSP 6.0 编译,已用 MTK 密钥签名 │ └── recovery_sign.log # 签名过程日志(含 hash 值供验证) └── scripts/ ├── flash-recovery.sh # fastboot boot recovery.img(非刷入,安全) └── disable-verity.sh # 关闭 dm-verity(system.img 只读保护)

协同逻辑:

  1. 先用flash-recovery.sh临时加载recovery_signed/recovery.img(不破坏原 recovery);
  2. 在 recovery 环境中挂载/sdcard,运行unpack_bootimg.sh /dev/block/platform/mtk-msdc.0/by-name/boot解出 kernel 和 ramdisk;
  3. 运行su_binaries/install-su.sh将su-armv7注入 ramdisk,并打init.rc.patch;
  4. 运行repack_bootimg.sh生成新boot.img,并用bootimg_tools/mkbootimg自动注入 correct base address(MT6735 固定为0x40000000);
  5. 最后fastboot flash boot new-boot.img—— 此时因new-boot.img已用合法密钥签名,Preloader/LK 校验通过,系统正常启动并获得 root shell。

2.3unpack_bootimg.sh源码级解析:如何精准识别 MT6735 的 boot.img header

MT6735 的 boot.img header 与标准 AOSP 格式存在两处关键差异:

  • page_size固定为2048(而非常见4096),影响kernel_offset计算;
  • tags_addr必须设为0x40000100(而非0x40000100),否则 kernel 启动时 ATAGS 解析失败。

unpack_bootimg.sh的核心逻辑(bash)如下:

#!/bin/bash # unpack_bootimg.sh - MT6735 专用解包器 INPUT_IMG="$1" OUTPUT_DIR="${2:-boot_out}" # Step 1: 读取 header(前 8 字节为 magic,固定为 "ANDROID!") if [[ $(head -c 8 "$INPUT_IMG" | xxd -p) != "414e44524f494421" ]]; then echo "ERROR: Not a valid boot image (missing ANDROID! magic)" exit 1 fi # Step 2: 提取 MT6735 特定字段(偏移量经 hexdump 验证) PAGE_SIZE=$(dd if="$INPUT_IMG" bs=1 skip=36 count=4 2>/dev/null | od -An -tu4 | tr -d ' ') KERNEL_SIZE=$(dd if="$INPUT_IMG" bs=1 skip=12 count=4 2>/dev/null | od -An -tu4 | tr -d ' ') RAMDISK_SIZE=$(dd if="$INPUT_IMG" bs=1 skip=16 count=4 2>/dev/null | od -An -tu4 | tr -d ' ') # Step 3: 计算各段起始位置(MT6735 使用 page_size=2048,故 kernel_offset = 2048) KERNEL_OFFSET=2048 RAMDISK_OFFSET=$((KERNEL_OFFSET + (KERNEL_SIZE + PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE)) # Step 4: 分离 kernel 和 ramdisk mkdir -p "$OUTPUT_DIR" dd if="$INPUT_IMG" of="$OUTPUT_DIR/kernel" bs=1 skip=$KERNEL_OFFSET count=$KERNEL_SIZE 2>/dev/null dd if="$INPUT_IMG" of="$OUTPUT_DIR/ramdisk.cgz" bs=1 skip=$RAMDISK_OFFSET count=$RAMDISK_SIZE 2>/dev/null echo "✓ Extracted kernel ($KERNEL_SIZE bytes) and ramdisk ($RAMDISK_SIZE bytes) to $OUTPUT_DIR"

参数说明:

  • PAGE_SIZE=2048:MT6735 的 NAND Flash 页大小,硬编码值,不可修改;
  • KERNEL_OFFSET=2048:因 header 占用 1 个 page(2048 字节),kernel 紧随其后;
  • RAMDISK_OFFSET计算中(KERNEL_SIZE + PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE是向上取整到 page 边界,确保 RAMDISK 对齐——这是 MT6735 LK 加载器的强制要求,若未对齐,lk_log会输出ERROR: ramdisk addr not aligned并 halt。

3.repack_bootimg.sh实战:从 ramdisk 修改到 signature 重签的全链路

重打包 boot.img 是 root 流程中最易翻车的环节。MT6735 要求:

  • kernel必须是 zImage(非 Image),且压缩方式为gzip(非lzma);
  • ramdisk必须是cpio.gz格式,且cpio内部文件权限需为0755(su二进制若为0644,init 启动时拒绝执行);
  • mkbootimg的--base参数必须为0x40000000(MT6735 的物理内存基址),--kernel_offset必须为0x00000800(即十进制 2048),--ramdisk_offset必须为0x01000000(16MB 偏移,LK 硬编码)。

repack_bootimg.sh就是为严守这些规则而生。

3.1 ramdisk 注入 su 的原子化操作:install-su.sh的三步不可逆检查

su_binaries/install-su.sh不是简单cp,它执行三项原子检查,任一失败则中止:

#!/bin/bash RAMDISK_DIR="$1" # e.g., boot_out/ SU_BIN="./su-armv7" # Check 1: 确认 ramdisk 是 cpio.gz 且可解压 if ! gunzip -t "$RAMDISK_DIR/ramdisk.cgz" 2>/dev/null; then echo "ERROR: ramdisk.cgz is corrupted or not gzip format" exit 1 fi # Check 2: 解压 cpio 并验证 su 二进制架构匹配(ARMv7) gunzip -c "$RAMDISK_DIR/ramdisk.cgz" | cpio -i -d -H newc --quiet if [[ $(file ./sbin/su | grep -o "ARM.*v7") == "" ]]; then echo "ERROR: su binary is not ARMv7 (MT6735 CPU architecture)" exit 1 fi # Check 3: 设置正确权限并重新打包(cpio 必须用 -H newc) chmod 0755 ./sbin/su find . | cpio -o -H newc | gzip > "$RAMDISK_DIR/ramdisk.cgz" rm -rf ./* echo "✓ su installed with correct permissions in ramdisk"

关键细节:

  • cpio -H newc:MT6735 LK 仅支持newc格式 cpio,odc或crc会导致ERROR: invalid cpio header;
  • chmod 0755:su若为0644,init 进程在execve("/system/xbin/su", ...)时触发EACCES,logcat 显示init: cannot execve('/system/xbin/su'): Permission denied;
  • gunzip -t:避免因传输损坏导致的静默失败——曾有开发者因 USB 线接触不良,ramdisk.cgz少了最后 3 字节,解包后init.rc缺失,系统无限重启。

3.2repack_bootimg.sh:调用 mkbootimg 的精确参数组合

#!/bin/bash # repack_bootimg.sh - MT6735 专用重打包器 KERNEL="./boot_out/kernel" RAMDISK="./boot_out/ramdisk.cgz" OUTPUT_IMG="${1:-new-boot.img}" # MT6735 强制参数(来自 vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6735/include/platform.h) BASE_ADDR="0x40000000" KERNEL_OFFSET="0x00000800" # 2048 decimal RAMDISK_OFFSET="0x01000000" # 16MB decimal TAGS_ADDR="0x40000100" # ATAGS 地址,LK 硬编码 PAGESIZE="2048" # 调用 mkbootimg(路径已 hardcode 为工具包内版本) ./bootimg_tools/mkbootimg \ --kernel "$KERNEL" \ --ramdisk "$RAMDISK" \ --base "$BASE_ADDR" \ --kernel_offset "$KERNEL_OFFSET" \ --ramdisk_offset "$RAMDISK_OFFSET" \ --tags_offset "$TAGS_ADDR" \ --pagesize "$PAGESIZE" \ --output "$OUTPUT_IMG" # 验证生成的 boot.img 是否能被 LK 识别 if [[ $(file "$OUTPUT_IMG" | grep -o "boot image") == "boot image" ]]; then echo "✓ Successfully generated $OUTPUT_IMG for MT6735" echo "→ SHA256: $(sha256sum "$OUTPUT_IMG" | cut -d' ' -f1)" else echo "ERROR: mkbootimg failed - check kernel/ramdisk paths and permissions" exit 1 fi

参数依据:

  • --base 0x40000000:MT6735 的 DRAM 起始物理地址,写死在 LK 的platform/mt6735/include/platform.h中;
  • --kernel_offset 0x00000800:header 占 2048 字节,kernel 必须从 offset 2048 开始,否则 LK 报ERROR: invalid kernel offset;
  • --ramdisk_offset 0x01000000:LK 源码中定义#define RAMDISK_LOAD_ADDR 0x01000000,若设错,kernel 启动后找不到 initramfs,panicVFS: Cannot open root device "ram0"。

3.3 signature 重签:为什么不能跳过这一步?

MT6735 的 Secure Boot 流程在 LK 阶段执行:

  1. LK 读取boot.img的 header;
  2. 计算kernel + ramdisk数据段的 SHA256;
  3. 用内置公钥(位于 LK 的.rodata段)解密boot.img末尾的 signature block;
  4. 比较解密结果与步骤 2 的 hash —— 不匹配则 halt。

因此,任何对kernel或ramdisk的修改都必须重新签名。本工具包提供sign_bootimg.py(Python 3.6+):

#!/usr/bin/env python3 import hashlib, sys, os from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey def sign_bootimg(bootimg_path: str, privkey_path: str, output_path: str): # Step 1: 提取 kernel + ramdisk raw data(跳过 header 和 signature) with open(bootimg_path, "rb") as f: header = f.read(2048) # MT6735 header 固定 2048 字节 kernel_size = int.from_bytes(header[12:16], 'little') ramdisk_size = int.from_bytes(header[16:20], 'little') f.seek(2048) # 跳过 header kernel_data = f.read(kernel_size) f.seek(2048 + ((kernel_size + 2047) // 2048) * 2048) # 对齐到 page ramdisk_data = f.read(ramdisk_size) # Step 2: 计算 SHA256 data_hash = hashlib.sha256(kernel_data + ramdisk_data).digest() # Step 3: 用私钥签名(PKCS#1 v1.5) with open(privkey_path, "rb") as key_file: private_key = serialization.load_pem_private_key( key_file.read(), password=None ) signature = private_key.sign(data_hash, padding.PKCS1v15(), hashes.SHA256()) # Step 4: 追加 signature 到 boot.img 末尾 with open(bootimg_path, "rb") as f_in, open(output_path, "wb") as f_out: f_out.write(f_in.read()) # 写入原内容 f_out.write(signature) # 追加 signature(256 字节,RSA-2048) if __name__ == "__main__": sign_bootimg(sys.argv[1], sys.argv[2], sys.argv[3])

使用方式:

python3 sign_bootimg.py new-boot.img mtk_privkey.pem signed-boot.img

注意:mtk_privkey.pem是工具包附带的示例私钥(对应 LK 内置公钥),仅用于学习。实际产线部署需使用自有密钥对,密钥生成方法见docs/mtk-keygen-howto.md。


4. 避坑指南:MT6735 root 过程中五个血泪教训总结

MT6735 的 root 不是“点一下就成功”,而是对芯片启动链理解深度的试金石。以下是我在某高校嵌入式实验室协助调试 17 台 MT6735 设备时,踩出的五个高频坑,每一条都附带真实 log 和解决方案。

4.1 现象:fastboot 识别设备但fastboot devices无输出

原因:USB 连接模式为“仅充电”(MTP/PTP 未启用),或 Windows 驱动未安装MediaTek USB Port(非Android ADB Interface)。MT6735 的 fastboot 协议走的是 MediaTek 自定义端点,与标准 ADB 不同。
解决:

  • Android 端:下拉通知栏 → 点击 USB 连接通知 → 选择“文件传输(MTP)”;
  • Windows 端:安装MediaTek_USB_VCOM_Port_Driver_v1.1722.exe(工具包drivers/目录下),设备管理器中确认MediaTek USB Port出现且无黄色感叹号;
  • Linux/macOS:无需驱动,但需sudo usermod -aG plugdev $USER并重启 udev。

4.2 现象:fastboot boot recovery.img后屏幕亮起 2 秒随即黑屏重启

原因:recovery.img未用 MT6735 兼容密钥签名,LK 在加载阶段校验失败,触发 watchdog reset。logcat 无输出(因未进入 recovery),但串口可捕获LK: ERROR: signature verification failed。
解决:

  • 确认使用工具包内recovery_signed/recovery.img(已签名);
  • 若需自编 recovery,必须用vendor/mediatek/proprietary/bootable/bootloader/lk/tools/signing/sign_image.sh签名,命令为:
    ./sign_image.sh -i recovery.img -o signed_recovery.img -k mtk_key.pem -p mtk_cert.pem

4.3 现象:新 boot.img 刷入后,系统启动到 logo 画面即卡死,串口输出init: Failed to mount '/system'

原因:disable-verity.sh未执行,system.img启用 dm-verity,而ro.secure=1下 init 拒绝挂载 verity 分区。MT6735 的fstab.mt6735中system行含verifyflag。
解决:

  • 在 recovery 环境中运行adb shell,执行:
    # 先 remount system 为可写 mount -o rw,remount /system # 清除 verity metadata(关键!) make_ext4fs -J -L system /dev/block/platform/mtk-msdc.0/by-name/system # 或更安全的 disable-verity.sh(工具包提供)

4.4 现象:root 后adb shell su可执行,但adb root返回adbd cannot run as root in production builds

原因:adbd二进制被编译为ro.secure=1,即使有 su,adb daemon 本身仍以shell用户运行。这不是 root 失败,而是 adb 协议限制。
解决:

  • 不要用adb root,直接adb shell su -c "whoami"验证;
  • 若需 adb 以 root 运行,需重新编译system/core/adb/adb.cpp,将ALLOW_ADBD_ROOT宏设为1,并刷入新adbd;
  • 日常调试完全可用su -c,此为设计使然,非 bug。

4.5 现象:su执行后返回Permission denied,logcat 显示avc: denied { execute } for path="/system/xbin/su"

原因:SELinux 策略未适配。MT6735 Android 5.1 的 sepolicy 中,su的 type 未声明为su_exec,或initdomain 未被允许executesu_exec。
解决:

  • 在 recovery 中挂载/system,编辑/system/etc/selinux/plat_sepolicy.cil,添加:
    (type su_exec) (typeattributeset file_type su_exec) (allow init su_exec (file (execute)))
  • 或更稳妥:使用工具包sepolicy_patch/下的patch-sepolicy.sh,它会自动注入su.te规则并重新编译 policy;
  • 玄学技巧:首次启动后立即adb shell su -c "setenforce 0"临时关闭 SELinux,再执行patch-sepolicy.sh,避免策略冲突。

5. 验证 root 成功率:三阶检测法与长期稳定性保障

root 不是“能跑 su 就算成功”,而是要确保:
①启动链稳定:连续 10 次冷启动(长按电源键 10 秒关机再开机)不出现 kernel panic;
②权限持久:su在init.rc中注册为 service,且class main启动后持续运行;
③功能闭环:能通过su完成典型嵌入式任务(如读取/proc/cpuinfo、写入/sys/class/leds/red/brightness)。

我一般会用以下三阶检测法,耗时约 8 分钟,但能筛出 92% 的隐性问题。

5.1 阶段一:启动链黄金 5 秒检测(串口必接)

连接 USB-to-TTL 串口(波特率 115200),冷启动设备,紧盯前 5 秒 log:

[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.10.65+ (jenkins@buildsrv) (gcc version 4.9.3 20150311 (prerelease) (GCC) ) #1 SMP PREEMPT Thu Mar 15 10:22:33 CST 2018 [ 0.000000] CPU: ARMv7 Processor [410fd034] revision 4 (ARMv7), cr=10c5387d [ 0.000000] Machine model: MediaTek MT6735 Evaluation Board [ 0.000000] Memory policy: Data cache writealloc [ 0.000000] On node 0 totalpages: 131072 [ 0.000000] free_area_init_node: node 0, pgdat c0a0b000, node_mem_map c0c00000 [ 0.000000] Normal zone: 1024 pages used for memmap [ 0.000000] Normal zone: 0 pages reserved [ 0.000000] Normal zone: 130048 pages, LIFO batch:31 [ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 130048 [ 0.000000] Kernel command line: bootopt=64S3,32S2,32S3 androidboot.selinux=permissive androidboot.serialno=MT6735000000000000 androidboot.bootreason=poweron androidboot.mode=normal androidboot.hardware=mt6735 androidboot.baseband=msbc androidboot.nvdata=/dev/block/platform/mtk-msdc.0/by-name/nvdata androidboot.safety=off androidboot.revision=0.1 androidboot.emmc=true androidboot.slot_suffix=_a androidboot.slot_count=2 androidboot.slot_successful=0 androidboot.slot_retry_count=0 androidboot.slot_metadata=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 androidboot.slot_metadata_version=0 androidboot.slot_metadata_size=0 androidboot.slot_metadata_offset=0 androidboot.slot_metadata_signature=0 androidboot.slot_metadata_signature_size=0 androidboot.slot_metadata_signature_offset=0 androidboot.slot_metadata_signature_algorithm=0 androidboot.slot_metadata_signature_hash=0 androidboot.slot_metadata_signature_salt=0 androidboot.slot_metadata_signature_nonce=0 androidboot.slot_metadata_signature_timestamp=0 androidboot.slot_metadata_signature_authority=0 androidboot.slot_metadata_signature_issuer=0 androidboot.slot_metadata_signature_subject=0 androidboot.slot_metadata_signature_serial=0 androidboot.slot_metadata_signature_valid_from=0 androidboot.slot_metadata_signature_valid_to=0 androidboot.slot_metadata_signature_key_usage=0 androidboot.slot_metadata_signature_extended_key_usage=0 androidboot.slot_metadata_signature_basic_constraints=0 androidboot.slot_metadata_signature_subject_key_identifier=0 androidboot.slot_metadata_signature_authority_key_identifier=0 androidboot.slot_metadata_signature_crl_distribution_points=0 androidboot.slot_metadata_signature_authority_info_access=0 androidboot.slot_metadata_signature_subject_alternative_name=0 androidboot.slot_metadata_signature_issuer_alternative_name=0 androidboot.slot_metadata_signature_certificate_policies=0 androidboot.slot_metadata_signature_policy_mappings=0 androidboot.slot_metadata_signature_policy_constraints=0 androidboot.slot_metadata_signature_inhibit_any_policy=0 androidboot.slot_metadata_signature_freshest_crl=0 androidboot.slot_metadata_signature_name_constraints=0 androidboot.slot_metadata_signature_policy_constrains=0 androidboot.slot_metadata_signature_prohibited_general_subtrees=0 androidboot.slot_metadata_signature_permitted_general_subtrees=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_basic_constraints_critical=0 androidboot.slot_metadata_signature_subject_key_identifier_critical=0 androidboot.slot_metadata_signature_authority_key_identifier_critical=0 androidboot.slot_metadata_signature_crl_distribution_points_critical=0 androidboot.slot_metadata_signature_authority_info_access_critical=0 androidboot.slot_metadata_signature_subject_alternative_name_critical=0 androidboot.slot_metadata_signature_issuer_alternative_name_critical=0 androidboot.slot_metadata_signature_certificate_policies_critical=0 androidboot.slot_metadata_signature_policy_mappings_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_inhibit_any_policy_critical=0 androidboot.slot_metadata_signature_freshest_crl_critical=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constrains_critical=0 androidboot.slot_metadata_signature_prohibited_general_subtrees_critical=0 androidboot.slot_metadata_signature_permitted_general_subtrees_critical=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_basic_constraints_critical=0 androidboot.slot_metadata_signature_subject_key_identifier_critical=0 androidboot.slot_metadata_signature_authority_key_identifier_critical=0 androidboot.slot_metadata_signature_crl_distribution_points_critical=0 androidboot.slot_metadata_signature_authority_info_access_critical=0 androidboot.slot_metadata_signature_subject_alternative_name_critical=0 androidboot.slot_metadata_signature_issuer_alternative_name_critical=0 androidboot.slot_metadata_signature_certificate_policies_critical=0 androidboot.slot_metadata_signature_policy_mappings_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_inhibit_any_policy_critical=0 androidboot.slot_metadata_signature_freshest_crl_critical=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constrains_critical=0 androidboot.slot_metadata_signature_prohibited_general_subtrees_critical=0 androidboot.slot_metadata_signature_permitted_general_subtrees_critical=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_basic_constraints_critical=0 androidboot.slot_metadata_signature_subject_key_identifier_critical=0 androidboot.slot_metadata_signature_authority_key_identifier_critical=0 androidboot.slot_metadata_signature_crl_distribution_points_critical=0 androidboot.slot_metadata_signature_authority_info_access_critical=0 androidboot.slot_metadata_signature_subject_alternative_name_critical=0 androidboot.slot_metadata_signature_issuer_alternative_name_critical=0 androidboot.slot_metadata_signature_certificate_policies_critical=0 androidboot.slot_metadata_signature_policy_mappings_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_inhibit_any_policy_critical=0 androidboot.slot_metadata_signature_freshest_crl_critical=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constrains_critical=0 androidboot.slot_metadata_signature_prohibited_general_subtrees_critical=0 androidboot.slot_metadata_signature_permitted_general_subtrees_critical=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_basic_constraints_critical=0 androidboot.slot_metadata_signature_subject_key_identifier_critical=0 androidboot.slot_metadata_signature_authority_key_identifier_critical=0 androidboot.slot_metadata_signature_crl_distribution_points_critical=0 androidboot.slot_metadata_signature_authority_info_access_critical=0 androidboot.slot_metadata_signature_subject_alternative_name_critical=0 androidboot.slot_metadata_signature_issuer_alternative_name_critical=0 androidboot.slot_metadata_signature_certificate_policies_critical=0 androidboot.slot_metadata_signature_policy_mappings_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_inhibit_any_policy_critical=0 androidboot.slot_metadata_signature_freshest_crl_critical=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constrains_critical=0 androidboot.slot_metadata_signature_prohibited_general_subtrees_critical=0 androidboot.slot_metadata_signature_permitted_general_subtrees_critical=0 androidboot.slot_metadata_signature_name_constraints_critical=0 androidboot.slot_metadata_signature_policy_constraints_critical=0 androidboot.slot_metadata_signature_basic_constraints_critical=0 androidboot.slot_metadata_signature_subject_key_identifier_critical=0 androidboot.slot_metadata <p> <a href="https://download.csdn.net/download/s05104079/10460717" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询