본문 바로가기
iOS 해킹

iOS 바이너리 패치 방법

by jwcs 2026. 7. 14.
728x90
반응형

무결성 검증 항목 진단 시 참고하기 위해 작성한다.

 

바이너리 파일은 cryptid 필드에서 바이너리 파일이 암호화되어있는지 알 수 있다.

  • cryptid = 1: 바이너리 파일이 암호화되어 있음
  • cryptid = 0: 바이너리 파일이 복호화되어 있음

앱스토어에서 ios 앱을 다운로드하면 FairPlay DRM으로 암호화된다. 앱이 시작되면 ios는 프로세스가 실행될 수 있도록 메모리에 복호화하여 올라가게 된다. 따라서 메모리 덤프를 통해 복호화된 바이너리 얻을 수 있게 된다.

앱 프로젝트를 하다보면 앱 스토어에서 다운받는 경로 외에도 여러 방식이 있다. 이 경우 암호화가 되어 있지 않기 때문에 비교적 단순하게 바이너리 파일을 가져올 수 있다.

 

두 경우 모두 다뤄보겠다.

 

바이너리가 암호화되지 않은 경우

디바이스 주소 확인

SSH 접근을 위해 와이파이에서 디바이스의 주소를 알아야한다. 위와 같이 와이파이 설정에서 확인할 수 있다.

 

SSH 접근

ssh mobile@192.168.137.150

위 명령어로 접근하면 된다. 필자는 MobaXterm을 사용하는 것을 추천한다. 다음 단계에서 파일 다운로드를 수행하는데, 이 도구를 사용하면 쉽게 다운로드 받을 수 있다.

 

파일 다운로드

/var/containers/Bundle/Application

위 경로에서 내가 다운받은 앱을 확인할 수 있다.

 

하지만 디렉터리 명이 앱 이름으로 구성되어 있지 않다. 따라서 어느 경로에 있는지 찾아야한다. 아래 명령어를 참고하자.

ps -ef | grep -i "<찾는 앱 바이너리>"
frida-ps -Uai

 

경로를 찾은 후에는 MobaXTerm에서 위와 같이 다운로드를 수행해준다.

 

바이너리 패치 및 서명

hxd

다운로드 받은 폴더를 보면 확장자가 없고 용량이 가장 큰 파일이 우리가 수정해야하는 바이너리 파일이다. 필자는 HxD로 바이너리 파일을 수정했다.

 

수정한 파일은 MobaXterm에 드래그앤드롭하면 된다. 혹시 권한 문제가 있다면 /tmp에 드롭하자.

mv <원본 파일> <백업 파일>				# 원본 파일은 백업해둔다.
ldid -e <백업 파일명> > /tmp/ent.plist		# 백업 파일에서 entitlements를 추출한다.
ldid -S/tmp/ent.plist /tmp/<바이너리 패치 파일>	# 권한 문제로 인하여 /tmp 경로에 패치 파일에 업로드
chmod 0755 <바이너리 패치 파일>

 

이후 앱 재실행을 하면 된다.

 

참고

https://www.darkwirelabs.com/articles/dumping-repacking-decrypted-ios-binaries/

 

Dumping and repacking decrypted iOS binaries | Dark Wire Labs

A walkthrough of iOS app encryption, Mach-O load commands, runtime decryption, and IPA reconstruction. Dumping and repacking decrypted iOS binaries Overview App Store binaries are protected by FairPlay DRM on disk. When an app starts, iOS decrypts the exec

www.darkwirelabs.com

 

바이너리가 암호화된 경우

나중에 여유가 될 때 업데이트할 예정

 

728x90
반응형