From 6efeaa21e34e5f0b89836bf893cffd6e784d9f45 Mon Sep 17 00:00:00 2001 From: Tim Perry Date: Fri, 31 Jul 2026 09:44:35 +0200 Subject: [PATCH] Fix config PinSet unpinning script for Android 15+ --- android/android-certificate-unpinning.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/android/android-certificate-unpinning.js b/android/android-certificate-unpinning.js index db67807..d3ee47e 100644 --- a/android/android-certificate-unpinning.js +++ b/android/android-certificate-unpinning.js @@ -162,9 +162,16 @@ const PINNING_FIXES = { replacement: (targetMethod) => { const PinSet = Java.use('android.security.net.config.PinSet'); const EMPTY_PINSET = PinSet.EMPTY_PINSET.value; + + // The pins position in the constructor moves between Android versions (Android + // 15 inserted a certificate transparency argument) so match args by type: + const pinsIndex = targetMethod.argumentTypes.findIndex( + (argType) => argType.className === 'android.security.net.config.PinSet' + ); + return function () { - // Always ignore the 2nd 'pins' PinSet argument entirely: - arguments[2] = EMPTY_PINSET; + // Always ignore the 'pins' PinSet argument entirely: + if (pinsIndex !== -1) arguments[pinsIndex] = EMPTY_PINSET; targetMethod.call(this, ...arguments); } }