콘텐츠로 건너뛰기

KTRW 아이폰 커널 디버거 환경구축 (iPhone 8/14.4.2)

https://github.com/jsherman212/ktrw

1. KTRW git clone / make all

$ git clone --recursive https://github.com/jsherman212/ktrw

2. 컴파일 빌드에러 수정 및 gdb-remote시 패닉 수정

deprecated 관련 오류 발생시 해당 소스코드 파일 맨 상단에 다음 코드를 추가

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

https://github.com/jsherman212/ktrw/issues/2

pongo_kextload/source/pongo_kextload.c 코드 중
static void command_ktrwpf(const char *cmd, char *args) 함수에서 마지막 다음 코드를 추가

g_mhaddr = va_for_sa(g_mhaddr);

3. checkra1n에서 pongoOS 모드로 부팅 / 모듈 업로드 / LLDB USB 포트 구축

$ /Applications/checkra1n.app/Contents/MacOS/checkra1n -c -p

$ pongo_kext_loader/pongo_kext_loader \
    -l pongo_kextload/kextload.pongo-module \
    -k ktrw_gdb_stub/ktrw_gdb_stub.ikext

$ ktrw_usb_proxy/ktrw_usb_proxy 39399

4. ipsw로부터 커널 다운받아 압축풀기 (jtool2 2.1 구버전 이용)

$ brew tap stek29/homebrew-idevice

$ brew install partialzipbrowser

$ pzb -d -g kernelcache.release.iphone10 https://updates.cdn-apple.com/2021WinterFCS/fullrestores/071-23198/C10D1954-77D2-4340-B0B3-17EFD3ED957B/iPhone_4.7_P3_14.4.2_18D70_Restore.ipsw

$ ./jtool2_old -dec kernelcache.release.iphone10

$ mv /tmp/kernel .

5. lldb 디버거 실행

$ ktrw_usb_proxy/ktrw_usb_proxy 39399

(다른 터미널 창에서)
$ lldb kernel

(lldb) target create "kernel"
(lldb) settings set plugin.dynamic-loader.darwin-kernel.load-kexts false
(lldb) gdb-remote 39399

아이폰 커널 디버깅 attach 성공한 모습

태그:

답글 남기기