페이플레이(Fairplay) DRM 이란?
- 앱(어플)의 바이너리 파일을 암호화하여 분석 및 변조가 어렵도록 하는 것.
- 앱 스토어(App Store)에서 다운로드한 앱은 모두 페이플레이 DRM으로 암호화되어 있음.
- 페어플레이 DRM 적용여부는 Otool 도구를 이용하여 확인 가능.
- 페어플레이 DRM이 복호화될 경우 작동방식 및 내부 클래스 구조등을 쉽게 파악하게 되어 보안기능을 우회할 수 있음.
페어플레이 DRM 복호화 방법
1. CRACKERXI+
복호화 과정이 매우 쉬움. 아래의 링크 참조.
2023.02.26 - [Mobile App 취약점 진단/iOS App 진단] - 페어플레이 DRM 복호화 방법 - CRACKERXI+
2. Clutch
복호화 과정이 쉬움. 아래의 링크 참조.
2023.02.26 - [Mobile App 취약점 진단/iOS App 진단] - 페어플레이 DRM 복호화 방법 - Clutch
3. Frida-iOS-Dump
복호화 과정이 매우 복잡하고 어려움. 본문 하단 참조.
Frida-iOS-Dump을 이용한 복호화 방법
1. 윈도우 환경
디바이스와 PC의 연결을 위해 아래의 iTunesDriver64 관련 파일을 모두 다운로드한 뒤, 압축을 해제하여 프로그램을 설치한다.
※ 파일은 분할압축되어져 있음. 세 개의 파일을 모두 다운로드한 후 iTunesDriver64_0205.zip 을 압축해제한다.
중국에서 만든 프로그램이므로 중국어가 나오고 한글이 깨진다. 당황하지 말고 설치를 완료한다.
아래의 사이트에 접속하여 디바이스와 PC를 연결해줄 프로그램을 다운로드한 뒤 압축을 해제한다.
https://code.google.com/archive/p/iphonetunnel-usbmuxconnectbyport/downloads
디바이스와 PC를 연결한다음, 명령프롬프트(CMD)를 이용하여 아래의 명령어를 실행한다.
> itunnel_mux.exe --iport 22 --lport 2222
아래의 사이트에 접속하여 Frida-iOS-Dump 도구를 다운로드한 뒤, 압축을 해제한다.
https://github.com/AloneMonkey/frida-ios-dump
아래의 명령어를 실행하여 frida-ios-dump 를 최신버전으로 업데이트한다.
> pip install -r requirements.txt --upgrade
※ 파이썬이 설치되어 있지 않으면 pip 명령어가 실행되지 않는다. 아래의 글을 참고하여 파이썬을 설치한다.
2021.01.31 - [파이썬] - [파이썬 강의] - 0.1 파이썬 개발 환경 구축
frida-ios-dump의 dump.py 파일은 리눅스 환경에서 동작하도록 코딩되어 있다. 윈도우 환경에서 실행시키려면 다음과 같이 소스를 수정하여 주어야 한다.
dump.py 파일을 메모장 또는 코딩 전문 프로그램으로 아래와 같이 수정한 후 저장한다.
#25 line Add
import stat
#89 line Modify
#zip_args = ('zip', '-qr', os.path.join(os.getcwd(), ipa_filename), target_dir)
zip_args = (os.getcwd() + '\\7z.exe', 'a', '-r', os.path.join(os.getcwd(), ipa_filename), target_dir)
#123 ~ 127 line Modify
#chmod_args = ('chmod', '655', chmod_dir)
#try:
#subprocess.check_call(chmod_args)
#except subprocess.CalledProcessError as err:
#print(err)
if not os.access(chmod_dir, os.W_OK):
os.chmod(chmod_dir, stat.S_IWUSR)
#141 ~ 145 line Modify
#chmod_args = ('chmod', '755', chmod_dir)
#try:
#subprocess.check_call(chmod_args)
#except subprocess.CalledProcessError as err:
#print(err)
if not os.access(chmod_dir, os.W_OK):
os.chmod(chmod_dir, stat.S_IWUSR)
7z.exe, 7z.dll 파일을 dump.py가 있는 폴더로 옮긴다.
※ PC에 7z이 설치되어 있지 않으면 아래의 사이트에 접속하여 다운로드한다.
※ 위 과정을 스킵하고 싶은 사람은 아래의 파일을 다운로드한다.
위 과정을 통해 소스코드를 수정하였다면 아래의 명령어를 입력하여 복호화할 앱의 Identidier값을 확인한다.
> frida-ps -Ua (현재 실행 중인 앱의 정보를 표시하는 명령어)
Identidier값을 확인하였다면 아래의 명령어를 입력하여 페어플레이 DRM 복호화를 실행한다.
> python dump.py "앱의 Identidier값"
※ unexpectedly timed out while waiting for app to launch이라는 문구가 뜬다면 디바이스에 복호화할 앱이 실행되었을 것이다. 그 상태로 다시 한번 명령어를 입력하면 복호화가 정상적으로 실행된다.
※ 아래와 같이 SSH 접속 오류가 발생한다면 디바이스 설정에 맞게 password와 port 번호를 바꾸어 주면 된다.
오류내용 |
C:\frida-ios-dump-master>python dump.py "com.highaltitudehacks.DVIAswiftv2" Exception (client): Error reading SSH protocol banner Traceback (most recent call last): File "C:\Python\lib\site-packages\paramiko\transport.py", line 2268, in _check_banner buf = self.packetizer.readline(timeout) File "C:\Python\lib\site-packages\paramiko\packet.py", line 374, in readline buf += self._read_timeout(timeout) File "C:\Python\lib\site-packages\paramiko\packet.py", line 611, in _read_timeout raise socket.timeout() socket.timeout During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Python\lib\site-packages\paramiko\transport.py", line 2091, in run self._check_banner() File "C:\Python\lib\site-packages\paramiko\transport.py", line 2273, in _check_banner "Error reading SSH protocol banner" + str(e) paramiko.ssh_exception.SSHException: Error reading SSH protocol banner *** Caught exception: <class 'paramiko.ssh_exception.SSHException'>: Error reading SSH protocol banner Traceback (most recent call last): File "C:\Python\lib\site-packages\paramiko\transport.py", line 2268, in _check_banner buf = self.packetizer.readline(timeout) File "C:\Python\lib\site-packages\paramiko\packet.py", line 374, in readline buf += self._read_timeout(timeout) File "C:\Python\lib\site-packages\paramiko\packet.py", line 611, in _read_timeout raise socket.timeout() socket.timeout During handling of the above exception, another exception occurred: Traceback (most recent call last): File "dump.py", line 340, in <module> ssh.connect(Host, port=Port, username=User, password=Password, key_filename=KeyFileName) File "C:\Python\lib\site-packages\paramiko\client.py", line 420, in connect t.start_client(timeout=timeout) File "C:\Python\lib\site-packages\paramiko\transport.py", line 702, in start_client raise e File "C:\Python\lib\site-packages\paramiko\transport.py", line 2091, in run self._check_banner() File "C:\Python\lib\site-packages\paramiko\transport.py", line 2273, in _check_banner "Error reading SSH protocol banner" + str(e) paramiko.ssh_exception.SSHException: Error reading SSH protocol banner |
Port를 22로 바꾸면 되는 경우도 있다.
아래와 같이 [앱이름].ipa 파일이 생성되었다면 페어플레이 DRM 복호화가 제대로 된 것이다.
2. 리눅스 환경
위와 같이 수정하였음에도 불구하고 계속해서 오류가 발생한다면 리눅스환경에서 실행하는 것을 추천한다.
VM에서 칼리(Kali)를 실행한 뒤 PC와 디바이스를 연결한다. 칼리의 배경화면에 디바이스 관련 아이콘이 생성되었다면 제대로 연결된 것이다.
아래의 명령어를 실행하여 PC와 디바이스를 연결해 주는 도구를 설치한다. sudo 명령어로 실행할 시 오류가 발생할 수 있으므로 root 계정으로 실행한다.
> apt install libusbmuxd-tools
아래의 명령어를 실행하여 디바이스와 PC를 연결한다.
> iproxy 2222 22
아래의 사이트에 접속하여 Frida-iOS-Dump 도구를 다운로드한 뒤, 압축을 해제한다.
https://github.com/AloneMonkey/frida-ios-dump
아래의 명령어를 입력하여 페어플레이 DRM 복호화할 앱의 Identidier값을 확인한다.
> frida-ps -Ua (현재 실행 중인 앱의 정보를 표시하는 명령어)
Identidier값을 확인하였다면 아래의 명령어를 입력하여 페어플레이 DRM 복호화를 실행한다.
> python dump.py "앱의 Identidier값"
아래와 같이 [앱이름].ipa 파일이 생성되었다면 페어플레이 DRM 복호화가 제대로 된 것이다.
'Mobile App 취약점 진단 · 모의해킹 > iOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
[iOS App 진단] 11강 - 애플리케이션 패칭(앱 위·변조) 실습 1 (0) | 2023.06.22 |
---|---|
페어플레이 DRM 복호화 방법 - Clutch (0) | 2023.02.26 |
페어플레이 DRM 복호화 방법 - CRACKERXI+ (0) | 2023.02.26 |
[iOS 취약점 진단] 10강 - ATS(App Transport Security) 보안 설정 (0) | 2023.02.23 |
[iOS 취약점 진단] 09강 - 중요정보 메모리 저장(메모리 덤프) (0) | 2023.02.22 |