gpt4 book ai didi

android - 避免中间人(代理)Android

转载 作者:行者123 更新时间:2023-11-29 21:32:21 26 4
gpt4 key购买 nike

我的工作任务是对应用程序进行逆向工程。

我一直在使用 Charles Proxy多次使用其他应用程序都没有任何问题,并且也尝试过Fiddler .我一直能够监控所做的请求/响应。

但我现在正在尝试的应用程序现在确实显示了 Charles 中的任何 Activity 或 Fiddler .首先,我认为他们检查了证书并终止了连接,但应用程序正常运行,没有任何问题。

应用程序有什么方法可以避免代理设置或者我错过了什么?

我一直在使用 apktool以及dex2jar并找到了代码的和平。可能不是 100% 正确,但它可以为您提供一些线索。

public final void a(int paramInt1, int paramInt2)
{
this.b = paramInt2;
InetSocketAddress localInetSocketAddress = new InetSocketAddress(InetAddress.getByName(this.a), this.b);
while (true)
{
try
{
SSLContext localSSLContext = SSLContext.getInstance("TLS");
X509TrustManager[] arrayOfX509TrustManager = new X509TrustManager[1];
arrayOfX509TrustManager[0] = new c(this);
localSSLContext.init(null, arrayOfX509TrustManager, new SecureRandom());
this.e = ((SSLSocket)localSSLContext.getSocketFactory().createSocket());
this.e.connect(localInetSocketAddress, paramInt1);
this.d.clear();
if (Arrays.asList(this.e.getSupportedProtocols()).contains("TLSv1.2"))
{
this.d.add("TLSv1.2");
String[] arrayOfString1 = (String[])this.d.toArray(new String[this.d.size()]);
SSLSocket localSSLSocket1 = this.e;
if (arrayOfString1.length > 0)
localSSLSocket1.setEnabledProtocols(arrayOfString1);
this.c.clear();
if (!Arrays.asList(this.e.getSupportedCipherSuites()).contains("TLS_RSA_WITH_AES_256_CBC_SHA"))
break label374;
this.c.add("TLS_RSA_WITH_AES_256_CBC_SHA");
String[] arrayOfString2 = (String[])this.c.toArray(new String[this.c.size()]);
SSLSocket localSSLSocket2 = this.e;
if (arrayOfString2.length > 0)
localSSLSocket2.setEnabledCipherSuites(arrayOfString2);
e.a().a(this.e.getLocalAddress().getAddress());
e.a().a(this.e.getLocalPort());
a(5000);
this.e.startHandshake();
a(0);
return;
}
}
catch (Exception localException)
{
throw new IOException(localException.toString());
}
if (Arrays.asList(this.e.getSupportedProtocols()).contains("TLSv1.1"))
{
this.d.add("TLSv1.1");
}
else if (Arrays.asList(this.e.getSupportedProtocols()).contains("TLSv1"))
{
this.d.add("TLSv1");
continue;
label374: if (Arrays.asList(this.e.getSupportedCipherSuites()).contains("TLS_RSA_WITH_AES_128_CBC_SHA"))
this.c.add("TLS_RSA_WITH_AES_128_CBC_SHA");
else if (Arrays.asList(this.e.getSupportedCipherSuites()).contains("SSL_RSA_WITH_3DES_EDE_CBC_SHA"))
this.c.add("SSL_RSA_WITH_3DES_EDE_CBC_SHA");
else if (Arrays.asList(this.e.getSupportedCipherSuites()).contains("DES-CBC3-SHA"))
this.c.add("DES-CBC3-SHA");
}
}
}

不太了解 TLS 1.2,但我知道它应该更强大?但是它能避开代理吗?

我还使用 Wireshark 转储了流量,这行得通,但正如预期的那样,信息是加密的,所以它没有多大用处。

如有任何帮助,我们将不胜感激。

最佳答案

这段代码可能会避免代理,因为它正在直接套接字。如果您正在使用一些更高级别的 api,例如 HttpURLConnection,它会遵守代理设置。 http://developer.android.com/reference/java/net/HttpURLConnection.html

您可以尝试使用 SandroProxy 来找出在哪个端口上进行通信。

http://code.google.com/p/sandrop/issues/detail?id=76

  1. 转到 HTTP 选项卡并按下操作栏上的播放按钮SandroProxy 将监听两个新端口 8020 -> web , 8021 -> websockets for chrome devtools
  2. 从 PC 使用 url http your_device_ip:8020 启动 chrome
  3. 检查连接选项卡,最后两列是进程 uid 和名称(可以多个)

要捕获数据,您还可以使用 SandroProxy 并强制进行 iptable 重定向。您将需要有根电话。

顺便说一句:通过 sandroproxy 支持发送 :)

关于android - 避免中间人(代理)Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19135585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com