본문 바로가기
App/AndroGoat

AndroGoat.apk | SSL 피닝 (Frida)

by 09337 2021. 9. 20.

SSL 피닝을 위해서는 초기 설정이 필요하다. Burp 프록시 환경 구성이 되어있지 않다면 아래 링크를 따라 진행하길 바란다.

https://lyk00331.tistory.com/84

 

안드로이드(Nox) Burp 프록시 환경 구성 | Burp 인증서

※ Frida가 PC와 모바일(에뮬레이터 - Nox 사용)에 동일 버전으로 설치되어있다는 전제 하에 진행된다. 1. Burp 인증서 설치 1.1. Burp Suite에서 다음과 같이 진행한다. Next 버튼을 누른 후 나타나는 Select

lyk00331.tistory.com

 

0. 기본 세팅

AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다.

 

1. HTTP(S) 통신 및 SSL 피닝

1.1. HTTP

 

1.2. HTTPS

 

1.3. CERTIFICATE PINNING

HTTP와 HTTPS 처럼 burp suite로 패킷을 잡아보려고 했지만, 잡히지 않는다.

해당 apk 자체에서 허용하는 SSL 인증서가 있어야 패킷이 잡히지만(=SSL 피닝) 현재 그 인증서가 없기 때문이다.

 

이 과정을 frida로 후킹하여 SSL 피닝을 우회하는 언피닝을 진행한다.

 

2. apk 디컴파일

apk easy tool을 사용해서 해당 apk 파일을 디컴파일 해준다.

2.1. package명 및 Network Intercepting 확인

디컴파일 후 나온 AndroidManifest.xml 파일을 통해 package명과 Network Intercepting을 하는 영역을 확인한다.

 

jadx로 위에서 확인한 영역을 보면 아래와 같은 코드가 있다.

// owasp.sat.agoat.TrafficActivity

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_traffic);
    TextView textView = (TextView) findViewById(R.id.result);
    ((Button) findViewById(R.id.httpButton)).setOnClickListener(new TrafficActivity$onCreate$1(this));
    ((Button) findViewById(R.id.httpsButton)).setOnClickListener(new TrafficActivity$onCreate$2(this));
    ((Button) findViewById(R.id.PinningButton)).setOnClickListener(new TrafficActivity$onCreate$3(this));
}

PinningButton이 TrafficActivity$onCreate$3 라는 것을 알 수 있다.

 

// owasp.sat.agoat.TrafficActivity$onCreate$3

public final void onClick(View it) {
    this.this$0.doPinning();
}

이 버튼을 클릭했을 때 doPinning 메서드로 넘어간다.

 

// owasp.sat.agoat.TrafficActivity$doPinning$1

public final void invoke(AnkoAsyncContext<TrafficActivity> ankoAsyncContext) {
    Intrinsics.checkParameterIsNotNull(ankoAsyncContext, "$receiver");
    try {
        OkHttpClient client = new OkHttpClient.Builder().certificatePinner(new CertificatePinner.Builder().add("owasp.org", "sha256/gdU/UHClHJBFbIdeKuyHm/Lq/aQvMLyuTtcvTEE/1JQ=").add("owasp.org", "sha256/YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=").add("owasp.org", "sha256/Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys=").build()).build();
        Request.Builder builder = new Request.Builder();
        ResponseBody body = client.newCall(builder.url("https://" + "owasp.org").build()).execute().body();
        Log.v("Response", body != null ? body.string() : null);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

doPinning에서는 ???...??

 

 

 

 

??????????????????

 

 

 

 

*** 수정중 ***

댓글