2016년 초, IOS 분석과 관련된 글을 쓴적이 있었다.
https://empier.tistory.com/98?category=451796
https://empier.tistory.com/126
테스트 환경
기기 : 아이폰 SE
기기버전 : IOS 11.4.1
익스플로잇 : UnCover 3.21
CPU칩 A11 이하 디바이스
주의사항
아이폰에서는 타 프로세스에 대한 권한을 가지고 있지않으므로
Set get-task-allow, Set CS_DEBUGGED
위 두개의 옵션을 활성화하고 탈옥해야한다. 그리고 실행되는 분석프로그램이( 예로 debugserver )
get-task-allow가 true로 서명되야한다.
LLDB를 이용한 디버깅 방법 순서
Step 1 : debugserver 다운로드(첨부파일)
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: 디버깅을 시작할 수 있다.
번외: 앱을 시작지점부터 디버깅하고 싶다면 waitfor 인자 추가하고 페이코 실행 이후 LLDB로 연결
Ex) spawn /usr/bin/debugserver 127.0.0.1:22" -waitfor payco
디버깅 시작 화면
※ IOS 11.3을 비롯한 이전버전부터 watchpoints가 안된다고하지만 사용하지도 않아도 분석에 문제가 없었음.
메모리 맵
커맨드 : image list
설명: 현재 Memory Map에 매핑된 바이너리 정보를 알 수 있다. 100개 이상의 라이버르리가 매핑되어있는데, 보통 앱의 코드는 최상위에 있다.
메모리 덤프
커맨드 : memory read --outfile /tmp/mem.txt 0x6080000fe680 0x6080000fe680+1000
설명: 지정된 부분까지 메모리 덤프
메모리 값 출력
커맨드 : x/1x 0xaddress
설명: 주소에 위치한 값 출력
메모리 값 설정
커맨드 : memory write 0xaddres 0xvalue
설명: GDB의 set *0xaddress=0xvalue
1byte가 아닌 4byte만큼 입력할때는 인자로 길이를 지정해줘야한다.
ex) memory write -s 4 0xaddres 0x12345678
레지스터 값 출력
커맨드 : reg read
설명 : GDB의 info reg
모든 레지스터를 출력해준다.
브레이크포인트
커맨드 : b* 0xaddress
설명: 브레이크 포인트, GDB와 같다.
br di 로 모든 브레이크 포인트를 비활성화 할 수 있다.
=========== 2024년 7월 6일 내용 수정 =============
iOS 17인 지금도 분석을 하고 있다 (rootless)
tweak 빌드, 디버깅이 가능한데 오늘 네트워크가 안좋아서그런지, 127.0.0.1은 안되는데localhost로 연결은 가능하다..
'리버싱' 카테고리의 다른 글
안드로이드 리퍼블릭 분석 (1) | 2019.09.19 |
---|---|
카카오 멜론 DRM 해제하기 ( .dcf -> .mp3 ) (40) | 2019.06.22 |
멜론 dcf 파일 drm해제해서 mp3으로 변환했따. (16) | 2018.09.05 |
운영체제에 따른 함수 호출 인자 정보 (0) | 2018.08.17 |
악성코드가 사용하는 레지스트리 정보 (펌) (0) | 2018.07.23 |
댓글