Android 7.0+ 监控应用HTTPS请求

逆向工程 反编译 安卓
2021-06-27 03:01:54

我正在尝试捕获应用程序在运行时执行的 https 请求,但尚未成功。不同的失败方法,使用 mitmproxy / charles 代理和用户 ca 证书,获取 smali 代码以绕过 x509Certificate 检查,将 ca cert 安装为系统以避免证书固定,使用不同的 xposed 应用程序(过时,仍然值得一试),让我想知道我错过了什么。只能捕获chrome的https流量,其他应用拒绝加载/连接。公平地说,有人可能会问为什么我不弄清楚请求的构建位置并记录所有需要的信息。就个人而言,我认为捕获所述流量的工作方法可以节省大量时间和工作。

# virtual methods
.method public checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V
    .locals 1
return-void #!!

iget-object v0, p0, La/a/a/a/e/d/d$a;->a:Ljavax/net/ssl/X509TrustManager;

invoke-interface {v0, p1, p2}, Ljavax/net/ssl/X509TrustManager;->checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V

return-void
.end method

.method public checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V
    .locals 1

return-void #!!

iget-object v0, p0, La/a/a/a/e/d/d$a;->b:La/a/a/a/e/d/i;

invoke-interface {v0, p1, p2}, La/a/a/a/e/d/i;->a([Ljava/security/cert/X509Certificate;Ljava/lang/String;)Z

move-result v0

if-nez v0, :cond_0

iget-object v0, p0, La/a/a/a/e/d/d$a;->a:Ljavax/net/ssl/X509TrustManager;

    invoke-interface {v0, p1, p2}, Ljavax/net/ssl/X509TrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V

    :cond_0
    return-void
.end method

.method public getAcceptedIssuers()[Ljava/security/cert/X509Certificate;
    .locals 1

return-void #!!

iget-object v0, p0, La/a/a/a/e/d/d$a;->a:Ljavax/net/ssl/X509TrustManager;

invoke-interface {v0}, Ljavax/net/ssl/X509TrustManager;->getAcceptedIssuers()[Ljava/security/cert/X509Certificate;

move-result-object v0

return-object v0
.end method

如果您成功捕获流量(尤其是 https),请告诉我您的程序以实现问题的要求。

1个回答

你的手机有root吗?如果是 - 安装xposed 框架并尝试以下模块之一:

  1. SSLUnpining
  2. 相信我

作为 xposed 框架的替代方案,您可以使用 frida 和

通用绕过脚本

如果您的设备上没有 root,则需要在几个地方更改 smali 代码,请查找 SSlContext 和 SSLSocketFactory。

您可以检查信任管理器的实现并在应用程序中重新创建它。