ima

by
4 views 3ee152cc...

Description

script test

How to Use

Download the script and run it with Frida CLI:

Download Script

Then run with Frida:

frida -U -f YOUR_PACKAGE_NAME -l ima.js

Replace YOUR_PACKAGE_NAME with the target app's package name.

Source Code

JavaScript
Java.perform(function () {
    console.log("[+] Hooking SSL Pinning");

    var X509TrustManager = Java.use("javax.net.ssl.X509TrustManager");
    var CertificateFactory = Java.use("java.security.cert.CertificateFactory");
    var ByteArrayInputStream = Java.use("java.io.ByteArrayInputStream");
    var TrustManagerImpl = Java.use("com.android.org.conscrypt.TrustManagerImpl");

    // Tu hash SHA-256 del certificado confiable (sin los dos puntos)
    var trustedFingerprint = "3AA81AD7B08F0158FFD2ADD7602FA1B027E491D063C842372CD3FBDA9D6B8DA0";

    TrustManagerImpl.verifyChain.implementation = function (chain, authType, host) {
        try {
            // Comprobar si la cadena de certificados no es null ni vacía
            if (chain == null || chain.length === 0) {
                console.log("[!] Cadena de certificados vacía o nula, bloqueando.");
                throw new Error("Cadena de certificados nula o vacía");
            }

            console.log("[+] Cadena de certificados recibida: " + chain);

            var cert = chain[0]; // Primer certificado de la cadena
            if (!cert) {
                console.log("[!] Certificado no encontrado en la cadena.");
                throw new Error("Certificado no encontrado en la cadena");
            }

            var certBytes = cert.getEncoded();
            var md = Java.use("java.security.MessageDigest").getInstance("SHA-256");
            var fingerprint = md.digest(certBytes);

            // Convertir el hash a String
            var hexString = "";
            for (var i = 0; i < fingerprint.length; i++) {
                var hex = (fingerprint[i] & 0xFF).toString(16);
                if (hex.length == 1) hex = "0" + hex;
                hexString += hex.toUpperCase();
            }

            console.log("[+] Certificado detectado: " + hexString);

            if (hexString === trustedFingerprint) {
                console.log("[+] Certificado confiable, permitiendo conexión.");
                return chain; // Permitir el certificado confiable
            } else {
                console.log("[!] Certificado NO confiable, bloqueando.");
                throw new Error("SSL Pinning detectado");
            }

        } catch (e) {
            // Capturar cualquier excepción y mostrar el error
            console.log("[!] Error durante la verificación del certificado: " + e.message);
            throw e; // Lanzar de nuevo el error para asegurarse de que se bloquee la conexión
        }
    };
});
Share this script:
Twitter LinkedIn

Comments

Login or Sign up to leave a comment.
Loading comments...