// HackTricks · Mobile

Make an APK Trust a User CA Certificate

Make an APK Trust a User CA Certificate

Android applications can restrict which certificate authorities they trust. In an authorized test environment, repackaging an APK with a Network Security Configuration that trusts user-installed CAs can make HTTPS traffic inspection possible. This does not automatically bypass certificate pinning implemented elsewhere in the application.[1]

Automatic

apk-mitm automates APK patching for HTTPS inspection and includes patches for several common certificate-pinning implementations.[2]

Manual

Decompile the APK:

apktool d app.apk

Decompiling an APK with apktool

In AndroidManifest.xml, add the following attribute to the <application> element if it is not already set:[1]

android:networkSecurityConfig="@xml/network_security_config"

Before adding:

Android manifest before adding the network security configuration

After adding:

Android manifest after adding the network security configuration

Create or update res/xml/network_security_config.xml with the following content. The system source keeps the preinstalled trust anchors, while user adds user-installed CAs:[1]

<network-security-config>
    <base-config>
        <trust-anchors>
            <!-- Trust preinstalled CAs -->
            <certificates src="https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/188de82beb54e70956b2952367a0af91d26758b8/src/mobile-pentesting/android-app-pentesting/system" />
            <!-- Additionally trust user-added CAs -->
            <certificates src="https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/188de82beb54e70956b2952367a0af91d26758b8/src/mobile-pentesting/android-app-pentesting/user" />
        </trust-anchors>
    </base-config>
</network-security-config>

Rebuild the APK:

apktool b app -o patched.apk

Rebuilding the patched APK with apktool

Repackaging invalidates the original signature, so sign the rebuilt APK before installing it. See the APK signing section.

References

☧ CPTS · ordered posts

Locked

Unlock with your Main_Key through local GPG.

Start the local GPG helper

In your cheatsheet checkout, run:

npm run unlock:helper

Open the link it prints, or paste its pairing code below. Keep the terminal open until GPG finishes.

Import an index you already decrypted

Download the encrypted index, then decrypt with GPG:

gpg --output report-index.json --decrypt report-index.gpg

Your private key stays in GPG. The decrypted index is saved in this browser so you can reopen it after navigation, refreshes and restarts. Lock this browser or clear this site's browser data to remove the saved index. Nothing is uploaded.