Frida绕过SSL认证

绕过原理

  1. 从安卓手机中加载我们自己的CA证书

  2. 创建包含我们信任CA证书的KeyStore

  3. 创建TurstManger,让它信任我们KeyStore中的CA证书

使用工具

  • Frida 
pip3 install Frida -i https://mirrors.aliyun.com/pypi/simple/
pip3 install frida-tools -i https://mirrors.aliyun.com/pypi/simple/
  • root设备
  • ADB 

下载链接:https://developer.android.com/studio/releases/platform-tools?hl=zh-cn

  • 注入脚本
/* 

   Android SSL Re-pinning frida script v0.2 030417-pier

$ adb push burpca-cert-der.crt /data/local/tmp/cert-der.crt

   $ frida -U -f it.app.mobile -l frida-android-repinning.js --no-pause

https://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida/

   

   UPDATE 20191605: Fixed undeclared var. Thanks to @oleavr and @ehsanpc9999 !

*/

setTimeout(function(){

    Java.perform(function (){

     console.log("");

     console.log("[.] Cert Pinning Bypass/Re-Pinning");

var CertificateFactory = Java.use("java.security.cert.CertificateFactory");

     var FileInputStream = Java.use("java.io.FileInputStream");

     var BufferedInputStream = Java.use("java.io.BufferedInputStream");

     var X509Certificate = Java.use("java.security.cert.X509Certificate");

     var KeyStore = Java.use("java.security.KeyStore");

     var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory");

     var SSLContext = Java.use("javax.net.ssl.SSLContext");

// Load CAs from an InputStream

     console.log("[+] Loading our CA...")

     var cf = CertificateFactory.getInstance("X.509");

     

     try {

      var fileInputStream = FileInputStream.$new("/data/local/tmp/cert-der.crt");

     }

     catch(err) {

      console.log("[o] " + err);

     }

     

     var bufferedInputStream = BufferedInputStream.$new(fileInputStream);

    var ca = cf.generateCertificate(bufferedInputStream);

     bufferedInputStream.close();

var certInfo = Java.cast(ca, X509Certificate);

     console.log("[o] Our CA Info: " + certInfo.getSubjectDN());

// Create a KeyStore containing our trusted CAs

     console.log("[+] Creating a KeyStore for our CA...");

     var keyStoreType = KeyStore.getDefaultType();

     var keyStore = KeyStore.getInstance(keyStoreType);

     keyStore.load(null, null);

     keyStore.setCertificateEntry("ca", ca);

     

     // Create a TrustManager that trusts the CAs in our KeyStore

     console.log("[+] Creating a TrustManager that trusts the CA in our KeyStore...");

     var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();

     var tmf = TrustManagerFactory.getInstance(tmfAlgorithm);

     tmf.init(keyStore);

     console.log("[+] Our TrustManager is ready...");

console.log("[+] Hijacking SSLContext methods now...")

     console.log("[-] Waiting for the app to invoke SSLContext.init()...")

SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation = function(a,b,c) {

      console.log("[o] App invoked javax.net.ssl.SSLContext.init...");

      SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers(), c);

      console.log("[+] SSLContext initialized with our custom TrustManager!");

     }

    });

},0);

 手机装frida服务并上传burpsuite证书

1  adb shell getprop ro.product.cpu.abi //查看手机arch版本

2  https://github.com/frida/frida/releases //下载对应版本的服务端frida

3  //adb上传frida到安卓

4  adb push C:\xxx\frida-server /data/local/tmp

5  adb shell chmod 777 /data/local/tmp/frida-server

6  adb push C:\xxx\cert-der.crt /data/local/tmp //上传证书

运行frida服务端

1  adb shell

2  su

3  /data/local/tmp/frida-server

4  //手机打开app,adb查看包名

5  adb shell dumpsys window w |findstr \/ |findstr name=

6  //用`ps`或者`pm list packages`找到需要注入的APP package name

脚本注入

1  frida-ps -Ua    //列出运行中的程序(查看包名很方便)

2  frida -U -l script.js -f package.name    //通过 USB 连接到设备并在 package.name 应用程序上运行 script.js 脚本

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Frida是一款功能强大的开源工具,用于动态分析、调试和修改应用程序。它可以在不修改应用程序源代码的情况下,以细粒度的方式对应用程序进行调试和修改。Frida支持多种操作系统和架构,并且可以通过不同的传输协议与目标应用程序进行通信。 在Frida中,过端口检测是一种用于确定目标应用程序正在监听哪些端口的技术。通过过端口检测,我们可以查找应用程序正在使用的网络接口和服务,了解应用程序正在与哪些主机进行通信。 Frida使用了一种被称为“frida-trace”的命令行工具来实现端口检测功能。在使用该工具时,我们可以指定目标应用程序的名称或进程ID,并且可以过滤出我们感兴趣的特定端口。 通过以下步骤可以进行frida的过端口检测: 1. 安装Frida框架并设置环境变量。 2. 打开终端或命令提示符,输入命令“frida-trace -R <应用程序名称或进程ID>”并按下回车键。这将启动Frida-trace工具,并将其连接到目标应用程序。 3. 输入命令“<函数名称>@@<库名称>”来指定要追踪的函数和库。例如,如果我们要追踪应用程序中的“connect”函数,可以输入命令“connect@@libc.so”。 4. 按下回车键后,Frida-trace将开始追踪指定的函数,并显示与该函数相关的网络连接信息,包括本地IP地址、本地端口、远程IP地址和远程端口。 通过frida进行端口检测可以帮助我们深入了解应用程序的网络行为,发现可能存在的安全风险或潜在的漏洞。同时,它还可以用于调试网络通信问题和分析应用程序与服务器之间的通信协议。 需要注意的是,在进行端口检测时,我们应该遵守相关的法律法规,并且只在合法授权的范围内使用Frida工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值