Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
frida-ios-dump-modern — 최신 Frida 17.5.2 API를 지원하는 업데이트된 Frida iOS 덤프 도구 | Kitploit
도구/GitHubGitHub/jwalker/frida-ios-dump-modern
iOS SecurityMobile App PentestingReverse EngineeringMalware AnalysisMobile SecurityBinary Analysis
GitHubjwalker/frida-ios-dump-modern

frida-ios-dump-modern

최신 Frida 17.5.2 API를 지원하는 업데이트된 Frida iOS 덤프 도구

저장소 보기
97개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

최신 iOS IPA 덤퍼

**Frida 17.5.2+**용으로 제작된 최신 iOS 애플리케이션 메모리 복호화 도구로, iOS 14-16 및 여러 탈옥(jailbreak)을 완전히 지원합니다.

상태: ✅ 작동 및 테스트 완료 - Frida 17.5.2를 사용하여 iOS 앱을 성공적으로 덤프하고 복호화한 환경:

  • iOS 14.7.1 + Taurine 탈옥 (iPad mini 5)
  • iOS 16.7.12 + palera1n 탈옥 (iPhone 8)

기능

  • ✅ Frida 17.5.2+ 호환 (NativePointer.readByteArray 사용)
  • ✅ Taurine 탈옥(iOS 14.7.1)과 호환
  • ✅ palera1n 탈옥(iOS 16.7.12)과 호환
  • ✅ palera1n의 /cores/binpack/ 탈옥 경로 처리
  • ✅ 메모리 덤프 + 수동 cryptid 패치를 통한 빠른 복호화
  • ✅ 더 이상 사용되지 않는(deprecated) API 호출 없음
  • ✅ 깔끔하고 유지보수하기 쉬운 코드
  • ✅ 자동 IPA 패키징
  • ✅ Python paramiko 사용 (외부 도구 불필요)
  • ✅ 상세 진행 상황 보고

왜 이 도구인가?

원본 frida-ios-dump(2020년 마지막 업데이트)는 Frida 17.5.2와 호환되지 않는 더 이상 사용되지 않는(deprecated) Frida API를 사용합니다. 이 도구는 최신 Frida API를 사용하여 처음부터 새로 구축되었으며, Taurine 호환 Frida 패치로 특별히 테스트되었습니다.

요구 사항

macOS/호스트 요구 사항

  • Python 3.8+
  • Frida 17.5.2+
  • paramiko (Python SSH 라이브러리 - 자동 설치됨)
  • iproxy (libimobiledevice를 통한 USB 연결용)

iOS 기기 요구 사항

  • 탈옥된 iOS 기기 (iOS 14.7.1 + Taurine에서 테스트됨)
  • 패치된 frida-server 실행 중 (will add my patch repo에서 Frida 패치 참조)
  • SSH 접근 활성화

설치

root@kitploit:~
cd /Users/username/git/frida-ios-dump-modern

# Create virtual environment with uv:
uv venv
source .venv/bin/activate

# Install dependencies
uv pip install -r requirements.txt

# Make script executable
chmod +x dump.py

USB 연결 설정

root@kitploit:~
# Install libimobiledevice if needed
brew install libimobiledevice

# Start USB tunnel (in a separate terminal)
iproxy 2222 22

사용법

1. 설치된 앱 목록 보기

root@kitploit:~
python dump.py -l

2. 애플리케이션 덤프

중요: Taurine 탈옥 제한으로 인해 덤프 전에 앱이 실행 중이어야 합니다.

root@kitploit:~
# 1. Launch the app on your device manually
# 2. Run the dumper:

python dump.py com.example.app

# With custom SSH password:
python dump.py com.example.app -P your_password

# With custom output directory:
python dump.py com.example.app -o /path/to/output

3. 예시: Ventusky 덤프

root@kitploit:~
# 1. Open Ventusky on your iOS device
# 2. Run:
python dump.py com.in-meteo.ventusky -P mypassword

작동 방식

iOS 16 호환 접근 방식 (하이브리드 방법)

  1. 연결(Attach): Frida를 통해 실행 중인 앱 프로세스에 연결합니다
  2. 열거(Enumerate): 앱에 로드된 모든 모듈(바이너리)을 나열합니다
  3. 디스크 바이너리 읽기: 기기 파일 시스템에서 원본 암호화된 바이너리를 읽습니다
    • iOS 16에 중요: LC_DYLD_CHAINED_FIXUPS 데이터를 보존합니다
    • 수정 체인(fixup chain)이 있는 원본 DATA 세그먼트를 그대로 유지합니다
  4. 복호화된 세그먼트 읽기: 메모리에서 암호화된 TEXT 세그먼트만 읽습니다
    • iOS는 런타임에 코드를 복호화합니다
    • 전체 바이너리가 아닌 복호화된 부분만 읽습니다
  5. 교체 및 패치:
    • 디스크 바이너리의 암호화된 TEXT 세그먼트를 복호화된 메모리로 교체합니다
    • LC_ENCRYPTION_INFO에서 cryptid=0 설정
    • 모든 DATA 세그먼트는 건드리지 않음 (수정 체인 보존)
  6. 덤프: 하이브리드 바이너리를 기기의 /tmp에 씁니다
  7. 다운로드: paramiko를 통한 SCP로 기기에서 파일을 전송합니다
  8. 패키징: 분석 준비가 된 복호화된 IPA 파일을 생성합니다

iOS 16에서 작동하는 이유:

  • iOS 16은 체인형 수정(chained fixups)을 사용합니다. 포인터는 dyld가 런타임에 해석하는 '체인'으로 저장됩니다.
  • 메모리에서 덤프하면 해석된 포인터를 얻지만, 도구들은 수정 체인을 기대합니다.
  • 디스크 바이너리를 읽고 암호화된 TEXT만 교체함으로써 원래 수정 체인을 보존합니다.
  • 이것은 bagbak 및 다른 최신 덤퍼들이 사용하는 것과 동일한 접근 방식입니다.

출력

이 도구는 다음을 생성합니다:

  • 개별 복호화된 바이너리
  • 복호화된 바이너리가 포함된 전체 앱 번들
  • 분석 준비가 완료된 IPA 파일

출력 구조 예시:

root@kitploit:~
/tmp/Ventusky_decrypted/
├── Payload/
│   └── Ventusky.app/
│       ├── Ventusky (decrypted main binary)
│       ├── Frameworks/
│       │   └── *.framework (decrypted frameworks)
│       └── ... (other app resources)
└── Ventusky_decrypted.ipa

Taurine 탈옥 호환성

이 도구는 다음을 포함하는 Taurine 패치 Frida 서버와 함께 작동하도록 설계되었습니다:

  1. iOS 14에서 스레드 일시 중단 없음: 커널 패닉 방지
  2. launchd 주입 없음: Taurine 제한 사항 준수
  3. 수동 앱 실행 필요: 덤프 전에 앱을 수동으로 실행해야 합니다

문제 해결

"No USB device found"

root@kitploit:~
# Check frida-server is running on device:
ssh -p 2222 root@localhost "ps aux | grep frida-server"

# Restart frida-server if needed:
ssh -p 2222 root@localhost "killall frida-server; frida-server &"

"App not found"

root@kitploit:~
# List apps to find correct bundle ID:
python dump.py -l

"App not running"

root@kitploit:~
# Launch the app manually on your device first
# This is required due to Taurine jailbreak restrictions

SSH 인증 실패

root@kitploit:~
# Test SSH connection:
ssh -p 2222 root@localhost

# If password prompt works, use -P flag:
python dump.py com.example.app -P your_password

iOS 16: Hopper에서 "Objective-C Metadata looks mangled"

패치 후 iOS 16에서 메타데이터 오류가 발생하는 경우:

문제 진단:

root@kitploit:~
# Run diagnostic on dumped binary
./diagnose_ios16.sh /tmp/AppName_decrypted/Payload/AppName.app/AppName

# Compare with working iOS 14 binary
./diagnose_ios16.sh /path/to/working/ios14/binary

확인해야 할 핵심 사항:

  1. 파일 크기가 디스크의 원본 바이너리와 일치하는지
  2. LC_DYLD_CHAINED_FIXUPS(iOS 16 특정) 확인
  3. 패치 후 cryptid가 0인지 확인

이 도구는 이제 런타임에 확장된 메모리 영역을 덤프하지 않도록 디스크에서 원본 파일 크기를 읽습니다.

덤프 후: 검증

좋은 소식: 이 도구는 이제 덤프 중에 자동으로 cryptid=0을 설정하므로 수동 패치가 더 이상 필요하지 않습니다!

iOS 16 호환성: 이 도구는 하이브리드 접근 방식을 사용합니다:

  1. 디스크에서 원본 바이너리를 읽습니다 (체인형 수정 보존)
  2. 암호화된 TEXT 세그먼트만 복호화된 메모리로 교체합니다
  3. cryptid=0을 자동으로 설정합니다
  4. 원래 수정 체인이 그대로 있는 모든 DATA 세그먼트를 보존합니다

이렇게 하면 iOS 16에서 "Is this a file manually extracted from the DYLD shared cache?" 및 "Objective-C Metadata looks mangled" 오류가 방지됩니다.

덤프 검증:

root@kitploit:~
# Check that cryptid is 0 (should be automatic now)
otool -l Payload/App.app/App | grep cryptid
# Should show: cryptid 0

# Check file has all segments
otool -l Payload/App.app/App | grep "segname __"
# Should show: __TEXT, __DATA_CONST, __DATA, __LINKEDIT

# Open in Hopper - should work without warnings!

수동 패치(레거시 - 더 이상 필요 없음):

어떤 이유로 자동 cryptid 패치가 작동하지 않은 경우:

root@kitploit:~
# Check if patching needed
otool -l Payload/App.app/App | grep cryptid
# If shows cryptid 1, run:

python patch_cryptid.py Payload/App.app/App
mv Payload/App.app/App.patched Payload/App.app/App

예상 결과:

  • ✅ Hopper가 'ciphered' 또는 'mangled metadata' 경고 없이 열립니다
  • ✅ 모든 Objective-C 클래스와 메서드가 표시됩니다
  • ✅ 프로시저 이름이 올바르게 해석됩니다 (sub_XXXXX 아님)
  • ✅ iOS 14(Taurine) 및 iOS 16(palera1n) 모두에서 작동합니다

기술 세부 사항 - iOS 16 체인형 수정(Chained Fixups):

  • 문제: iOS 16은 포인터 인증을 위해 LC_DYLD_CHAINED_FIXUPS를 사용합니다
  • 이슈: 메모리에서 덤프하면 수정 체인이 아닌 해석된 포인터가 생성됩니다
  • 해결책: 하이브리드 접근 방식
    1. 디스크에서 원본 암호화된 바이너리를 읽습니다 (수정 체인 포함)
    2. 메모리에서 복호화된 TEXT 세그먼트만 읽습니다
    3. 디스크 바이너리의 암호화된 TEXT를 복호화된 메모리로 교체합니다
    4. 디스크의 DATA 세그먼트를 보존합니다 (수정 체인 유지)
    5. cryptid=0을 자동으로 설정합니다
  • 결과: 바이너리에 복호화된 코드 + 원래 수정 체인이 있으므로 Hopper가 정상 작동합니다!

기존 frida-ios-dump와의 API 차이점

이 도구는 최신 Frida 17.5.2 API를 사용합니다:

지원

이 도구가 유용하다고 생각되거나 추가 업데이트가 필요하다면 Boba needs 프로젝트 지원을 고려해 주세요:

☕ Buy Me a Boba

라이선스

MIT 라이선스 - 보안 연구 및 교육 목적으로 자유롭게 사용할 수 있습니다.

크레딧

  • Taurine 패치 Frida와 함께 사용하도록 제작됨 (케이스 스터디 곧 공개 예정)
  • AloneMonkey의 원본 frida-ios-dump에서 영감을 받음
  • Frida 17.5.2+용 최신 API 구현

보안 참고 사항

이 도구는 다음 용도로 사용됩니다:

  • 보안 연구
  • CTF 챌린지
  • 교육 목적
  • ???
  • 이익
도구 다운로드
이전 API (Deprecated)새 API (Modern)설명
Module.ensureInitialized()Not neededObjC 자동 초기화
Module.findExportByName(null, 'name')Module.findGlobalExportByName('name')전역 내보내기
Process.getModuleByName()Process.findModuleByName()찾을 수 없으면 null 반환
Manual POSIX file I/Onew File(path, 'wb')내장 File API
Memory.writeByteArray()file.write(arrayBuffer)직접 바이너리 쓰기