You are currently viewing UnfairPlay giải mã IPA trên macOS bằng FairPlay model thu từ máy Mac đã enroll

UnfairPlay giải mã IPA trên macOS bằng FairPlay model thu từ máy Mac đã enroll

UnfairPlay là chương trình Go độc lập, nhận FairPlay model từ chiếc Mac đã đăng ký (enroll) với Mac App Store, rồi dùng model đó giải mã các file IPA iOS đã được cá nhân hóa (personalized). Nói gọn: nó lấy trạng thái FairPlay trên máy bạn, biến thành model dùng lại được, rồi decrypt IPA mà bạn đã tải về bằng công cụ khác.

Cần nói ngay để tránh hiểu nhầm: repo này không đăng nhập Apple, không mua app, không tải IPA. Tác giả ghi rõ trong README là bạn phải tự lo phần đó, ví dụ bằng ipatool. UnfairPlay chỉ làm phần FairPlay, tức chuyển IPA mã hóa thành IPA đọc được, miễn IPA đó được personalize cho cùng một enrollment với chiếc Mac đang dùng.

Vì sao repo này đang được chú ý

Tính đến lúc dữ liệu được ghi nhận, repo có 485 sao, viết bằng Go, license MIT, tạo ngày 2026-10-25 và cập nhật ngày 2026-10-27. Hai ngày. Con số 485 sao trong khoảng thời gian đó nói lên nhu cầu thật: dân reverse engineering iOS, người làm bảo mật, và cả những ai cần nghiên cứu app cũ đều từng vướng FairPlay.

Khác với các thứ lặt vặt trên GitHub: UnfairPlay không phải script Python chạy được nửa chừng rồi vỡ. Nó có mô hình hai giai đoạn rõ ràng (collect và recover), có lệnh verify để kiểm tra mà không giữ plaintext, có lệnh convert-ipa-macos, và quan trọng là nó “fail closed”. Tức khi một đường đi không verify được, nó dừng, không xuất ra model rác. Tác giả còn ghi rõ nó không publish model cho đến khi IPA khớp decrypt và pass validation.

Một chi tiết nữa khiến repo này đáng đọc: nó tách bạch rất kỹ giữa “thu thập” và “sử dụng”. Collection phải bắt đầu trên Mac đã enroll. Sau đó bạn có thể copy model sang máy khác, kể cả Linux, và decrypt ở đó. fairplayd không bị execute trong quá trình recover. Đây là thiết kế có chủ đích về mặt forensic, và nó giải thích tại sao repo chỉ mới vài ngày đã có người star.

Cài đặt và chạy thử

Build chỉ cần Go:

go build -o unfairplay ./cmd/unfairplay

Quy trình dùng gồm hai bước. Bước một, đăng nhập Mac App Store trên máy Mac, cài một app iPhone hoặc iPad, mở nó một lần. Tải về một IPA mã hóa khớp với cùng Apple Account. Rồi chạy setup:

sudo ./unfairplay setup \
 --app /Applications/App.app \
 --ipa App.ipa

Model lưu lại là private. Nó gắn với enrollment của Mac App Store chứ không gắn với một app cụ thể, nên dùng lại được cho các IPA khác có cùng enrollment. Từ đó về sau, decrypt IPA khác chỉ cần:

./unfairplay decrypt --input AnotherApp.ipa

Thư mục model mặc định nằm trong user configuration directory. Muốn đổi chỗ thì set UNFAIRPLAY_MODEL_DIR hoặc truyền --model.

Muốn kiểm tra IPA mà không giữ lại bản plaintext, dùng verify:

./unfairplay verify --input AnotherApp.ipa

IPA có extension và watch app được decrypt trong một lượt. Còn lệnh chuyển IPA mã hóa sang FairPlay cho macOS:

./unfairplay convert-ipa-macos --input App.ipa

Lệnh này dùng model enrollment version-2 đã lưu, hoặc truyền --credential 16 byte private khớp. Nó thay đổi các bản ghi SINF đã personalize, không đụng vào Mach-O code. Tác giả cảnh báo thẳng: một số app iOS vẫn từ chối chạy trên macOS vì lý do không liên quan.

Có cả nhóm lệnh nâng cao. collect và recover tách hai giai đoạn của setup ra để chẩn đoán và xử lý bản capture đã lưu trữ. doctor kiểm tra capture, IPA hoặc model. profile đọc một fairplayd arm64e mà không execute nó:

./unfairplay profile --binary /path/to/fairplayd.arm64e \
 --recovery-profile-output fairplayd.recovery-profile.gz

Profile chỉ chứa vị trí code và tên import, không có account data, không chạy fairplayd. Nó giúp thêm hỗ trợ cho build macOS mới, nhưng tự nó không bật được decrypt.

Ai nên dùng, dùng trong trường hợp nào

Đối tượng rõ ràng nhất là người làm interoperability và preservation: cần chạy app iOS cũ trên máy Mac, cần nghiên cứu app mà mình đã mua hợp pháp, hoặc cần kiểm tra hành vi app trong môi trường mình kiểm soát. Nhóm thứ hai là researcher bảo mật muốn xem cấu trúc IPA, extension, framework, watch app mà không phải vật lộn với FairPlay từ đầu.

Nhóm thứ ba, và đây là chỗ cần tỉnh táo: những người muốn “có IPA giải mã”. UnfairPlay không giúp bạn có IPA. Bạn vẫn phải mua app, vẫn phải enroll Mac, vẫn phải dùng đúng Apple Account. Nếu bạn không có quyền hợp pháp với app đó, công cụ này không mở đường nào cho bạn cả. README nói thẳng: chỉ dùng với app bạn mua hợp pháp, account và thiết bị bạn kiểm soát, cho mục đích interoperability, preservation và nghiên cứu được ủy quyền.

Một tình huống thực tế đáng để ý: chạy decrypt trên Linux. Collection phải bắt đầu trên Mac đã enroll, nhưng sau đó bạn có thể chạy setup trên máy Mac rồi copy model sang, hoặc copy nguyên một bundle collect private rồi chạy recover ở nơi khác. Bundle đó chứa license file đã cài, system SC Info state, IOMACAddress built-in, IPA khớp, metadata build macOS và reference byte của fairplayd đã hash check. Model và IPA personalize sau đó dùng được trên macOS hoặc Linux. Windows build compile được nhưng decrypt chưa bật vì chưa implement được permission check cho private file.

So sánh nhanh

Mình không tiện so sánh với các công cụ decrypt IPA khác vì phần lớn trong số đó là script nhỏ, không công khai, hoặc chỉ chạy trên một phiên bản macOS cụ thể. Cái đáng so ở đây là cách UnfairPlay xử lý tính bền vững: nó có profile cho fairplayd, có doctor, có verify, có recovery bundle. Đó là mức kỹ thuật của một công cụ được thiết kế để tồn tại qua nhiều bản macOS, không phải bản hack chạy một lần.

Ưu điểm và hạn chế

Ưu điểm lớn nhất là tính minh bạch về giới hạn. Repo liệt kê rõ các enrollment contract đã verify: 25G83, 26A428/26A434, và 26B118. Hai bản 25G83 và 26B118 dùng portable semantic evaluator, không cần chạy native fairplayd. Build arm64e lạ chỉ được chấp nhận khi model recovery và full IPA validation đều pass. Đó là mức kỷ luật hiếm thấy ở một repo hai ngày tuổi.

Hạn chế thì cũng rõ. Thứ nhất, phụ thuộc vào macOS build: Apple đổi code fairplayd và layout state giữa các bản, nên build lạ sẽ fail. Thứ hai, không có topics, README khá dài và nặng kỹ thuật, người mới sẽ mất thời gian hiểu SINF, SUPF, SIDB, SC Info là gì. Thứ ba, Windows chưa decrypt được, dù build compile. Thứ tư, license MIT nhưng đi kèm NOTICE của bên thứ ba, cần đọc trước khi nhúng vào sản phẩm.

Về mặt pháp lý và an toàn dữ liệu, có mấy điều cần nhớ. Không publish hay chia sẻ SIDB, SINF, hardware identity, enrollment model, app đã decrypt hay Apple credential. IPA đã decrypt là file phân tích, muốn cài thì phải sign lại. Nếu muốn báo lỗi, README yêu cầu kèm macOS build, SHA-256 của fairplayd, commit UnfairPlay và full error, nhưng tuyệt đối không kèm mấy file private ở trên.

Còn một chi tiết nhỏ mà mình thấy đáng giá: tác giả ghi “The IPA, installed app, Mac state, hardware identity, and model must belong to the same enrollment. Account or selector mismatches are rejected.” Đây là kiểu kiểm tra mà nhiều công cụ bỏ qua, và nó giải thích tại sao repo này fail thay vì đoán mò.

Nếu bạn đang cần một công cụ FairPlay tử tế để nghiên cứu IPA trên máy mình kiểm soát, đây là lựa chọn đáng đọc README trước khi clone. Còn nếu bạn đang tìm cách lách bản quyền, repo này không giúp gì, và tác giả cũng đã nói trước như vậy. Repo ở đây: DrWhax/unfairplay.

Câu hỏi thường gặp

UnfairPlay có tải IPA hoặc đăng nhập Apple thay mình không?

Không. Repo không đăng nhập Apple, không mua app, không tải IPA. Bạn phải tự lo phần đó, ví dụ bằng ipatool, còn UnfairPlay chỉ làm phần FairPlay để chuyển IPA mã hóa thành IPA đọc được, miễn IPA đó được personalize cho cùng một enrollment với chiếc Mac đang dùng.

UnfairPlay có chạy được trên Linux hoặc Windows không?

Collection phải bắt đầu trên Mac đã enroll, nhưng sau đó bạn có thể copy model sang máy khác, kể cả Linux, và decrypt ở đó. Windows build compile được nhưng decrypt chưa bật vì chưa implement được permission check cho private file.

UnfairPlay hỗ trợ những enrollment contract nào?

Repo liệt kê rõ các enrollment contract đã verify: 25G83, 26A428/26A434, và 26B118. Hai bản 25G83 và 26B118 dùng portable semantic evaluator, không cần chạy native fairplayd, còn build arm64e lạ chỉ được chấp nhận khi model recovery và full IPA validation đều pass.

Chia sẻ bài này

TelegramXFacebookZalo
Đăng ngày 27/10/2026
Giang Na
Về tác giả: Giang Na
Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.

Giang Na

Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.