Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 솔루션개발
- apk easy tool
- BOB면접
- AndroGoat
- NOX
- jadx
- blockchain
- SlubBackdoor #응용 #악성코드 #악성코드_제작 #Python #깃허브를_이용한_악성코드
- 안드로이드 앱 진단 환경설정
- 앱변조
- 보안제품개발
- injuredandroid.apk
- FlagOneLoginActivity
- injuredandroid
- BOB후기
- XSS
- bitcoin
- BOB10기
- 비트코인
- 자산추적
- 블록체인
- smali
- BOB 합격후기
- golang
- BOB10기합격후기
- Burp Suite
- UTXO
- FlagTwoActivity
- Burp Suite CA
- Frida
Archives
- Today
- Total
Kye0m's Security
[AndroGoat] Network Intercepting 본문
Androgoat - Network Intercepting
SSL 피닝문제이다. Nox를 버프슈트와 연결한 후, http와 https버튼을 누르면 각각의 패킷이 성공적으로 잡히는것을 볼 수 있다. 하지만 CERTIFICATE PINNING 버튼을 누르면 그렇지 않다.



문제풀이
trafficActivity.smali 파일을보면
public final String getHttpurl() {
return this.httpurl;
}
public final void setHttpurl(String str) {
Intrinsics.checkParameterIsNotNull(str, "<set-?>");
this.httpurl = str;
}
public final String getHttpsurl() {
return this.httpsurl;
}
public final void setHttpsurl(String str) {
Intrinsics.checkParameterIsNotNull(str, "<set-?>");
this.httpsurl = str;
}
해당함수를 통해서,http와 https버튼을 누를때, http url과 https url을 넘겨주게된다.
public final void run(String url) {
Intrinsics.checkParameterIsNotNull(url, "url");
try {
Request request = new Request.Builder().url(url).build();
Toast.makeText(this, "Request sent to " + url + " Please intercept using Proxy", 1).show();
this.client.newCall(request).enqueue(new Callback()
}
catch (Exception e) {
e.printStackTrace();
}
}
run함수에서는 Request.Builder를 이용하여 요청을 발생시킨다.
final class TrafficActivity$doPinning$1 extends Lambda implements Function1<AnkoAsyncContext<TrafficActivity>, Unit> {
public static final TrafficActivity$doPinning$1 INSTANCE = new TrafficActivity$doPinning$1();
TrafficActivity$doPinning$1() {
super(1);
}
@Override // kotlin.jvm.functions.Function1
/* renamed from: invoke */
public /* bridge */ /* synthetic */ Unit mo1134invoke(AnkoAsyncContext<TrafficActivity> ankoAsyncContext) {
invoke2(ankoAsyncContext);
return Unit.INSTANCE;
}
/* renamed from: invoke reason: avoid collision after fix types in other method */
public final void invoke2(AnkoAsyncContext<TrafficActivity> receiver) {
Intrinsics.checkParameterIsNotNull(receiver, "$receiver");
try {
CertificatePinner pinner1 = 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();
OkHttpClient client = new OkHttpClient.Builder().certificatePinner(pinner1).build();
Request.Builder builder = new Request.Builder();
Request request = builder.url("https://owasp.org").build();
Response response = client.newCall(request).execute();
ResponseBody body = response.body();
Log.v("Response", body != null ? body.string() : null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Certificate pinning버튼을 누를경우 CertificatePinner를 통해 "https://owasp.org"로 요청을 보내는 것을 확인할 수 있다.
프리다를 통해 자바스크립트 코드를 작성해서 CertificatePinner클래스의 check를 후킹해볼것이다.
console.log("Script loaded successfully");
Java.perform(function x() {
console.log("java perform function");
var CertificatePinner = Java.use('okhttp3.CertificatePinner');
CertificatePinner.check.overload('java.lang.String','java.util.List').implementation = function (p0, p1) {
console.log('! Intercepted okhttp3: ' + p0);
return;
};
});
프리다로 코드를 실행해보면, BurpSuite에서 패킷이 잡히는 것을 확인할 수 있다.


'앱 모의해킹 > AndroGoat' 카테고리의 다른 글
| [AndroGoat] Binary Patching (0) | 2022.09.16 |
|---|---|
| [AndroGoat] Emulator Detection bypass (1) | 2022.09.16 |
| [AndroGoat] Root Detection Bypass (0) | 2022.09.14 |