MAC OS에서 프록시를 위한 안드로이드 에뮬레이터 세팅하고 안드로이드 언팩까지

J.LEE·2023년 2월 13일
0
post-thumbnail

에뮬레이터로 안드로이드 스튜디오를 사용하는 것을 전제로 한다.
실 기기에 적용하는 경우에도 크게 차이는 없다.

PART I. 인증서 생성하기

안드로이드 7.0부터 39개월 이상되는 인증서는 오류가 발생하기 때문에 프록시에서 기본 생성되는 인증서가 39개월이 넘으면 동작이 되지않는다.
내가 사용하는 Burpsuite의 경우 이 경우에 해당되어서 인증서를 별도로 생성해야 한다.

  1. 인증서를 만들어준다
openssl req -x509 -days 360 -nodes -newkey rsa:2048 -outform der -keyout server.key -out ca.der
  1. 개인키를 der로 변환한다
openssl rsa -in server.key -inform pem -out server.key.der -outform der
  1. 서버키를 pkcs8로 만들어주자
openssl pkcs8 -topk8 -in server.key.der -inform der -out server.key.pkcs8.der -outform der -nocrypt
  1. 해당 인증서를 프록시에 등록해주자.


윗 칸에는 2에서 만든 der을, 아래 칸에는 3에서 만든 pkcs8 키를 넣어주면 된다.

  1. 안드로이드에서도 이 키를 써야하기 때문에 export 해주자.

  1. export한 키를 pem 형식으로 변환해준다.
openssl x509 -inform DER -in burp.der -out burp.pem
  1. 추출한 파일에서 해서 해시를 추출해주고, 맨 윗줄에 나오는 이름에 확장자를 0으로 해서 burp.pem 파일명을 변경해준다.
openssl x509 -inform PEM -subject_hash_old -in burp.pem

아래와 같은 형태로 나올텐데 이 경우 파일명이 a7363fd6.0 이 된다.

a7363fd6
-----BEGIN CERTIFICATE-----
MIIDfTCCAmWgAwIBAgIUZ+aC4TH59zXOuZbho638L1Jp3b4wDQYJKoZIhvcNAQEL
BQAwTjELMAkGA1UEBhMCS1IxCzAJBgNVBAgMAktSMQswCQYDVQQHDAJLUjELMAkG
A1UECgwCS1IxCzAJBgNVBAsMAktSMQswCQYDVQQDDAJLUjAeFw0yMjEyMDUwNjI5
MThaFw0yMzExMzAwNjI5MThaME4xCzAJBgNVBAYTAktSMQswCQYDVQQIDAJLUjEL
MAkGA1UEBwwCS1IxCzAJBgNVBAoMAktSMQswCQYDVQQLDAJLUjELMAkGA1UEAwwC
S1IwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdhJLCc8XHXUu9zlbU
N1BGP1O6ArjafTqopg4b+t3Y+kdCbDwUMunLFr86hzkRaL+WiuuWT3TrAIEgZhUg
djUNDxG6POLXUh4Xk2TFujx/v4WqXVT0VmtFmKtLzoaOHhrESrEWvu1LmfciVrF7
o8KY0tFNSv2+ccna3J+WB/bhtgT9ehEtZY+r2dvL+QcqUzUZSPq1rY+SID6j1IsQ
AOd8v3YUWSH3YVfKKGLynoIsRU3eitLqneRDFzFSEixwgWOhQSa/YgAYzpAtzuby
H0kfQmUZg0f5JSHaGZSBmIA6c7mjGU9ZzaICMV+IXHF6uO1bSfXjiFKcQYvuwkf5
2GSBAgMBAAGjUzBRMB0GA1UdDgQWBBRNdLfX+G1TnhjBUu8h1vsQkGtisjAfBgNV
HSMEGDAWgBRNdLfX+G1TnhjBUu8h1vsQkGtisjAPBgNVHRMBAf8EBTADAQH/MA0G
CSqGSIb3DQEBCwUAA4IBAQB75OqIDQHKGeLX2ovH0CZqpsBAlfgohH6BekSo2Ypd
Z4c2zbgYm5J7CdwVaRP0kWlv/x005xA2lDKOtVa94K8o0KPScDU3rhuR9k72HF/1
rMTErh8kL9t1DZyHkbe6oRbL576O1LZrBKI2yWROY6vWNF+uNGIo5i5vBHKrNeDS
6GofQwpf8t1OL6aNMHUO/yoQ7g0E1dScBCIZr1wKy1gHcSzkj+6CaHq2hHN1+lqo
Cs2hk0j644egInUDi590RqAHNzpD62CE5O9KtjKZz33OZv+EsCGB8fivJV5i1/Vo
TehrXg0uTJU+KQjxJ6tYYKeR1OrBfv4w9lpHIWgpy4/A
-----END CERTIFICATE-----

PART II. 인증서 넣기

  1. avd에서 디바이스를 생성한다. 이 때 구글 플레이 스토어가 없는 버전으로 한다.

  2. 터미널에서 설치된 avd 목록을 확인한다.

./Library/Android/sdk/emulator/emulator -list-avds 
  1. writable-system 옵션을 준 상태에서 에뮬레이터를 실행한다.
./Library/Android/sdk/emulator/emulator -avd Pixel_XL_API_28 -writable-system
  1. adb root 명령으로 루트 상태로 변경한다.
  1. 준비한 인증서를 PART I에서 만들었던 이름 그대로 복사한다.
adb push a7363fd6.0 /sdcard/Downloads/a7363fd6.0 
  1. adb shell 진입 후 파일 시스템 쓰기 권한을 획득한다.
mount -o rw,remount / 
  1. adb shell 진입해서 해당 파일을 /etc/security/cacerts/a7363fd6.0 으로 복사하면 인증서 적용이 완료된다.

PART III. APK 디컴파일 하기

여기가 사실 가장 귀찮은 부분이다.
혹시 윈도우 유저라면, 윈도우에는 GUI로 이걸 한방에 해주는 apk easytool gui가 있으니 구글에서 해당 툴을 검색해서 사용하는 것을 추천한다.

  1. apktool d apk명 으로 언팩한다.

  2. 원하는대로 smali 코드를 수정한 후 저장

  3. AndroidManifest.xml에서 android:extractNativeLibs을 true로 변경한다.

  4. apktool b --use-aapt2 언팩폴더명 -o 저장할apk명 으로 리패키징한다.

    • --use-aapt2 옵션은 작성자 환경을 기준으로 한 것으로 불필요한 경우도 있다.
  5. 키사이닝

keytool -genkey -v -keystore sample.keystore -alias sample -keyalg RSA -keysize 2048
  1. 서명
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore sample.keystore sample.apk sample
profile
어딘가의 그 누군가.

0개의 댓글