Skip to main content

复制/提取/修补 android apk 签名和比较 apk

项目描述

GitHub 发布 PyPI 版本 Python 版本 CI GPLv3+

包装状态 包装状态

apksig复印机

复制/提取/修补 android apk 签名和比较 apk

apksigcopier是一种用于将 android APK 签名从已签名的 APK 复制到未签名的 APK 的工具(以验证可重现的构建)。它还可用于比较具有不同签名的两个 APK。它的命令行工具提供四种操作:

  • 将签名直接从已签名的 APK 复制到未签名的 APK
  • 从已签名的 APK 中提取签名到目录
  • 将先前提取的签名修补到未签名的 APK 上
  • 比较两个具有不同签名的 APK

提炼

$ mkdir meta
$ apksigcopier extract signed.apk meta
$ ls -1 meta
8BEA2A77.RSA
8BEA2A77.SF
APKSigningBlock
APKSigningBlockOffset
MANIFEST.MF

修补

$ apksigcopier patch meta unsigned.apk out.apk

复制(提取和补丁)

$ apksigcopier copy signed.apk unsigned.apk out.apk

相比

此命令需要apksigner.

$ apksigcopier compare foo-from-fdroid.apk foo-built-locally.apk
$ apksigcopier compare --unsigned foo.apk foo-unsigned.apk

帮助

$ apksigcopier --help
$ apksigcopier copy --help      # extract --help, patch --help, etc.

$ man apksigcopier              # requires the man page to be installed

环境变量

可以将以下环境变量设置为1yestrue覆盖默认行为:

  • 设置APKSIGCOPIER_EXCLUDE_ALL_META=1为排除所有元数据文件
  • 设置APKSIGCOPIER_COPY_EXTRA_BYTES=1为在数据之后复制额外的字节(例如 v2 sig)

Python API

>>> from apksigcopier import do_extract, do_patch, do_copy, do_compare
>>> do_extract(signed_apk, output_dir, v1_only=NO)
>>> do_patch(metadata_dir, unsigned_apk, output_apk, v1_only=NO)
>>> do_copy(signed_apk, unsigned_apk, output_apk, v1_only=NO)
>>> do_compare(first_apk, second_apk, unsigned=False)

您可以分别使用FalseNoneTrue代替NOAUTOYES

可以设置以下全局变量(默认为False)以覆盖默认行为:

  • 设置exclude_all_meta=True为排除所有元数据文件
  • 设置copy_extra_bytes=True为在数据之后复制额外的字节(例如 v2 sig)

常问问题

apksigcopier 支持哪些类型的签名?

它目前支持 v1 + v2 + v3(它是 v2 的变体)。

它还应该支持 v4,因为它们存储在单独的文件中(并且需要补充的 v2/v3 签名)。

使用该extract命令时,v2/v3 签名保存为 APKSigningBlock+ APKSigningBlockOffset

制表符完成

对于 Bash,将其添加到~/.bashrc

eval "$(_APKSIGCOPIER_COMPLETE=source_bash apksigcopier)"

对于 Zsh,将其添加到~/.zshrc

eval "$(_APKSIGCOPIER_COMPLETE=source_zsh apksigcopier)"

对于鱼,将其添加到~/.config/fish/completions/apksigcopier.fish

eval (env _APKSIGCOPIER_COMPLETE=source_fish apksigcopier)

要求

  • Python >= 3.5 + 点击。
  • compare命令还需要apksigner.

Debian/Ubuntu

$ apt install python3-click
$ apt install apksigner         # only needed for the compare command

安装

Debian

Debian 不稳定的官方软件包 可用:

$ apt install apksigcopier

您还可以使用该分支手动构建 Debian 包,或通过 GitHub 版本debian/sid 下载预构建的包。.deb

NixOS 和 Arch Linux

官方包也可以在 nixpkgs stableArch Linux (及其衍生版本)中获得。

使用点子

$ pip install apksigcopier

注意:根据您的系统,您可能需要使用 egpip3 --user 而不是pip.

来自 git

注意:这会安装最新的开发版本,而不是最新版本。

$ git clone https://github.com/obfusk/apksigcopier.git
$ cd apksigcopier
$ pip install -e .

注意:您可能需要添加 eg~/.local/bin才能$PATH运行apksigcopier.

要更新到最新的开发版本:

$ cd apksigcopier
$ git pull --rebase

执照

GPLv3+

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

apksigcopier-1.0.1.tar.gz (23.4 kB 查看哈希

已上传 source

内置分布

apksigcopier-1.0.1-py3-none-any.whl (22.7 kB 查看哈希

已上传 py3