attached to post

<fridump android emulator with MAC Apple silicon> 안드로이드 개발을 하다 보면 메모리 덤프를 떠야 할 때가 있습니다. profile을 통해서도 가능하지만 frida frame work를 통해서 fridump를 하면 쉽게 할 수 있어 설치 방법을 공유하려고 합니다. 특히 MAC Apple silicon은 레퍼런스가 적어서 해당 기기에 설치 방법을 공유하겠습니다. ## 설치 방법 1. mac에서 파이썬 설치합니다. ``` $ brew install python3 ``` 2. frida 설치합니다. ``` $ pip3 install frida-tools ``` 3. 안드로이드 스튜디오에서 Play Store 가능한 에뮬레이터와 Google Play를 지원하는 시스템 이미지를 선택해서 에뮬레이터를 생성합니다. 4. rootAVD 파일 다운합니다. https://github.com/newbit1/rootAVD?tab=readme-ov-file 5. rootAVD.sh 파일을 통해서 현재 설치된 AVD 확인합니다. ``` $ ./rootAVD.sh ListAllAVDs ``` 6. 리스트에 나온 리스트에서 에뮬레이터에 설치된 버전을 찾아 실행해주면 됩니다. (저는 android 34 google playstore api를 설치했습니다.) ``` $ ./rootAVD.sh system-images/android-34/google_apis_playstore/arm64-v8a/ramdisk.img ``` 7. 에뮬레이터를 재실행합니다. 8. 해당 명령어로 현재 기기 아키텍처 확인 후 맞춰 서버 파일 다운로드합니다. (ex : arm64-v8a 인 경우 "frida-server-16.1.8-android-arm64.xz" 파일 다운) ``` $ adb shell getprop ro.product.cpu.abi ``` 9. 파일 압축을 해제합니다. ``` $ brew install xz $ xz -d frida-server-16.1.8-android-arm64.xz ``` 10. adb에 압축해제한 파일을 넣어줍니다. ``` $ adb push frida-server-16.1.8-android-arm64 /data/local/tmp ``` 11. adb shell을 실행한 후 관리자 권한 부여 명령어를 입력합니다. 에뮬레이터에서 루트 권한 부여 팝업이 뜬 후 “Grant” 를 선택합니다. 루팅이 완료되었습니다. ``` $ adb shell emu64xa:/ $ su emu64xa:/ # whoami ``` 12. frida 서버를 실행 시키기 위해서 파일 권한을 777로 줍니다. ``` chmod 777 /data/local/tmp/frida-server-16.1.8-android-arm64 ``` 13. frida 서버를 백그라운드로 실행 해줍니다. 성공적으로 실행됐을 경우 프로세스 id가 출력됩니다. ``` $ /data/local/tmp/frida-server-16.1.8-android-arm64 & ``` 14. 해당 명령어로 frida 서버가 설치된 기기에 프로세스 목록에 앱 프로세스가 뜨면 정상 설치된 겁니다. ``` $ frida-ps -U ``` 15. fridump3 클론 or 다운합니다. https://github.com/rootbsd/fridump3 17. fridump3.py 파일을 사용해서 메모리 덤프를 뜹니다. (여기서 6964 대신에 “frida-ps -U 또는 IDE에서 해당 앱 프로세스를 찾아서 입력해주시면 됩니다.) ``` $ python3 fridump3.py -u -r 6964 -s ``` 덤프가 완료되면 여러 dump 파일 및 strings.txt 파일이 생성되는 것을 볼 수 있습니다. strings.txt 파일을 보면 EditText, Compose의 TextField에 입력된 값이 노출되는 것을 볼 수 있습니다. 이처럼 credential 한 값들이 String 리터럴로 선언되면, heap 영역에 있는 “String constant pool”에 저장됩니다. 즉 GC 동작 전에는 삭제할 수 없게 되어 값들이 노출되게 됩니다. 따라서 커스텀한 입력 방법을 제공하거나 String 대신에 Char 배열을 사용하는 것을 추천합니다. ## 참고 https://medium.com/@lightbulbr/how-to-root-an-android-emulator-with-tiramisu-android-13-f070a756c499

댓글 1