안드로이드 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

+ Recent posts