안드로이드 7.0 이상부터는 기존에 http://burp 혹은 인증서를 sdcard에 넣어서 설치하는 식으로는 인증서 설치가 불가능합니다.
가장 큰 이유는 사용자 인증서와 시스템 인증서의 권한 차이인데요. 7.0으로 업데이트 되면서 기존에 사용하는 방법은 사용자 인증서로 인증서 설치가 되기 때문에 시스템에 넣어줘야합니다.
테스트는 녹스플레이어에서 진행했습니다. 현재 7.1.2 버전까지 지원하네요 :)
일단 기존에 버프에서 인증서를 추출한 뒤, openssl을 이용해서 시스템폴더에 알맞은 형식으로 변환해 주어야 합니다.
다음 명령어를 입력하여 인증서 변환 및 해쉬값을 추출합니다.
openssl x509 -inform DER -in <추출한 인증서> -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem
제 버프 인증서의 해쉬값은 9a5ba575인데요 해당 <해쉬값>.0으로 파일이름을 변환합니다.
후에 에뮬레이터에 인증서를 넣어줘야 하는데 위치는 /system/etc/security/cacerts/입니다.
다만 system폴더에 접근하려면 권한이 필요한데 mount명령을 이용해 권한을 넣어준 후 인증서 파일을 넣어줍니다.
adb root
adb mount
adb push 9a5ba575.0 /system/etc/security/cacerts/
adb에 접속하여 확인한 결과 인증서가 들어간 것을 확인할 수 있습니다.
인증서를 넣어준후 에물레이터 리부팅하면 시스템폴더에 버프 인증서가 들어간 것을 확인할 수 있습니다 :)
버프로 ssl통신도 확인이 가능합니다 :)
출처 : https://blog.ropnop.com/configuring-burp-suite-with-android-nougat/
-----------------------------------------------------------19.08.19 추가--------------------------------------------------------------
위의 방법 외에도 frida를 이용하여 후킹 후에 진행하는 방법이 있음.
위 방법도 결국엔 루팅이 기본조건이므로 프리다로 우회하던 위 방법고 같이 인증서를 넣어주던 선택해서 진행.
[후킹코드]
Java.perform(function() {
var array_list = Java.use("java.util.ArrayList");
var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');
ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
// console.log('Bypassing SSL Pinning');
var k = array_list.$new();
return k;
}
}, 0);
출처 : https://j-a-l.tistory.com/143?category=809384
'Mobile' 카테고리의 다른 글
Uncrackable3-2 (1) | 2019.05.08 |
---|---|
Ghidra Installation (0) | 2019.04.10 |
Objection(with. iOS SSL Pinning) (0) | 2019.03.11 |
Cydia 에러(Could not connect to the server) (0) | 2019.02.25 |
Android Method Trace(With.Frida) (2) | 2019.01.29 |