IOS App 동적분석하기 with LLDB (Tested on ios 11.4.1 , 12.4)
개요
테스트 환경
기기 : 아이폰 SE , 아이폰 8
기기 버전 : IOS 11.4.1,IOS 12.4
익스플로잇에 사용된 버전 : UnCover 3.21
CPU칩 A11 이하 디바이스만 가능할 것으로 추정
주의사항
UnCover 탈옥 설정 화면아이폰에서는 타 프로세스에 대한 권한을 가지고 있지않으므로
Set get-task-allow, Set CS_DEBUGGED
위 두개의 옵션을 활성화하고 탈옥해야한다. 그리고 실행되는 분석프로그램이( 예로 debugserver )
get-task-allow가 true로 서명되야한다. (서명은 ldid 같은 커맨드로 진행가능하다. 이는 검색해보시기를.)
LLDB를 이용한 디버깅 방법 순서
Step 1 : debugserver 다운로드(Xcode에서 추출가능하나 필요하시면 댓글 남겨주시면 업로드하겠습니다. )
Step 2 : 아이폰의 /usr/bin/ 의 경로에 넣고 퍼미션을 755로 변경. 만약 이미 debugserver가 존재한다면 이 파일을 debugserver2로 이름을 바꾼다.
Step 3 : 아이폰에 두개의 deb를 설치해야한다. (필요하시면 댓글 남겨주시면 업로드하겠습니다)
python-v2.7.6-proteas-2015-11-30.deb
lldb-v3.8.0-proteas-2016-05-06.deb
Step 4 : PC에서 아이폰의 프롬프트를 두개 연 뒤, 그중 하나에서 "spawn /usr/bin/debugserver 127.0.0.1:22" 입력
Step 5: 두번째 프롬프트에서 "spawn /usr/bin/lldb" 입력하고 "process connect connect://127.0.0.1:22"
Step 6: 디버깅을 시작할 수 있다.
Ex: 앱을 시작지점부터 디버깅하고 싶다면 waitfor 인자 추가하고 앱 실행 이후 LLDB로 연결
Ex) spawn /usr/bin/debugserver 127.0.0.1:22" -waitfor payco
디버깅 시작 화면
GDB처럼 분석을 할 수 있었으나 몇몇 커맨드가 익숙하지 않으실 것 같아 아래에 분석에 필요한 명령어를 적어두겠습니다.
메모리 맵커맨드 : image list 메모리 덤프커맨드 : memory read --outfile /tmp/mem.txt 0x6080000fe680 0x6080000fe680+1000 메모리 값 출력커맨드 : x/1x 0xaddress 메모리 값 설정커맨드 : memory write 0xaddres 0xvalue 레지스터 값 출력커맨드 : reg read 브레이크포인트커맨드 : b* 0xaddress |