Skip to content

Instantly share code, notes, and snippets.

@obfusk
Last active February 3, 2024 23:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save obfusk/7fb94b63eba8908434170ed10c9fd309 to your computer and use it in GitHub Desktop.
Save obfusk/7fb94b63eba8908434170ed10c9fd309 to your computer and use it in GitHub Desktop.
APK signing block manipulation scripts
#!/usr/bin/python3
# encoding: utf-8
# SPDX-FileCopyrightText: 2024 FC (Fay) Stegerman <flx@obfusk.net>
# SPDX-License-Identifier: GPL-3.0-or-later
import apksigtool
import dataclasses
import sys
# Usage: cat_sigblock.py [--prepend] APK_A APK_B
# appends/prepends APK_B sigblock to APK_A in place
prepend = "--prepend" in sys.argv[1:]
apkfile_a, apkfile_b = [x for x in sys.argv[1:] if not x.startswith("--")]
_, sig_block_a = old_v2_sig_a = apksigtool.extract_v2_sig(apkfile_a)
_, sig_block_b = old_v2_sig_b = apksigtool.extract_v2_sig(apkfile_b)
blk_a = apksigtool.parse_apk_signing_block(sig_block_a, allow_nonzero_verity=True)
blk_b = apksigtool.parse_apk_signing_block(sig_block_b, allow_nonzero_verity=True)
pairs = blk_b.pairs + blk_a.pairs if prepend else blk_a.pairs + blk_b.pairs
blk_poc = dataclasses.replace(blk_a, pairs=pairs)
apksigtool.replace_apk_signing_block(apkfile_a, blk_poc.dump(), old_v2_sig=old_v2_sig_a)
# vim: set tw=80 sw=4 sts=4 et fdm=marker :
#!/usr/bin/python3
# encoding: utf-8
# SPDX-FileCopyrightText: 2024 FC (Fay) Stegerman <flx@obfusk.net>
# SPDX-License-Identifier: GPL-3.0-or-later
import apksigtool
import dataclasses
import sys
# Usage: dup_sigblock.py APK
# duplicates sigblock in place
apkfile = sys.argv[1]
_, sig_block = old_v2_sig = apksigtool.extract_v2_sig(apkfile)
blk = apksigtool.parse_apk_signing_block(sig_block, allow_nonzero_verity=True)
pairs = blk.pairs * 2
blk_poc = dataclasses.replace(blk, pairs=pairs)
apksigtool.replace_apk_signing_block(apkfile, blk_poc.dump(), old_v2_sig=old_v2_sig)
# vim: set tw=80 sw=4 sts=4 et fdm=marker :
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment