Jailbreaks làm gì (trong chế độ SVC)
Thiên Chúa, nó là muộn vào ban đêm. Bài đăng này giải thích làm thế nào hạt nhân khai thác công việc và dòng chảy chung mã cho vá một 4.x/5.x iOS và một hạt nhân 6.x. (Chủ yếu là các bit thú vị, và làm thế nào bạn có khả năng có thể vá các hạt nhân mình.)
iOS 4.x/5.x: sự thật đơn giản
Jailbreaks trong phiên bản iOS này dựa vào một đặc tính nhất định của XNU pmap (quản lý bộ nhớ vật lý ánh xạ.). Đặc trưng này là hạt nhân và người sử dụng bộ nhớ đã được chia sẻ trong một địa chỉ không gian. Không gian địa chỉ cho người dùng quá trình chỉ chuyển trong machine_switch_context và một vài chức năng khác (xem osfmk/arm/thredinit.c và những người khác). Điều này có nghĩa rằng người dùng có thể chuyển hướng một con trỏ hàm sysent để người sử dụng mã thực thi. Mã này có thể làm nhiều điều như móc chức năng hạt nhân khác nhau hoặc vá chữ ký kiểm tra thói quen, và vv..
hạn chế duy nhất là rằng trang mã phải được ánh xạ như r-x, mà là vô cùng đơn giản. Bản đồ trang web bằng cách sử dụng vm_allocate() hoặc mmap(), thay đổi lá cờ bảo vệ và sau đó làm mất hiệu lực/sạch cache.
iOS 6.x: Level Up
iOS 6.x không làm cho những điều rất dễ dàng. Không gian hạt nhân thực hiện trong không gian địa chỉ khác biệt riêng của mình, mà không có bất kỳ quá trình người dùng ánh xạ. Điều này làm cho nó không thể cho người dùng để thay đổi sysent đến một địa chỉ người dùng được ánh xạ, Tuy nhiên, có vẫn còn sai sót trong thiết kế này.
ngoài ra, văn bản hạt nhân là ánh xạ là chỉ-đọc. Viết bất kỳ sẽ gây ra một hủy bỏ dữ liệu với DFSR bit tương đương với sự cho phép lỗi trên trang / phần.
điều này là vô cùng dễ dàng để phá vỡ, chủ yếu là do deisgn các hệ thống phụ pmap. Apple sử dụng các macro phys_to_virt và virt_to_phys (hoặc tương đương) để chuyển đổi địa chỉ ảo để địa chỉ vật lý. Nếu bạn biết trượt hạt nhân, bạn có thể chuyển từ một địa chỉ vật lý một ảo bởi trừ các cơ sở vật chất và thêm các cơ sở ảo, và phó-versa.
bằng cách đi bộ thông qua kernel_pmap và thông qua các cánh tay dịch bảng mục, ta có thể thay đổi các bit APX và AP trong trang để phản ánh giám sát đọc viết. Sau khi các mục đã bị sửa đổi, TLB phải được xóa. Khi TLB xóa thành công, ánh xạ lần mới sẽ được sử dụng.
để đơn giản hóa quá trình jailbreak, nó là đơn giản hơn nhiều để bcopy() shellode trên một khu vực nop hiện nay trong kỷ niệm giấc ngủ hoặc __start trong hạt nhân. Không phải là rất nhiều không gian, do đó, được cảnh báo. Bằng cách này, bạn không cần phải sửa đổi các mục nhập bảng trang cho một trang được phân bổ bởi kalloc() hoặc bất cứ điều gì.
Bạn cũng có thể rất nhiều sử dụng kỹ thuật sysent trên hạt nhân ánh xạ shellcode, nhưng đó là sự lựa chọn của bạn.
hạt nhân khai thác: A cơ bản mồi
tất cả hạt nhân khai thác luôn kiểm soát máy tính trong một số cách để làm cho lợi nhuận tối đa hoặc tình trạng lộn xộn. Số lượt truy cập máy tính hoặc chương trình luôn luôn chỉ để giảng dạy hiện nay executing.
khi kiểm soát, máy PC có thể trỏ đến mã bất kỳ tiện ích như:
ldr r0, [r1]
bx lr
(Tiện ích cụ thể này đọc địa chỉ ở r1 và trả về giá trị 32-bit nạp để callee.)
Bằng cách kết hợp việc sử dụng máy tính điều khiển và kiểm soát đăng ký, bạn có thể có hiệu quả chạy mã rất dễ dàng.
Jailbreak bản vá lỗi
có một vài jailbreak bản vá lỗi, mainly:
vm_map_enter
vm_map_protect
Sandbox.kext con đường evaluate
AppleMobileFileIntegrity.kext codesign cờ vô hiệu hóa
proc_enforce sysctl thiết lập
task_for_pid_0
khởi động-args (iOS 6.x)
vô hiệu hóa hạt nhân codesign thực thi
PE_I_can_has_debugger _debug_enabled giá trị
những giá trị này được vá bằng cách sử dụng một thói quen đơn giản ldr/str ở shellcode hạt nhân. Không có gì quá lạ mắt.
khi shellcode được thực hiện, nó luôn luôn là tốt nhất để làm mất hiệu lực bộ nhớ cache chỉ dẫn để PoU (và có lẽ dữ liệu).
nhanh chóng giải thích về những gì mỗi vá làm
vm_map_enter/vm_map_protect: Được sử dụng trong MobileSubstrate, cho phép các trang web được vẽ bản đồ như rwx, không chỉ rw - hoặc r-x.
Sandbox.kext con đường đánh giá: được sử dụng để cho phép các ứng dụng để thực hiện đúng cách bên ngoài miền được chỉ định chỗ thử (ví dụ: MobileSafari trong một thư mục ứng dụng giấu).
AppleMobileFileIntegrity.kext codesign cờ vô hiệu hóa: sử dụng cho phép phòng không codesigned ứng dụng.
proc_enforce sysctl thiết lập: Vô hiệu hoá tất cả MAC chính sách móc cho quá trình.
task_for_pid_0: cho phép các ứng dụng với quyền lợi được nhiệm vụ cho pid_allow để sử dụng task_for_pid trên nhiệm vụ hạt nhân.
khởi động-args: cho phép bắt để tải dấu các LaunchDaemon bất động sản danh sách.
vô hiệu hóa hạt nhân thực thi pháp luật codesign: được sử dụng cho phép phòng không codesigned trang.
PE_I_can_has_debugger: Cho phép chức năng gỡ lỗi cơ bản và nhiều hơn nữa thoải mái chỗ thử.
vui chơi!
đang được dịch, vui lòng đợi..
