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 성공한 모습

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다