From 9588a878148853ead05ade651e204934502a7f88 Mon Sep 17 00:00:00 2001 From: NkBe Date: Wed, 19 Nov 2025 18:27:26 +0800 Subject: [PATCH] refactor: improve APK signature block parsing --- .../lsposed/patch/util/ApkSignatureHelper.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/patch/src/main/java/org/lsposed/patch/util/ApkSignatureHelper.java b/patch/src/main/java/org/lsposed/patch/util/ApkSignatureHelper.java index 4ad96d7..b0be7c6 100644 --- a/patch/src/main/java/org/lsposed/patch/util/ApkSignatureHelper.java +++ b/patch/src/main/java/org/lsposed/patch/util/ApkSignatureHelper.java @@ -131,14 +131,16 @@ public class ApkSignatureHelper { while (block.remaining() > 24) { size = (int) block.getLong(); if (block.getInt() == 0x7109871a) { - // signer-sequence length, signer length, signed data length + // SignerSequence length(4) + Signer length(4) + SignedData length(4) block.position(block.position() + 12); - size = block.getInt(); // digests-sequence length - - // digests, certificates length - block.position(block.position() + size + 0x4); - - size = block.getInt(); // certificate length + // 读取 DigestsSequence + int digestsLen = block.getInt(); + block.position(block.position() + digestsLen); + // 不使用,仅为了移动指针 + block.getInt(); + // 这里赋值给 size,供循环外读取数据使用 + size = block.getInt(); + // 此时 block 指针正好位于第一个证书数据的开头 break; } else { block.position(block.position() + size - 0x4);