제 업무에서 응용 프로그램을 리버스 엔지니어링하는 작업이 있습니다.중간에 사람을 피하십시오. (안드로이드)
다른 응용 프로그램과 함께 Charles Proxy 번을 아무런 문제없이 여러 번 사용했으며 Fiddler도 시도했습니다. 나는 항상 요청/응답을 모니터 할 수있었습니다.
하지만 지금 시도하고있는 응용 프로그램은 Charles 또는 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을 사용하여 트래픽을 버렸지 만 정보는 예상대로 암호화되어 있으므로별로 사용하지 않습니다.
도움을 주시면 감사하겠습니다.
기기에서 오는 모든 트래픽을 스니핑 했습니까? 즉, 안드로이드 앱에서 트래픽을 가로채는 것을 진지하게 생각한다면 원하는 것을 포착 할 수있는 후크가 포함 된 나만의 안드로이드 배포판을 만들고 그 맞춤 빌드로 애플리케이션을 실행하는 것이 가장 좋습니다. 실제 장치 또는 훨씬 쉽게, 에뮬레이터에서). – mah
흠 ... 네, 맞춤 빌드를 할 수있을 것 같아요. 내가 원하는 것보다 더 복잡한 해결책이 될 수는 있겠지만, 아무 것도 작동하지 않는다면 ...하지만 찰스 프록시 나 피들러에서 트래픽을 볼 수없는 이유는 무엇입니까? – M3rd0n