Xác định xem iPhone có bị bẻ khóa theo chương trình hay không


79

Làm cách nào để bạn xác định (theo chương trình) nếu iPhone / iPod là:

  1. Vượt ngục
  2. Chạy một bản sao nứt của phần mềm của bạn

Pinch Media có thể phát hiện điện thoại bị bẻ khóa hay phần mềm đang chạy bị bẻ khóa, có ai biết cách họ làm như thế nào không? Có thư viện nào không?


1
Táo biết làm thế nào để xác định rằng: p
JoshJordan


2
Nếu quan tâm của bạn trong câu hỏi này tại sao không ủng hộ đề xuất Area 51 cho một trang web stack Trao đổi tù phá
Richard Stelling

Câu trả lời:


39

Đây là một trong những cách để phát hiện xem ứng dụng của bạn có bị bẻ khóa hay không.

Tóm lại: việc bẻ khóa thường yêu cầu thay đổi Info.plist. Vì đó là tệp thông thường mà bạn có quyền truy cập, nên khá dễ dàng để xác định những thay đổi như vậy.


1
Thật không may, có một cách giải quyết phá vỡ cơ chế phát hiện này. Sau khi ứng dụng được cài đặt, khóa SignerIdentity không còn cần thiết nữa, vì vậy kẻ bẻ khóa có thể chỉ cần ssh vào điện thoại đã jailbreak của họ và chỉnh sửa plist để xóa nó.
Lily Ballard

@KevinBallard bạn có đề xuất nào để phát hiện các bản bẻ khóa phổ biến trong năm 2017 không?
Cœur

@ Thưa ngài, tôi chưa xem xét vấn đề này kể từ khi viết nhận xét đó.
Lily Ballard

25

Việc phát hiện một điện thoại đã bẻ khóa cũng dễ dàng như kiểm tra sự hiện diện của /private/var/lib/apt/ thư mục. Mặc dù điều này không phát hiện người dùng chỉ cài đặt, nhưng hầu hết đã cài đặt Cydia, Icy hoặc RockYourPhone (tất cả đều sử dụng apt)

Để phát hiện người dùng vi phạm bản quyền, cách dễ nhất là kiểm tra sự hiện diện của SignerIdentitykhóa trong ứng dụng của bạn Info.plist. Vì các cracker nâng cao có thể dễ dàng tìm thấy các [[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]kiểm tra tiêu chuẩn , nên tốt nhất là bạn nên làm mờ các lệnh gọi này bằng cách sử dụng thời gian chạy Objective C có sẵn #import <objc/runtime.h>hoặc sử dụng các phương thức tương đương thay thế.


10

Chỉ để mở rộng câu trả lời của zakovyrya, bạn có thể sử dụng mã sau:

if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
  // Jailbroken
}

TUY NHIÊN, người bẻ khóa ứng dụng của bạn có thể chỉnh sửa chương trình của bạn và như vậy, họ có thể chỉnh sửa chuỗi @ "SignerIdentity" thành @ "siNGeridentity" hoặc một cái gì đó khác sẽ trả về nil, và do đó, nó sẽ vượt qua.

Vì vậy, nếu bạn sử dụng cái này (hoặc bất kỳ đề xuất nào khác từ http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html ):

  • Đừng mong đợi nó hoạt động mãi mãi
  • Không sử dụng thông tin này để phá vỡ / cản trở ứng dụng của bạn theo bất kỳ cách nào (nếu không, họ sẽ có nguyên nhân để chỉnh sửa nó, vì vậy ứng dụng của bạn sẽ không biết nó đã được bẻ khóa)
  • Có lẽ khôn ngoan khi làm xáo trộn bit này của mã. Ví dụ: bạn có thể đặt chuỗi đảo ngược được mã hóa base64 trong mã của mình, sau đó giải mã nó trong ứng dụng bằng cách đảo ngược quy trình.
  • Xác thực xác thực của bạn sau này trong mã của bạn (ví dụ: khi tôi nói SignerIdentity, nó thực sự nói SignerIdentity hay siNGeridentity?)
  • Đừng nói với mọi người trên một trang web công khai như stackoverflow cách bạn làm điều đó
  • Hãy nhớ rằng nó chỉ là một hướng dẫn và không chống lừa được (cũng không phải là chống bẻ khóa!) - với sức mạnh lớn thì trách nhiệm lớn.

Vì vậy, điều này sẽ kiểm tra SignerIdentity trên Gói ứng dụng của bạn, nhưng còn trong trường hợp ứng dụng không bị tấn công hoặc bất kỳ thứ gì nhưng thiết bị là JailBroken, bạn sẽ phát hiện điều đó như thế nào?
Edward Ashak

Hỏi nó như là một câu hỏi về SO và ai đó sẽ trả lời :)
Benjie

5

Để mở rộng các nhận xét của yonel và Benjie ở trên:

1) Phương pháp của Landon Fuller dựa vào kiểm tra mã hóa, được liên kết ở trên bởi yonel, dường như là phương pháp duy nhất vẫn chưa bị đánh bại bởi các công cụ bẻ khóa tự động. Tôi sẽ không quá lo lắng về việc Apple sẽ sớm thay đổi trạng thái của tiêu đề LC_ENCRYPTION_INFO. Nó dường như có một số tác động không thể đoán trước đối với điện thoại đã bẻ khóa (ngay cả khi người dùng đã mua một bản sao ...)

Bằng mọi giá, tôi sẽ không thực hiện bất kỳ hành động hấp tấp nào chống lại người dùng dựa trên mã đó ...

2) Để bổ sung cho nhận xét của Benjie lại. obfuscation (điều cần thiết tuyệt đối khi xử lý bất kỳ giá trị chuỗi nào trong mã chống vi phạm bản quyền của bạn): một cách tương tự nhưng có lẽ còn dễ dàng hơn là luôn kiểm tra phiên bản băm muối của giá trị bạn đang tìm kiếm. Ví dụ: (mặc dù việc kiểm tra đó không còn hiệu quả), bạn sẽ kiểm tra tên khóa của từng MainBundle là md5 (keyName + "một số muối bí mật") với hằng số thích hợp ... Thay vì cơ bản, nhưng chắc chắn sẽ đánh bại mọi nỗ lực tìm kiếm chuỗi.

Tất nhiên, điều này yêu cầu bạn có thể truy vấn gián tiếp giá trị mà bạn muốn so sánh (ví dụ: bằng cách đi qua một mảng chứa nó). Nhưng điều này thường xảy ra nhất.


Phương pháp Landon Fuller ngày nay có còn khả dụng với iOS 7 không?
Basil Bourque
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.