티스토리 뷰
iPA
iOS App-Store Package의 줄임말로, iOS 애플리케이션 아카이브 파일.
개발 코드와 번들, 사이닝, 리소스 파일 등이 포함되어 있다.
iPA 구하기
iPA를 구하는 방법은 여러가지가 있다.
- ipatool
- 3utools
- Xcode 아카이브
- frida-ios-dump
frida-ios-dump로 iPA를 받아보자.
먼저 ios 장치(실험용 아이폰)와 Pc 모두 frida가 설치되어 있어야 한다.
분석 대상 앱: QQBrowser
ios 장치: iPhone6s
버전: ios 15.8.3
- frida-ios-dump 설치
먼저 장치와 pc를 usb로 연결하고 ssh로 접속을 해둔다.
https://github.com/AloneMonkey/frida-ios-dump
git clone하고 디렉토리 내에서 dump.py를 수정해야 한다.
35번 째 줄부터 password랑 장치의 ip를 알맞게 수정한다.
- 분석 대상 앱 이름 알아내기
그리고 다음 명령어로 장치에 설치된 앱에 대한 프로세스 정보를 확인한다.
$ python dump.py -l
Name이 우리가 아는 앱의 이름이고 identifier를 사용해야 한다.
분석 대상인 QQBrowser의 Identifier는 com.tecent.mttlite이다. - dump 하기
$python dump.py com.tecent.mttlite
명령어를 실행하여 ios 앱의 dump를 수집할 수 있다.
이 때, 꼭 앱이 실행되고 있는 상태여야 한다.
결과로 앱이름.ipa가 생성되고, 이를 앱이름.ipa.zip으로 변경하여 압축해제하면 된다. - 수집한 dump 파일 열기
압축해제하면 Payload 디렉토리 내에 앱이름 비슷하게 파일이 하나 있다.
우클릭 후 패키지 내용 보기로 앱에 포함된 파일들을 확인할 수 있다.
Mach-o 구조
macOS와 iOS에서 사용되는 바이너리의 형식으로, 여러 아키텍처에서 실행할 수 있는 fat 바이너리이다.
$ otool -hv [분석하고자 하는 앱 이름]
이 명령어로 헤더 정보 확인이 가능하다.
여기서 분석하고자 하는 앱 이름은 payload -> 앱 패키지 -> 앱 이름을 넣어야 한다.
가장 용량이 큰 파일이 분석할 바이너리가 된다.
구조는 다음과 같다.
Header - 파일의 기본 정보를 담고 있는 부분
Load Commands - 파일의 구성 요소를 로드하기 위해 사용하는 명령 리스트
Segments & Section - Segment는 메모리에 매핑되는 데이터들로, 바이너리 코드, 데이터, 스택 등이 있다. Section은 각 Segment들을 나눈 단위이다.
Header
magic - 파일의 식별자
cputype - CPU 아키텍처 정보
cpusubtype - 세부 cpu 모델
filetype - 실행 파일, 공유 파일 등 파일 유형 정보
ncmds - 로드 커맨드 개수
sizeofcmds - 로드 커맨드의 총 크기
flags - 플래그 정보, 디버그 정보 등
플래그의 PIE는 바이너리 주소가 랜덤으로 배정된다는 플래그이다.
Load Commands
각 커맨드에 대한 정보와 segment의 offset 등을 담을 배열이 존재
다음 명령어로 커맨드 정보를 확인할 수 있다.
$ otool -l 앱이름
Load command 74
cmd LC_DATA_IN_CODE
cmdsize 16
dataoff 67258816
datasize 7688
path @executable_path/Frameworks (offset 12)
name /System/Library/Frameworks/UserNotifications.framework/UserNotifications
cmd - command의 종류
cmdsize - 크기
dataoff - 해당 데이터가 시작되는 위치 오프셋
name - 명령어가 의존하는 동적라이브러리 이름
Segments
세그먼트에는 바이너리의 바이트 범위와 정적 파일 내 오프셋, 메모리에 매핑되는 주소, 메모리 보호 속성 등이 정의되어 있다.
__PAGEZERO - 첫번째 세그먼트로 가상 메모리의 0에 위치, 데이터가 없어 바이너리에서는 크기가 0이지만, 가상 메모리에서는 1페이지를 받는다.
__text - 실제 실행 코드 세그먼트, Header와 Load Command를 포함한다.
__cstring - 문자열 상수
__data - 초기화된 데이터
'IOS' 카테고리의 다른 글
[iOS] / frida script 코드 예시 (2) | 2024.12.19 |
---|
- Total
- Today
- Yesterday
- cuckoo
- Python
- 단순선형회귀
- 차량 네트워크
- automotive
- AVTP
- many-to-many
- PCA
- many-to-one
- CAN-FD
- Ethernet
- 딥러닝
- AVB
- 케라스
- HTML
- SOME/IP
- 로지스틱회귀
- 크로스 엔트로피
- 차량용 이더넷
- 이상탐지
- 논문 잘 쓰는법
- 머신러닝
- json2html
- one-to-many
- SVM
- AE
- automotive ethernet
- 회귀
- problem statement
- porks
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |